Untitled
unknown
plain_text
2 years ago
3.8 kB
7
Indexable
DEFINE
-- Berechnung des aggregierten Umsatzes aus der Tabelle FactSales01. In der ungefilterten und unmodifizierten
-- Verwendung des Measures wird immer der IST-Umsatz als Result ausgegeben.
MEASURE FactSales01[Umsatz] = CALCULATE(
SUM(
FactSales01[Amount] -- Berechnung des Umsatzes auf Basis einer Summenaggregation der Umsatzwerte in der Tabelle FactSales01
)
)
-- Berechnung der Umsatzes aus dem Vorjahr.
MEASURE FactSales01[Umsatz VJ] =
VAR _prevYear = MAX('Time'[Year])-1 -- _prevYear gibt als Result das Vorjahr der ausgewählten Zeile aus (Bsp.: 2017)
VAR _prevMonth = MAX('Time'[MonthNumber]) -- _prevMonth gibt als Result die Zahl des Monats der ausgewählten Zeile aus (Bsp.: 01)
VAR _prevDate = TOPN( -- Bildung eines Skalars aus der zurückgegebenen 1x1 Tabelle (Bsp.: 2017-01)
1 -- Auswahl des ersten Eintrages aus der zurückgegebenen 1x1 Tabelle (Bsp.: 2017-01)
,SUMMARIZE( -- Zusammenfassung aller Tage des ausgewählten Monats auf den Monatswert (Bsp.: 2017-01)
FILTER( -- Konstruktion der 1x1 Tabelle mit dem Jahres- & Monatswert des Vorjahres
ALL('Time') -- Entfernung aller äußeren Kontexte durch ein späteres EVALUATE, um ungefiltert an die Vorjahreswerte zu gelangen
,'Time'[Year] = _prevYear && 'Time'[MonthNumber] = _prevMonth -- Filterung der ungefilterten Tabelle auf das Vorjahr sowie den ausgewählten Monat
)
,'Time'[Month1]
)
)
/* VAR _prevDateId = TOPN(
1
,SELECTCOLUMNS(
FILTER(
ALL('Time')
,'Time'[Month1] = _prevDate
)
,'Time'[Id])
)
*/
-- Der Gedanke von _prevDateId war, einen Filter im Folgenden nicht über den String _prevDate durchzuführen,
-- sondern über die Integer ID. Problematik: Die Id der Tabelle Time wird über die einzelnen Tage fortlaufend
-- gebildet. Somit können wir für einen spezifischen Monat eines spezifischen Jahres keine ID finden.
-- Stattdessen finden wir mit der Variable _prevDateId durch die Funktion TOPN() lediglich den obersten Eintrag
-- der generierten Tabelle unter SELECTCOLUMNS(). Diese Tabelle enthält alle Tage des Monats _prevDate. Somit
-- erhalten wir im Result lediglich den Ersten des Monats, der durch _prevDate festgelegt wurde!
VAR _Umsatz = CALCULATE(
[Umsatz]
,FILTER(
ALL('Time')
,'Time'[Month1] = _prevDate
)
)
RETURN _Umsatz
EVALUATE(
SUMMARIZECOLUMNS(
'Product'[Category]
,'Product'[ProdName]
,'Time'[Month1]
,FILTER(
'Time'
,'Time'[Year] IN {2018,2019} -- Filterung der IST-Werte auf die Jahre 2018 und 2019 als zu betrachtende IST-Jahre
)
,"Umsatz AJ", FORMAT( -- Berechnung des Umsatzes im jeweils aktuellen Jahr anhand der KPI [Umsatz]
IF(
ISBLANK( -- Ersetzen von NULL Werten durch 0
[Umsatz]
)
,0
,[Umsatz]
)
,"CURRENCY" -- Formatierung der Umsatz-Werte in den Datentyp Currency
)
,"Umsatz VJ", FORMAT( -- Berechnung des Umsatzes im jeweiligen Vorjahr anhand der KPI [Umsatz VJ]
IF(
ISBLANK(
[Umsatz VJ]
)
,0 -- Ersetzen von NULL Werten durch 0
,[Umsatz VJ]
)
,"CURRENCY" -- Formatierung der Umsatz-Werte in den Datentyp Currency
)
)
)
ORDER BY
[Month1]
,[Category]
,[ProdName]
Editor is loading...