DAX Time Intelligence Berechnungen mit Calculation Groups

Calculation Groups ermöglichen die zentrale Definition von Berechnungen wie Year-to-Date, Year-over-Year und deren variable Anwendung auf alle (relevanten) Kennzahlen Measures einer Power BI Anwendung. Bemerkenswert ist, daß Calculation Groups nicht direkt in Power BI Desktop sondern nur in External Tools wie dem Tabular Editor definiert werden können. Der folgende Beitrag soll einen ersten praktischen Einstieg in das Thema liefern, ohne alle Facetten dieses großen Features zu beleuchten.

1. Ausgangssituation

Ausgangsbasis ist eine Sales Anwendung mit 4 Kennzahlen Measures, welche spezifisch formatiert sind und für die jeweils eine Year-to-Date (YTD) Berechnung, eine Year-over Year (YoY) als auch eine YoY in % Berechnung erstellt werden soll:

Das Datenmodell ist ein normales Star Schema, für die 4 Measures wurde mittels dem Field Parameter Wizard eine sogenannte Measure Selektion angelegt (welche die Basis für die im oberen Screenshot sichtbaren Kennzahlen Slicer darstellt):

2. Definition einer Calculation Group

Die Calculation Group erspart uns die Anlage von je 3 Time Intelligence Measures je Kennzahlen Measures (= 12 neue Measures). Stattdessen können diese Berechnungen zentral definiert werden und dann auf alle (relevanten) Measures angewendet werden.

Wie eingangs schon beschrieben, können mit Power BI Desktop selbst aber keine Calculation Groups angelegt werden. Wir verwenden für diese Aufgabe daher das externe Tool Tabular Editor, die Installation externer Tools haben wir hier bereits beschrieben. Die Anwendung Tabular Editor wird mit dem entsprechenden Button in der External tools Menüleiste gestartet:

Auf dem Eintrag Tables wird im Kontextmenü Create New -> Calculation Group ausgewählt:

Die Tabelle wurde hier Time Intelligence und die Spalte Calculations benannt. Im Kontextmenü des Eintrags Calculation Items werden jetzt ...

... die Einträge für die gewünschten Time Intelligence Berechnungen erst mal nur namentlich angelegt. Danach werden die DAX Statements für die Berechnungen in den Calculation items eingefügt:

Hier die verwendeten DAX Statements. Der Syntax ist übrigens ident mit jenem in einer normalen Measure Berechnung, die Funktion SELECTEDMEASURE() übernimmt dabei die Platzhalterfunktion / die Referenz auf das (später) im Visual konkret verwendete Measure:

Current = 
SELECTEDMEASURE()
YTD =
CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD('Dim Dates'[Date])
)
YoY = 
SELECTEDMEASURE()
-
CALCULATE(
    SELECTEDMEASURE(),
    DATEADD('Dim Dates'[Date],-12,MONTH)
)
YoY in % =
DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Calculations] = "YoY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        DATEADD('Dim Dates'[Date],-12,MONTH)
    )
)

Sämtliche Änderungen am Datenmodell sind erst mal nur virtuell im Tabular Editor umgesetzt, mit dem Button Save the changes to the connected database werden die Änderungen auf die PBIX Anwendung aufgeschalten:

Die Änderungen sind in Power BI Desktop erst nutzbar, nach der Refresh now Button gedrückt wird:

Jetzt kann die Column Calculations bspw. im Spaltenbereich des Matrix Visuals aufgetragen werden. Die Berechnungen sind bereits voll funktionstüchtig, lediglich passt die Standardformatierung des referenzierten Measures (hier: Sales) nicht für die YoY in % Berechnung:

3. Individuelle Formatierung der Calculation Items

Zur Lösung dieses Themas wird eine individuelle Format String Expression beim Calculation item YoY in % hinterlegt. Bitte beachten Sie, daß hier sehr ausgeklügelte DAX Statements zur differenzierten Ermittlung des Format Strings hinterlegt werden können, im vorliegenden Fall reicht aber eine statische Formatierung:

Format String Expression =
"0.0 %"

