Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
3.2 kB
0
Indexable
Never
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 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}
		)
		,"Umsatz AJ", 	FORMAT(
							IF(
								ISBLANK(
									[Umsatz]
								)
								,0
								,[Umsatz]
							)
						,"CURRENCY"
						)
		,"Umsatz VJ", 	FORMAT(
							IF(
								ISBLANK(
									[Umsatz VJ]
								)
								,0
								,[Umsatz VJ]
							)
						,"CURRENCY"
						)	
		--,"Test", [PrevDate]
	)
)

ORDER BY
	[Month1]
	,[Category]
	,[ProdName]