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.knr
union
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.AdrName
ORDER
BY
ordernr
Die 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,TOTALUMSATZ
FROM
JAHRTABLE
LEFT
JOIN
ZEITEINHEITQUARTAL ZQ
ON
ZQ.ZEITEINHEIT = JAHRTABLE.ZEITEINHEIT
ORDER
BY
JAHR,QUARTAL
Die 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
);