Authorization
The user needs at least the right to call up these statistics. In addition, at least read rights to the groups and main groups of the displayed resources are required.
Technical information
The data of the evaluation is prepared with the following SQL query:
declare @INNO_USER varchar(12) = :INNO_USER;declare @INNO_USER_LANG int = :INNO_USER_LANG;declare @DATE_FROM Date = :date_from;declare @DATE_TO Date = :date_to;/*declare @INNO_USER varchar(12) = 'inno';declare @INNO_USER_LANG int = 0;declare @DATE_FROM Date = '01.01.2016';declare @DATE_TO Date = '31.12.2016';--declare @USER_GRNR int = 7;--declare @USER_OGRNR int = 1;*/--FEHL vorbereitenIF OBJECT_ID('tempdb..#fehl', 'U') IS NOT NULL drop table #fehl;create table #fehl( grnr int not null, ogrnr int not null, datumdt date not null, fehl float not null, primary key (grnr, ogrnr, datumdt))insert into #fehl select fet.fact_grnr grnr, fet.fact_ogrnr ogrnr, fet.DatumDT, coalesce(sum(fet.ARBEITSZEIT), 0) as fehl from FACT_EINSAETZE_TAGE fet where fet.fact_grnr in (select pg.grnr from pwgrupp pg where pg.NAME = @INNO_USER and pg.RECHT >= 3) and ((:user_grnr_ISNULL = 1) or (fet.Fact_GrNr in (:user_grnr))) and fet.fact_ogrnr in (select pog.ogrnr from pwogrupp pog where pog.NAME = @INNO_USER and pog.Recht >= 1) and ((:user_ogrnr_ISNULL = 1) or (fet.Fact_OGrNr in (:user_ogrnr))) and fet.DatumDT >= @DATE_FROM and fet.DatumDT <= @DATE_TO and fet.knr in (select distinct(knr) from option_k where typ in (1,2)) group by fet.fact_grnr, fet.fact_ogrnr, fet.DatumDT;--KAPA vorbereitenIF OBJECT_ID('tempdb..#kapa', 'U') IS NOT NULL drop table #kapa;create table #kapa( grnr int not null, ogrnr int not null, datumdt date not null, kapa float not null, primary key (grnr, ogrnr, datumdt))insert into #kapa select frk.grnr, frk.ogrnr, frk.DatumDT, coalesce(sum(frk.KAPA_RESSOURCE), 0) kapa from FACT_RESS_KAPA frk where frk.grnr in (select pg.grnr from pwgrupp pg where pg.NAME = @INNO_USER and pg.RECHT >= 3) and ((:user_grnr_ISNULL = 1) or (frk.GrNr in (:user_grnr))) and frk.ogrnr in (select pog.ogrnr from pwogrupp pog where pog.NAME = @INNO_USER and pog.Recht >= 1) and ((:user_ogrnr_ISNULL = 1) or (frk.OGrNr in (:user_ogrnr))) and frk.DatumDT >= @DATE_FROM and frk.DatumDT <= @DATE_TO group by frk.grnr, frk.ogrnr, frk.DatumDT;--EP-Einsätze ohne PM vorbereitenIF OBJECT_ID('tempdb..#ep_plan', 'U') IS NOT NULL drop table #ep_plan;create table #ep_plan( grnr int not null, ogrnr int not null, datumdt date not null, kapa float not null, primary key (grnr, ogrnr, datumdt))insert into #ep_plan select fet.fact_grnr, fet.fact_ogrnr, fet.DatumDT, coalesce(sum(fet.ARBEITSZEIT), 0) Kapa from FACT_EINSAETZE_TAGE fet where fet.fact_grnr in (select pg.grnr from pwgrupp pg where pg.NAME = @INNO_USER and pg.RECHT >= 3) and ((:user_grnr_ISNULL = 1) or (fet.Fact_GrNr in (:user_grnr))) and fet.fact_ogrnr in (select pog.ogrnr from pwogrupp pog where pog.NAME = @INNO_USER and pog.Recht >= 1) and ((:user_ogrnr_ISNULL = 1) or (fet.Fact_OGrNr in (:user_ogrnr))) and fet.DatumDT >= @DATE_FROM and fet.DatumDT <= @DATE_TO and fet.knr in (select distinct(dk.knr) from DIM_KENNUNG dk where dk.Typ in (4,5,6,7)) and (fet.PROJNR not in (select distinct(usernummer) from AUFUEBER where USERNUMMER is not null)) group by fet.fact_grnr, fet.fact_ogrnr, fet.DatumDT;with datum_go as(select dd.*, g.GrNr, o.OGrNrfrom DIM_DATUM dd, option_g g, option_o owhere dd.DatumDT >= @DATE_FROM and dd.DatumDT <= @DATE_TO and g.Language = 0 and o.Language = 0 and g.grnr in (select pg.grnr from pwgrupp pg where pg.NAME = @INNO_USER and pg.RECHT >= 3) and ((:user_grnr_ISNULL = 1) or (g.GrNr in (:user_grnr))) and o.OGrNr in (select pog.ogrnr from pwogrupp pog where pog.NAME = @INNO_USER and pog.Recht >= 1) and ((:user_ogrnr_ISNULL = 1) or (o.OGrNr in (:user_ogrnr)))), vorgaenge as( select v.datumdt, v.freigabe_ep, v.freigabe_rueck, v.ogrnr, v.grnr, v.STUNDEN_PLAN_TAG, case when (((v.STUNDEN_SOLL_TAG - v.STUNDEN_PLAN_TAG) > 0) and (v.freigabe_ep = 1)) then v.STUNDEN_SOLL_TAG - v.STUNDEN_PLAN_TAG else 0 end STUNDEN_NOT_PLAN_TAG, case when ((v.Freigabe_EP = 0) and (v.Freigabe_Rueck = 1)) then coalesce(v.STUNDEN_SOLL_TAG, 0) else 0 end STUNDEN_SOLL_TAG, v.STUNDEN_IST_TAG from FACT_VORGAENGE_TAGE v), vorgaenge2 as( select v.datumdt, v.ogrnr, v.grnr, sum(v.STUNDEN_PLAN_TAG) STUNDEN_PLAN_TAG, sum(v.STUNDEN_NOT_PLAN_TAG) STUNDEN_NOT_PLAN_TAG, sum(v.STUNDEN_SOLL_TAG) STUNDEN_SOLL_TAG, sum(v.STUNDEN_IST_TAG) STUNDEN_IST_TAG from vorgaenge v group by v.datumdt, v.ogrnr, v.grnr)select d.Jahr, d.Woche, Round(sum(coalesce(k.kapa, 0) - coalesce(f.fehl, 0)), 2) Verfuegbar, 'GREEN' as Verfuegbar_Color, Round(sum(coalesce(ep.kapa, 0)), 2) EP_Plan, 'Crimson' as EP_Plan_Color, Round(sum(coalesce(fvt.STUNDEN_PLAN_TAG, 0)), 2) PM_Plan, 'RoyalBlue' as PM_Plan_Color, Round(sum(coalesce(fvt.STUNDEN_NOT_PLAN_TAG, 0)), 2) PM_Not_Plan, 'MediumBlue' as PM_Not_Plan_Color, Round(sum(coalesce(fvt.STUNDEN_SOLL_TAG, 0)), 2) PM_Soll, 'ORANGE' as PM_Soll_Color, Round(sum(coalesce(fvt.STUNDEN_IST_TAG, 0)), 2) PM_Ist, 'GreenYellow' as PM_Ist_Color, RIGHT('0' + cast(d.Woche as varchar), 2) + '.' + cast(d.Jahr as varchar) as Zeiteinheitfrom datum_go d left outer join #fehl f on f.datumdt = d.DatumDT and f.grnr = d.GrNr and f.ogrnr = d.OGrNr left outer join #kapa k on k.datumdt = d.DatumDT and k.grnr = d.GrNr and k.ogrnr = d.OGrNr left outer join #ep_plan ep on ep.datumdt = d.DatumDT and ep.grnr = d.GrNr and ep.ogrnr = d.OGrNr left outer join vorgaenge2 fvt on fvt.datumdt = d.DatumDT and fvt.grnr = d.GrNr and fvt.ogrnr = d.OGrNrgroup by d.Jahr, d.Wocheorder by d.Jahr, d.Woche
The configuration for the evaluation is stored in the following data set in the table "Statistic_UI":
INSERT INTO STATISTIC_UI (ID, NAME, STATISTIC_CONFIGURATION, STATISTIC_CONTROLLER, CATEGORY_ID, DELETED, DESCRIPTION, IS_INTERNAL, OVERRIDDEN_BY)
VALUES ('{13540FB3-149E-4ED1-86F9-0A7BD09B06A8}5', 'Vergleich Soll-, Plan-, Iststunden', '{
"type": "STATISTIK",
"rows": [
{
"type": "ROW",
"rowItems": [
{
"type": "TABLECHART",
"width": "12",
"uid": "732052f1-8353-467f-92ef-a557a139e7ad",
"dataUrl": "api/dynamicapi/{205C8FC4-03D9-4C75-9634-CE9A6C9B7E72}39/GetData",
"chartSettings": {
"theme": "bootstrap",
"autoSeries": [
{
"type": "line",
"style": "step",
"field": "VERFUEGBAR",
"colorField": "VERFUEGBAR_COLOR",
"color": "GREEN",
"name": "Verfügbar",
"stack": {
"group": ""
}
},
{
"type": "column",
"field": "PM_PLAN",
"colorField": "PM_PLAN_COLOR",
"color": "BLUE",
"style": "step",
"name": "Geplant (PM)",
"stack": {
"group": "PM"
}
},
{
"type": "column",
"style": "step",
"field": "PM_NOT_PLAN",
"colorField": "PM_NOT_PLAN_COLOR",
"name": "Ungeplant (PM)",
"stack": {
"group": "PM"
},
"color": ""
},
{
"type": "column",
"colorField": "EP_PLAN_COLOR",
"style": "step",
"field": "EP_PLAN",
"color": "RED",
"name": "Geplant (EP)",
"stack": {
"group": "PM"
}
},
{
"type": "column",
"style": "step",
"field": "PM_SOLL",
"colorField": "PM_SOLL_COLOR",
"stack": {
"group": "PM"
},
"name": "Bedarf (PM)"
},
{
"type": "column",
"style": "step",
"field": "PM_IST",
"colorField": "PM_IST_COLOR",
"color": "",
"name": "IST (PM)",
"stack": {
"group": "PM2"
}
}
],
"chartArea": {
"margin": {
"left": 0
}
},
"valueAxis": {
"visible": false
},
"series": [
{
"type": "line",
"field": "VERFUEGBAR",
"colorField": "VERFUEGBAR_COLOR",
"color": "GREEN",
"missingValues": "zero",
"visibleInLegend": false,
"name": "Verfügbar",
"style": "step"
},
{
"type": "column",
"field": "PM_PLAN",
"colorField": "PM_PLAN_COLOR",
"color": "BLUE",
"missingValues": "zero",
"visibleInLegend": false,
"name": "Geplant (PM)",
"style": "step",
"stack": {
"group": "PM"
}
},
{
"type": "column",
"field": "PM_NOT_PLAN",
"colorField": "PM_NOT_PLAN_COLOR",
"color": "",
"missingValues": "zero",
"visibleInLegend": false,
"name": "Ungeplant (PM)",
"style": "step",
"stack": {
"group": "PM"
}
},
{
"type": "column",
"field": "EP_PLAN",
"colorField": "EP_PLAN_COLOR",
"color": "RED",
"missingValues": "zero",
"visibleInLegend": false,
"name": "Geplant (EP)",
"style": "step",
"stack": {
"group": "PM"
}
},
{
"type": "column",
"field": "PM_SOLL",
"colorField": "PM_SOLL_COLOR",
"missingValues": "zero",
"visibleInLegend": false,
"name": "Bedarf (PM)",
"style": "step",
"stack": {
"group": "PM"
}
},
{
"type": "column",
"field": "PM_IST",
"colorField": "PM_IST_COLOR",
"color": "",
"missingValues": "zero",
"visibleInLegend": false,
"name": "IST (PM)",
"style": "step",
"stack": {
"group": "PM2"
}
}
]
},
"firstColumnWidth": "115",
"titel": "{{{Statistik.VergleichSollPlanIststunden}}}",
"pageSize": "13",
"categoryAxis": {
"field": "ZEITEINHEIT"
},
"exportTemplate": "",
"chartHeight": "400"
}
],
"uid": "7a9f67d9-5081-496a-944e-aa2a91ba50a5"
}
],
"parameters": [
{
"type": "DATE",
"width": "7",
"uid": "b5729a43-369f-48af-903b-27e8ce3aab4b",
"name": "date_from",
"label": "{{{Standard.Von}}}"
},
{
"type": "DATE",
"width": "7",
"uid": "90ee843c-8bff-4f37-9ba4-39589c7250b2",
"name": "date_to",
"label": "{{{Standard.Bis}}}"
},
{
"type": "MULTISELECT",
"width": "12",
"uid": "2d19cb1c-aaa2-424f-910f-34f13603b3a5",
"name": "user_grnr",
"label": "{{{Field.Ressource.gruppe}}}",
"dataUrl": "api/dynamicapi/{205C8FC4-03D9-4C75-9634-CE9A6C9B7E72}2/GetData",
"keyField": "GRNR",
"valueField": "GRUPPE"
},
{
"type": "MULTISELECT",
"width": "12",
"uid": "04a7ffcb-4dc7-463a-92ba-e535be95bb41",
"name": "user_ogrnr",
"label": "{{{Statistik.Obergruppe}}}",
"dataUrl": "api/dynamicapi/{205C8FC4-03D9-4C75-9634-CE9A6C9B7E72}1/GetData",
"keyField": "OGRNR",
"valueField": "OBERGRUPPE"
}
],
"settings": {
"type": "SETTINGS"
}
}', '
var controller={};
controller.getInitialValues = function(paramsFromStorage){
if (paramsFromStorage) {
return paramsFromStorage;
}
var Jahr = new Date().getFullYear();
return {
date_from: ''01.01.'' + Jahr,
date_to: ''31.12.'' + Jahr
};
}
controller;
', 2, 0, '
Planzeiten (wochenweise):
Verfügbar: Verfügbare Kapazität in Stunden errechnet aus der bei der Ressource hinterlegten oder der systemweit eingestellten Arbeitszeit / Tag. Fremd-Ressourcen werden berücksichtigt, sobald ihnen ein Balken zugewiesen ist. Die Soll-Kapazität erhöht sich dann für die Länge des Balkens um die im Balken erfasste Arbeitszeit / Tag. Fehlzeiten sind abgezogen.
Geplant (PM): Freigegebene Zeiten (EP-Freigabe) aus dem Projektmanagement, denen bereits ein Einsatz in der Einsatzplanung zugewiesen worden ist.
Ungeplant (PM): Freigegebene Zeiten (EP-Freigabe) aus dem Projektmanagement, für die noch nicht alle Stunden verplant wurden ((PM.BedarfSoll - EP.BedarfPlan) > 0).
Geplant (EP): Einsätze ohne Bezug zum Projektmanagement, z.B. Serviceeinsätze, interne oder adressbezogene Einsätze
Bedarf (PM): Soll-Zeiten aus dem Projektmanagement, die keine Freigabe für die Einsatzplanung besitzen. Diese Zeiten werden nur berücksichtigt, wenn in den entsprechenden Projekten die Freigabe Rückmeldung gesetzt ist.
IST (PM): Rückgemeldete Ist-Zeiten
Filter:
Start - Ende
Gruppe (unter Berücksichtigung der Benutzerberechtigung)
Obergruppe (unter Berücksichtigung der Benutzerberechtigung)
', 1, NULL);