Untitled
unknown
plain_text
2 years ago
3.8 kB
6
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...