Nach der Verspeicherung der Änderungen im Tabular Editor ist die gewünschte Formatierung für die YoY in % Berechnung unmittelbar im Matrix Visual in Power BI Desktop zu sehen:

Zusammenfassend die Time Intelligence Berechnungen und Formatierungen für alle 4 Kennzahlen:

4. Spezifische DAX Funktionen für Calculation Groups

Die folgenden DAX Funktionen stehen speziell zur Verwendung iZm Calculation Groups zur Verfügung:

SELECTEDMEASURE()
Liefert das aktuell im Visual berechnete Measure inkl. dessen Formatierung. Wird verwendet als Referenz ("Platzhalter") im DAX Statement des Calculation items auf das Measure im Visual.

SELECTEDMEASURENAME()
Liefert den Namen des aktuell im Visual berechnete Measures.

ISSELECTEDMEASURE(<measures>)
Liefert den Wert TRUE, sofern das aktuell im Visual berechnete Measure in der Liste der im Parameter der Funktion aufgezählten Measures dabei ist. Wird verwendet, um Calculation Groups selektiv nur für bestimmte Measures wirken zu lassen und/oder spezifische Formatierungen anzuwenden.

SELECTEDMEASUREFORMATSTRING()
Liefert die bestehende Formatierung des aktuell im Visual berechneten Measures. Wird verwendet, um bei bedingten Format Strings meist in der "Else" Klausel auf die definierte Formatierung des aktuellen Measures zu referenzieren.

5. Anwendungsgebiete, fortgeschrittene Funktionen und Limitationen

Calculation Groups können jedenfalls für folgende Aufgaben verwendet werden:

  • Time Intelligence Berechnungen
  • Währungsumrechnung (siehe hier)
  • Dynamische Formatierung von Measures (siehe hier, mit dem seit April 2023 verfügbaren "Dynamic Format Strings for Measures" Feature ist dieser Anwendungsfall aber nicht mehr so relevant)
  • Variabilisierung eines Teils einer Measure Berechnung (siehe hier)
  • Variabilisierung einer USERELATIONSHIP()-Berechnung in einem Datenmodell mit einer Role-Playing-Dimension (siehe hier)

Bei fortgeschrittenen Anwendungen sind jedenfalls noch folgende Themen relevant:

  • Format String Expressions - hier können sehr anspruchsvolle dynamische Formatierungsbedingungen (mittels DAX Statement) definiert werden.
  • Berechnungsreihenfolgen - wichtig bei mehreren Calculation Groups in der gleichen Anwendung

Folgende Limitationen bestehen aktuell:.

  • In einem Datenmodell mit Calculation Groups können keine impliziten Measures mehr verwendet werden.
  • Row Level Security (RLS) und Object Level Security (OLS) können nicht auf die Calculation Groups Tabelle angewendet werden.
  • Detaill Rows Expressions (in SQL AS Tabular Models) können nicht mit Calculation Groups kombiniert werden.
  • Im Table und Matrix Visual können die einzelnen items der Calculation Group (= Spalten im Matrix Visual) nicht mehr mit der Funktion "Cell Elements" einzeln formatiert werden.

Quellen

https://learn.microsoft.com/de-de/analysis-services/tabular-models/calculation-groups

https://www.sqlbi.com/articles/introducing-calculation-groups/

https://www.sqlbi.com/articles/understanding-calculation-groups/

https://www.sqlbi.com/articles/controlling-format-strings-in-calculation-groups/

Über den Autor

Blog auf Feedly abonnieren

Kategorien

Verwandte Beiträge

Power BI Camp - Präsenztrainings in Wien und Nürnberg!

Dashboarding mit Power BI, DAX & Datenmodellierung und Power Query. Drei Einzelmodule oder als ganze Trainingswoche - für Einsteiger und Fortgeschrittene!

Termine 2022

Wien: (7./8. Februar 2022)
und 25.-28 April 2022
Nürnberg: (14./15. Februar 2022)
und 9.-12. Mai 2022

Jetzt buchen und Rabatt sichern.

Jetzt buchen!

Leave a Replay

Schreibe einen Kommentar

Kostenlos zum Newsletter anmelden

Ihre Anfrage

Schicken Sie uns Ihre Fragen und Anregungen!