Berechtigungen
Der Anwender benötigt mindestens das Recht die Statistik einsehen zu dürfen. Außerdem werden bei Kunden mit hinterlegter Obergruppe die Obergruppenrechte beachtet.
Technische Informationen
Die Auswertung "Umsatz pro Kunde und Kennung" bereitet Daten mit folgender SQL-Abfrage auf:
Umsatz pro Kunde und Kennung
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.2000';declare @date_to date = '01.01.2010';*/with umsatz as( SELECT VKUNADR.ADRNR, VKUNADR.ADRNAME, BFKOPF.PROJNR, SUM(NETTO) AS UMSATZ, OPTION_K.KENNUNG AS KENNUNG, OPTION_K.KNR AS KNR, VKUNADR.OGRNR, (SELECT COALESCE(SUM(BF1.NETTO), 0) FROM BFKOPF BF1 WHERE BF1.ProjNr = BFKOPF.ProjNr AND BF1.ERSTDATUM >= @DATE_FROM AND BF1.ERSTDATUM <= DATEADD(day, 1, @DATE_TO) AND BF1.ART = 'GM' AND NOT coalesce(BF1.RECHNUNGSART, 0) IN (4,5) ) AS SUMME_GUTSCHRIFTEN, COALESCE(SUM(NETTO),0) - (SELECT COALESCE(SUM(BF1.NETTO),0) FROM BFKOPF BF1 WHERE BF1.ProjNr = BFKOPF.ProjNr AND BF1.ERSTDATUM >= @DATE_FROM AND BF1.ERSTDATUM <= DATEADD(day, 1, @DATE_TO) AND BF1.ART = 'GM' AND NOT coalesce(BF1.RECHNUNGSART, 0) IN (4,5) ) AS SUMME_GESAMT FROM BFKOPF JOiN VKUNADR ON VKUNADR.ADRNR = BFKOPF.DEBITNR LEFT JOIN KUNDE ON KUNDE.PROJNR = BFKOPF.PROJNR LEFT JOIN OPTION_K ON (OPTION_K.KNR = KUNDE.KNR AND OPTION_K.LANGUAGE = @INNO_USER_LANG) WHERE BFKOPF.ERSTDATUM >= @DATE_FROM AND BFKOPF.ERSTDATUM <= DATEADD(day, 1,@DATE_TO) AND BFKOPF.ART = 'AM' AND NOT coalesce(BFKOPF.RECHNUNGSART, 0) IN (4,5) and (VKUNADR.OGRNR IN (SELECT OGRNR FROM PWOGRUPP WHERE NAME = @INNO_USER AND RECHT >= 1)) AND ((:user_ogrnr_isNull = 1) OR (VKUNADR.OGRNR IN (:user_ogrnr))) GROUP BY VKUNADR.ADRNR, VKUNADR.ADRNAME, BFKOPF.PROJNR, OPTION_K.KENNUNG, OPTION_K.KNR, VKUNADR.OGRNR) select u.adrnr, u.AdrName, Round(sum(u.Umsatz), 2) SUMME_RNG, u.kennung, u.knr, u.AdrName + '_' + cast(u.knr as varchar) ordernr, Round(sum(u.SUMME_GUTSCHRIFTEN), 2) SUMME_GUTSCHRIFTEN, Round(sum(u.SUMME_GESAMT), 2) SUMME_GESAMT from umsatz u group by u.adrnr, u.AdrName, u.kennung, u.knrunion all select u.adrnr, u.AdrName, Round(sum(u.Umsatz), 2) SUMME_RNG, '' kennung, 0 knr, u.AdrName + '_999' ordernr, Round(sum(u.SUMME_GUTSCHRIFTEN), 2) SUMME_GUTSCHRIFTEN, Round(sum(u.SUMME_GESAMT), 2) SUMME_GESAMT from umsatz u group by u.adrnr, u.AdrNameORDER BY ordernrDie Oberfläche der Auswertung ist in folgendem Datensatz in der Tabelle "Statistic_UI" hinterlegt:
INSERT Umsatz pro Kunden und Kennung
INSERT INTO STATISTIC_UI (ID, NAME, STATISTIC_CONFIGURATION, STATISTIC_CONTROLLER, CATEGORY_ID, DELETED, DESCRIPTION, IS_INTERNAL, OVERRIDDEN_BY)VALUES ('{13540FB3-149E-4ED1-86F9-0A7BD09B06A8}13', 'Umsatz pro Kunde und Kennung', '{ "type": "STATISTIK", "rows": [ { "type": "ROW", "rowItems": [ { "type": "TABLE", "width": "12", "name": "", "dataUrl": "api/dynamicapi/{205C8FC4-03D9-4C75-9634-CE9A6C9B7E72}17/GetData", "columns": [ { "header": "{{{Statistik.Kundennummer}}}", "columnName": "ADRNR", "template": "# //style=''font-weight:bold; background-color:red''\n\ts = \"<div>\" +\n\t \"<a href=\"+context.INNO_BASE_PATH +\"Statistic/StatisticWebPage\\\\#/statistic/{13540FB3-149E-4ED1-86F9-0A7BD09B06A8}21?ADRNR=\"+row.ADRNR +\"&_drilldown=true\\>\"+row.ADRNR+\"</a>\" +\n\t \"</div>\";\n\treturn s;\n\t\t\n#\n", "width": "115px" }, { "header": "{{{Standard.Name}}}", "columnName": "ORDERNR", "template": "# \nreturn row.ADRNAME; \n#\n", "width": "" }, { "header": "{{{Field.Einsatz.kennung}}}", "columnName": "ORDERNR", "template": "# return row.KENNUNG; #\n", "width": "150px" }, { "header": "{{{Statistik.SummeRechnungen}}}", "columnName": "ORDERNR", "template": "#\n\nvar value = row.SUMME_RNG;\nvar div;\nvar knr = row.KNR;\nvar f_color = ''black;'';\n\nif (value < 0)\n f_color = ''red;'';\n\nif (knr == ''0'')\n div = ''<div style=\"color:'' + f_color + ''font-weight:bold;font-size:100%;\">'';\nelse\n div = ''<div style=\"color:'' + f_color + ''\">'';\n \nreturn div + value.toFixed(2).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ''</div>''; \n\n#", "align": "right", "width": "122px", "format": "#.00" }, { "header": "{{{Statistik.SummeGutschriften}}}", "columnName": "ORDERNR", "template": "\n# \n\nvar value = row.SUMME_GUTSCHRIFTEN;\nvar div;\nvar knr = row.KNR;\nvar f_color = ''black;'';\n\nif (value > 0)\n f_color = ''red;'';\n\nif (knr == ''0'')\n div = ''<div style=\"color:'' + f_color + ''font-weight:bold;font-size:100%;\">'';\nelse\n div = ''<div style=\"color:'' + f_color + ''\">'';\n \nreturn div + value.toFixed(2).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ''</div>''; \n\n#", "align": "right", "width": "122px", "format": "#.00" }, { "header": "{{{Statistik.Umsatz}}}", "columnName": "ORDERNR", "template": "# \n\nvar value = row.SUMME_GESAMT;\nvar div;\nvar knr = row.KNR;\nvar f_color = ''black;'';\n\nif (value < 0)\n f_color = ''red;'';\n\nif (knr == ''0'')\n div = ''<div style=\"color:'' + f_color + ''font-weight:bold;font-size:115%;\">'';\nelse\n div = ''<div style=\"color:'' + f_color + ''\">'';\n \nreturn div + value.toFixed(2).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ''</div>''; \n\n#", "align": "right", "width": "115px", "format": "#0.00" } ], "uid": "068a03e4-e109-4bd3-86ec-f62aaa8c5441", "titel": "Umsatz pro Kunde und Kennung", "exportTemplate": "", "dataSource": { "dataUrl": "api/dynamicapi/{205C8FC4-03D9-4C75-9634-CE9A6C9B7E72}17/GetData", "_Object_Type": "sql" } } ], "uid": "4b873895-75f3-427a-9ff2-8a6e1321c0f8" } ], "parameters": [ { "type": "DATE", "width": "7", "name": "date_from", "label": "{{{Standard.Von}}}", "uid": "9013e5fa-7df2-418e-a4dc-3a4a41f4d7f8" }, { "type": "DATE", "width": "7", "name": "date_to", "label": "{{{Standard.Bis}}}", "uid": "a9036f04-a4c6-4e08-a3f8-bc0e691f8dde" }, { "type": "MULTISELECT", "width": "12", "uid": "6efd5fd6-1b79-459f-b7b6-913d99238bf1", "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;', 8, 0, '<h4>Umsatz pro Kunde unterteilt nach Kennung und Gesamtumsatz pro Kunde.</h4>Per Klick auf die Kundennummer wird auf die kundenspezifische quartalsweise Umsatzübersicht im Zeitraum verwiesen. <br><br><h4>Filter:</h4><ul> <li>Von - Bis <li>Obergruppe (unter Berücksichtigung der Benutzerberechtigung) des Auftraggebers</ul>', 1, NULL);Die SQL-Abfrage für die Drilldown Auswertung "Umsatz je Kunde pro Quartal" sieht aus wie folgt:
Umsatz je Kunde pro Quartal
WITH RECHNUNGEN As ( SELECT DEBITNR,NETTO,DATEPART(year,ERSTDATUM) AS JAHR, DATEPART(quarter,ERSTDATUM) AS QUARTAL FROM BFKOPF WHERE ART IN ('AM','GM') AND DEBITNR = :ADRNR AND ERSTDATUM BETWEEN :date_from AND :date_to ), QUARTALRESULT As -- Man kann über selbst vergebene Aliase (RECHNUNGEn.QUARTAL) nicht groupen daher noch eine View ( SELECT DEBITNR,SUM(NETTO) AS UMSATZ,QUARTAL,JAHR FROM RECHNUNGEN GROUP BY JAHR,QUARTAL,DEBITNR,NETTO ), COMBINEDRESULT AS -- Um jetzt alle zusammenzufassen, wo QUARTAL,JAHR,DEBITNR in einer Zeile gleich sind ( SELECT DEBITNR,ROUND(SUM(UMSATZ),2) AS TOTALUMSATZ,QUARTAL,JAHR FROM QUARTALRESULT GROUP BY DEBITNR,JAHR,QUARTAL ), ZeitEinheitQuartal As ( SELECT TOTALUMSATZ, (Cast(QUARTAL as varchar) + '.' + Cast(JAHR as varchar)) AS ZEITEINHEIT FROM COMBINEDRESULT ), JAHRTABLE As ( SELECT JAHR,QUARTAL,(Cast(QUARTAL as varchar) + '.' + Cast(JAHR as varchar)) AS ZEITEINHEIT FROM DIM_DATUM WHERE DATUMDT BETWEEN :date_from AND :date_to GROUP BY JAHR,QUARTAL )SELECT JAHR,QUARTAL,JAHRTABLE.ZEITEINHEIT,TOTALUMSATZFROM JAHRTABLELEFT JOIN ZEITEINHEITQUARTAL ZQ ON ZQ.ZEITEINHEIT = JAHRTABLE.ZEITEINHEITORDER BY JAHR,QUARTALDie Oberfläche der Auswertung wird in folgendem Datensatz in der Tabelle "Statistic_UI gespeichert":
INSERT Umsatz je Kunde Pro Quartal
INSERT INTO STATISTIC_UI (ID, NAME, STATISTIC_CONFIGURATION, STATISTIC_CONTROLLER, CATEGORY_ID, DELETED, DESCRIPTION, IS_INTERNAL, OVERRIDDEN_BY)VALUES ('{13540FB3-149E-4ED1-86F9-0A7BD09B06A8}21', 'Umsatz Je Kunde Pro Quartal', '{ "type": "STATISTIK", "rows": [ { "type": "ROW", "rowItems": [ { "type": "CHART", "width": "12", "uid": "40a5d362-596c-45cf-bbf8-e62d05459b1e", "titel": "{{{Statistik.UmsatzProQuartal}}}", "dataUrl": "api/dynamicapi/{205C8FC4-03D9-4C75-9634-CE9A6C9B7E72}37/GetData", "chartSettings": { "series": [ { "field": "TOTALUMSATZ", "type": "column", "colorField": "" } ], "categoryAxis": { "field": "ZEITEINHEIT" }, "theme": "bootstrap", "valueAxis": null }, "label": "", "pageSize": "20", "height": "" } ], "uid": "33259864-27cc-4d26-9cd6-8465fc7e9444" } ], "parameters": [ { "type": "DATE", "width": "7", "uid": "09ed7b73-b428-4c12-8a95-0d4ef97035e4", "name": "date_from", "label": "{{{Standard.Von}}}" }, { "type": "DATE", "width": "7", "uid": "ebedfb88-c061-4ade-b291-268f9a173cc6", "name": "date_to", "label": "{{{Standard.Bis}}}" }, { "type": "REACTTEXT", "width": "7", "uid": "f5565303-b828-4304-a929-5a24cc6ee5d2", "name": "ADRNR", "label": "{{{Statistik.Kundennummer}}}" } ], "settings": { "type": "SETTINGS" }}', 'var controller={};controller.getInitialValues = function(paramsFromStorage,params){ debugger;var initVal = {}; if (paramsFromStorage) { initVal = paramsFromStorage; } if(params && params.ADRNR){ initVal.ADRNR = params.ADRNR; } return initVal; var Jahr = new Date().getFullYear(); return { date_from: ''01.01.'' + Jahr, date_to: ''31.12.'' + Jahr }; }controller;', NULL, 0, '', 1, NULL);