Variablen in DAX

    DAX kennt schon seit 2015 Variablen. Variablen in DAX helfen bei der Struktur von Formeln, wenn diese komplexer werden. Dieser Artikel zeigt, wie sie verwendet werden.

    Syntax

    Eine DAX-Formel beginnt mit einem Gleichheitszeichen oder einem Doppelpunkt gefolgt von einem Gleichheitszeichen (Power Pivot und Power BI agieren hier etwas anders). Eine einfache Formel lautet

    Umsatz := SUMX(ORDERS; ORDERS[Total])

    Möchte man eine Variable nutzen, teilt sich die Formel in den Teil, in dem die Variable definiert werden und den Teil für die Definition der Rückgabe:

    [AVG Umsatz] := VAR umsatz = SUMX(ORDERS; ORDERS[Total])
    VAR anzTage = COUNTROWS(Kalender)
    RETURN
    DIVIDE(umsatz;anzTage)

    Jede Variable wir mit dem Schlüsselwort VAR eingeführt. Es gibt keine Datentypen, da DAX diese automatisch ableiten kann.

    Inhalte einer Variable

    Eine Variable kann einen skalaren Wert annehmen:

    VAR anzTageGesamt = COUNTROWS(Kalender)

    oder eine Tabelle:

    VAR wochentage = FILTER(Kalender; Kalender[IsWeekday] = True)

    In beiden Fällen kann man die Variable dann entsprechend verwenden:

    AnteilWochentage:=
    VAR anzTageGesamt = COUNTROWS(Kalender)
    VAR wochentage = FILTER(Kalender; Kalender[IsWeekday] = True)
    RETURN
    DIVIDE(COUNTROWS(wochentage); anzTageGesamt)

    Variablen in Formeln

    Variablen können nicht nur auf oberste Ebene definiert werden, sondern überall, wo eine Expression gefordert ist:

    AnteilWochentage := IF(
    HASONEVALUE(Kalender[Year]);
    VAR anzTageGesamt = COUNTROWS(Kalender)
    VAR wochentage = FILTER(Kalender; Kalender[IsWeekday] = True)
    RETURN
    DIVIDE(wochentage; anzTageGesamt);
    BLANK()
    )

    Anderes Beispiel in einer SUMX-Formel:

    Total :=
    SUMX (ORDERS;
    VAR anzPos =COUNTROWS ( RELATEDTABLE ( ORDER_LINE ) )
    RETURN
    IF (ISBLANK ( anzPos );ORDERS[Total];SUMX ( RELATEDTABLE ( ORDER_LINE ); ORDER_LINE[LineTotal] )))

    SCOPE

    Variablen können nur im selben oder in einem tieferen Scope verwendet werden. So kann man außerhalb einer Formel eine Variable definieren und diese in der Formel verwenden:

    [AVG Umsatz] := VAR umsatz = SUMX(ORDERS; ORDERS[Total])
    VAR anzTage = COUNTROWS(Kalender)
    RETURN
    DIVIDE(umsatz;anzTage)

    Verboten ist aber

    TotalAVG :=
    SUMX (ORDERS;
    VAR anzPos =COUNTROWS ( RELATEDTABLE ( ORDER_LINE ) )
    RETURN
    IF (ISBLANK ( anzPos );ORDERS[Total];SUMX ( RELATEDTABLE ( ORDER_LINE ); ORDER_LINE[LineTotal] ))) / anzPos

    Hier wurde die Variable anzPos in einem tieferen Scope deklariert. Die Variable ist außerhalb von SUMX nicht sichbar.

    Da Measures oder berechnete Spalten selbst auch Scopes sind, ist damit klar, dass man Variablen eines Measures oder einer berechneten Spalte nicht in einer anderen Measure/berechneten Spalte verwenden kann. Die Variablen sind dort nicht sichtbar.

    Kategorien: Artikel, Grundlagen, Power BI, Power Pivot
    Holger Gubbels

    Holger Gubbels ist Spezialist für alles, was mit Business Intelligence zu tun hat. Der Diplom-Informatiker strukturiert und löst als Data Scientist und Berater der mogular GmbH tagtäglich komplexe Problemstellungen rund um die Datenanalyse. Als Dozent der Hochschule für Technik Stuttgart ist er ein ausgewiesener Experte seines Fachs und gewohnt, Inhalte einfach zu erläutern. Genau das macht er auch hier in seinen Beiträgen für das PowerPivotInsights Blog. Zusätzlich ist er Autor für die Computerwoche und den Springer-Verlag. Sie erreichen ihn unter hg@mogular.com

    3 Comments

    Antwort schreiben

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.