DAX und Datenmodelle

Mehrere IF-Anweisungen in Power BI mit SWITCH schreiben

Ersetzen Sie verschachtelte IF-Anweisungen in Power BI durch SWITCH ( TRUE (), ... ): Syntax, DAX-Beispiele, AND und OR und typische Fehler.

Sajagan Thirugnanam

·

Aktualisiert

Um in Power BI mehrere IF-Anweisungen zu schreiben, nutzen Sie SWITCH ( TRUE (), condition1, result1, condition2, result2, ..., else ) statt ein IF in ein anderes zu verschachteln. Ein verschachteltes IF in Power BI funktioniert, aber jede weitere Bedingung fügt eine weitere Klammerebene hinzu, und SWITCH hält alle Bedingungen in einer flachen Liste. Dieser Beitrag zeigt beides mit funktionierendem DAX und die Fehler, die dafür sorgen, dass ein SWITCH die falsche Antwort liefert.

Mehrere IF-Anweisungen in Power BI: der Weg mit verschachteltem IF

Die DAX-Funktion IF prüft eine Bedingung:

IF ( <logical_test>, <value_if_true> [, <value_if_false>

Um eine zweite Bedingung zu prüfen, setzen Sie ein weiteres IF in den Platz value_if_false. Das ist ein verschachteltes IF. Angenommen, Sie wollen Produkte nach Verkaufspreis gruppieren:

  • Unter 500 ist Low.

  • 500 bis 999 ist Medium.

  • 1.000 und mehr ist High.

Als berechnete Spalte in der Tabelle Product sieht die Version mit verschachteltem IF so aus:

Price Category =
IF (
    'Product'[Sales Price] < 500,
    "Low",
    IF (
        'Product'[Sales Price] < 1000,
        "Medium",
        "High"
    )
)

Bei drei Ergebnissen ist das noch lesbar. Bei sechs oder sieben häufen sich die Klammern am Ende, und es wird schwer zu erkennen, welches Ergebnis zu welchem Test gehört. Ein neues Band einzufügen heißt, die richtige Ebene dafür zu finden.

So funktioniert die Funktion SWITCH

SWITCH wertet einen Ausdruck aus und vergleicht das Ergebnis mit einer Liste von Werten. Sie liefert das Ergebnis, das zum ersten passenden Wert gehört.

SWITCH ( <expression>, <value>, <result> [, <value>, <result>] ... [, <else>

Argument

Was es tut

expression

Ein beliebiger DAX-Ausdruck, der einen einzelnen Wert liefert. Er wird einmal je Zeile oder Filterkontext ausgewertet.

value

Eine Konstante, die mit dem Ergebnis von expression verglichen wird.

result

Was zurückgegeben wird, wenn expression dem zugehörigen value entspricht.

else

Optional. Was zurückgegeben wird, wenn kein Wert passt. Ohne ihn liefert SWITCH blank zurück.

Es gibt zwei Möglichkeiten, sie zu nutzen. Sie können eine Spalte mit festen Werten abgleichen, oder Sie übergeben TRUE () als Ausdruck und schreiben in jeden Wertplatz eine Bedingung.

Exakte Werte mit SWITCH abgleichen

Ist jeder Fall ein exakter Wert, setzen Sie die Spalte selbst in den Ausdrucksplatz. Dieses Beispiel macht aus einem Regionscode den vollständigen Namen:

Region Name =
SWITCH (
    Sales[Region],
    "EMEA", "Europe, Middle East and Africa",
    "APJ", "Asia Pacific and Japan",
    "AMER", "Americas",
    "LATAM", "Latin America",
    "Unknown region"
)

Jeder Code, der nicht in der Liste steht, auch ein leerer, liefert "Unknown region". Ergänzen Sie immer einen else-Wert. Ohne ihn liefert ein vergessener Code blank, und die Zeile fällt in jeder Gruppierung nach Regionsname stillschweigend heraus.

Ein häufiger Einsatz dieses Musters ist, Monatskürzel in volle Monatsnamen umzuwandeln. Dafür brauchen Sie kein SWITCH mit zwölf Zweigen. Hat Ihre Tabelle eine echte Datumsspalte, liefert FORMAT ( 'Calendar'[Date], "mmmm" ) direkt den vollen Monatsnamen. Eine von Hand geschriebene Liste ist außerdem fehleranfällig: Man überspringt leicht versehentlich einen Monat.

Mehrere IF-Bedingungen in DAX mit SWITCH ( TRUE () )

Übergeben Sie für Bereiche und Vergleiche TRUE () als Ausdruck. Jeder Wertplatz enthält dann eine Bedingung. SWITCH liefert das Ergebnis der ersten Bedingung, die wahr ist.

Hier noch einmal die Preiskategorie:

Price Category =
SWITCH (
    TRUE (),
    'Product'[Sales Price] < 500, "Low",
    'Product'[Sales Price] < 1000, "Medium",
    "High"
)

Das liefert dieselben Ergebnisse wie das verschachtelte IF oben. Die erste Bedingung fängt alles unter 500 ab. Die zweite sieht nur noch Preise ab 500, daher bedeutet < 1000: 500 bis 999. Alles, was übrig bleibt, ist 1.000 oder mehr und bekommt den else-Wert "High".

Das Weglassen von TRUE () ist der häufigste SWITCH-Fehler. Ohne es behandelt DAX die erste Bedingung als Ausdruck und "Low" als Vergleichswert. Ein Wahr/Falsch-Ergebnis ist nie gleich dem Text "Low", also passt kein Zweig.

Power-BI-IF-Anweisung mit mehreren Bedingungen

Manchmal braucht ein Zweig zwei Tests gleichzeitig. DAX bietet drei Wege, Bedingungen zu kombinieren:

  • && bedeutet UND. Beide Seiten müssen wahr sein.

  • || bedeutet ODER. Mindestens eine Seite muss wahr sein.

  • AND ( a, b ) und OR ( a, b ) machen dasselbe, nehmen aber genau zwei Argumente. Bei drei oder mehr Bedingungen verketten Sie && oder ||.

Diese funktionieren in IF und in jedem Zweig von SWITCH:

Order Priority =
SWITCH (
    TRUE (),
    Sales[Amount] >= 10000 && Sales[Channel] = "Online", "Priority online",
    Sales[Amount] >= 10000, "Priority",
    Sales[Region] = "EMEA" || Sales[Region] = "APJ", "International",
    "Standard"
)

Um eine Spalte gegen eine Liste zu prüfen, ist IN kürzer als eine Kette von ||:

Is International =
IF ( Sales[Region] IN { "EMEA", "APJ" }, "Yes", "No" )

Bereiche mit einem Measure auswerten

SWITCH funktioniert auch in Measures. Dieses Measure ordnet den ROI der aktuellen Auswahl einem Band zu. Es setzt ein vorhandenes Measure [ROI] voraus, das ein Verhältnis liefert, wobei 0,6 für 60 % steht.

ROI Range =
VAR CurrentROI = [ROI]
RETURN
    SWITCH (
        TRUE (),
        ISBLANK ( CurrentROI ), BLANK (),
        CurrentROI < 0, "Negative",
        CurrentROI <= 0.6, "0% to 60%",
        CurrentROI <= 0.7, "60% to 70%",
        CurrentROI <= 0.8, "70% to 80%",
        CurrentROI <= 0.9, "80% to 90%",
        CurrentROI <= 1.0, "90% to 100%",
        "Over 100%"
    )

Weil die Bedingungen der Reihe nach geprüft werden, braucht jede nur eine Obergrenze. Die Variable speichert den ROI einmal, das Measure wird also nicht für jeden Zweig erneut ausgewertet. Mehr dazu in unserem Leitfaden zu DAX-Variablen.

Der erste Zweig liefert blank, wenn es keinen ROI gibt, damit leere Zeilen leer bleiben und nicht beschriftet werden.

Fehler, die SWITCH brechen

Vier Dinge verursachen die meisten falschen SWITCH-Ergebnisse:

  1. Fehlendes TRUE (). Bedingungen in den Wertplätzen funktionieren nur, wenn der Ausdruck TRUE () ist.

  2. Falsche Reihenfolge. Die erste wahre Bedingung gewinnt. Wenn Sie < 1000 vor < 500 schreiben, ist jeder Preis unter 1.000 Medium und nichts ist jemals Low. Setzen Sie die engste Bedingung an den Anfang.

  3. Gemischte Datentypen. Jedes Ergebnis und der else-Wert müssen denselben Datentyp haben. Wenn ein Zweig Text und ein anderer eine Zahl zurückgibt, entsteht ein Fehler.

  4. Lücken in den Bereichen. Ein Wert, der zu keinem Zweig passt, bekommt den else-Wert oder blank, wenn es keinen gibt. Testen Sie die Ränder, etwa genau 500 oder eine negative Zahl, bevor Sie veröffentlichen.

Berechnete Spalte oder Measure

Die Preiskategorie hängt nur von Werten in derselben Zeile ab, sie kann also eine berechnete Spalte sein. Das ROI-Band hängt davon ab, was der Leser ausgewählt hat, es muss also ein Measure sein. In unserem Beitrag zu Measures vs. berechnete Spalten erfahren Sie, wie Sie wählen. Warum dieselbe Formel sich in beiden unterschiedlich verhält, lesen Sie unter Zeilenkontext vs. Filterkontext.

IF und SWITCH stehen oft in einem CALCULATE oder in einem anderen Measure. Unser vollständiger DAX-Leitfaden und der Beitrag zur Funktion CALCULATE behandeln diese Bausteine.

FAQs

Was ist der Unterschied zwischen Switch und If in Power BI?

IF prüft eine Bedingung und liefert eines von zwei Ergebnissen. Für mehr Ergebnisse verschachteln Sie ein weiteres IF darin. SWITCH nimmt eine Liste aus Wert-Ergebnis-Paaren in einer Funktion, plus einen optionalen else-Wert. Mit SWITCH ( TRUE (), ... ) kann jedes Paar eine vollständige Bedingung sein. Das Ergebnis ist dasselbe wie beim verschachtelten IF, aber die Bedingungen stehen in einer flachen Liste, die leichter zu lesen und zu ändern ist.

Ist es besser, If oder Switch zu verwenden?

Nutzen Sie IF für eine oder zwei Bedingungen, etwa ein Ja/Nein-Kennzeichen. Nutzen Sie SWITCH wenn es drei oder mehr Ergebnisse gibt oder Sie später weitere erwarten. Wählen Sie SWITCH wegen der Lesbarkeit, nicht wegen der Geschwindigkeit. Die Bedingungen werden der Reihe nach ausgewertet, genau wie bei einem verschachtelten IF.

Quellen

Um in Power BI mehrere IF-Anweisungen zu schreiben, nutzen Sie SWITCH ( TRUE (), condition1, result1, condition2, result2, ..., else ) statt ein IF in ein anderes zu verschachteln. Ein verschachteltes IF in Power BI funktioniert, aber jede weitere Bedingung fügt eine weitere Klammerebene hinzu, und SWITCH hält alle Bedingungen in einer flachen Liste. Dieser Beitrag zeigt beides mit funktionierendem DAX und die Fehler, die dafür sorgen, dass ein SWITCH die falsche Antwort liefert.

Mehrere IF-Anweisungen in Power BI: der Weg mit verschachteltem IF

Die DAX-Funktion IF prüft eine Bedingung:

IF ( <logical_test>, <value_if_true> [, <value_if_false>

Um eine zweite Bedingung zu prüfen, setzen Sie ein weiteres IF in den Platz value_if_false. Das ist ein verschachteltes IF. Angenommen, Sie wollen Produkte nach Verkaufspreis gruppieren:

  • Unter 500 ist Low.

  • 500 bis 999 ist Medium.

  • 1.000 und mehr ist High.

Als berechnete Spalte in der Tabelle Product sieht die Version mit verschachteltem IF so aus:

Price Category =
IF (
    'Product'[Sales Price] < 500,
    "Low",
    IF (
        'Product'[Sales Price] < 1000,
        "Medium",
        "High"
    )
)

Bei drei Ergebnissen ist das noch lesbar. Bei sechs oder sieben häufen sich die Klammern am Ende, und es wird schwer zu erkennen, welches Ergebnis zu welchem Test gehört. Ein neues Band einzufügen heißt, die richtige Ebene dafür zu finden.

So funktioniert die Funktion SWITCH

SWITCH wertet einen Ausdruck aus und vergleicht das Ergebnis mit einer Liste von Werten. Sie liefert das Ergebnis, das zum ersten passenden Wert gehört.

SWITCH ( <expression>, <value>, <result> [, <value>, <result>] ... [, <else>

Argument

Was es tut

expression

Ein beliebiger DAX-Ausdruck, der einen einzelnen Wert liefert. Er wird einmal je Zeile oder Filterkontext ausgewertet.

value

Eine Konstante, die mit dem Ergebnis von expression verglichen wird.

result

Was zurückgegeben wird, wenn expression dem zugehörigen value entspricht.

else

Optional. Was zurückgegeben wird, wenn kein Wert passt. Ohne ihn liefert SWITCH blank zurück.

Es gibt zwei Möglichkeiten, sie zu nutzen. Sie können eine Spalte mit festen Werten abgleichen, oder Sie übergeben TRUE () als Ausdruck und schreiben in jeden Wertplatz eine Bedingung.

Exakte Werte mit SWITCH abgleichen

Ist jeder Fall ein exakter Wert, setzen Sie die Spalte selbst in den Ausdrucksplatz. Dieses Beispiel macht aus einem Regionscode den vollständigen Namen:

Region Name =
SWITCH (
    Sales[Region],
    "EMEA", "Europe, Middle East and Africa",
    "APJ", "Asia Pacific and Japan",
    "AMER", "Americas",
    "LATAM", "Latin America",
    "Unknown region"
)

Jeder Code, der nicht in der Liste steht, auch ein leerer, liefert "Unknown region". Ergänzen Sie immer einen else-Wert. Ohne ihn liefert ein vergessener Code blank, und die Zeile fällt in jeder Gruppierung nach Regionsname stillschweigend heraus.

Ein häufiger Einsatz dieses Musters ist, Monatskürzel in volle Monatsnamen umzuwandeln. Dafür brauchen Sie kein SWITCH mit zwölf Zweigen. Hat Ihre Tabelle eine echte Datumsspalte, liefert FORMAT ( 'Calendar'[Date], "mmmm" ) direkt den vollen Monatsnamen. Eine von Hand geschriebene Liste ist außerdem fehleranfällig: Man überspringt leicht versehentlich einen Monat.

Mehrere IF-Bedingungen in DAX mit SWITCH ( TRUE () )

Übergeben Sie für Bereiche und Vergleiche TRUE () als Ausdruck. Jeder Wertplatz enthält dann eine Bedingung. SWITCH liefert das Ergebnis der ersten Bedingung, die wahr ist.

Hier noch einmal die Preiskategorie:

Price Category =
SWITCH (
    TRUE (),
    'Product'[Sales Price] < 500, "Low",
    'Product'[Sales Price] < 1000, "Medium",
    "High"
)

Das liefert dieselben Ergebnisse wie das verschachtelte IF oben. Die erste Bedingung fängt alles unter 500 ab. Die zweite sieht nur noch Preise ab 500, daher bedeutet < 1000: 500 bis 999. Alles, was übrig bleibt, ist 1.000 oder mehr und bekommt den else-Wert "High".

Das Weglassen von TRUE () ist der häufigste SWITCH-Fehler. Ohne es behandelt DAX die erste Bedingung als Ausdruck und "Low" als Vergleichswert. Ein Wahr/Falsch-Ergebnis ist nie gleich dem Text "Low", also passt kein Zweig.

Power-BI-IF-Anweisung mit mehreren Bedingungen

Manchmal braucht ein Zweig zwei Tests gleichzeitig. DAX bietet drei Wege, Bedingungen zu kombinieren:

  • && bedeutet UND. Beide Seiten müssen wahr sein.

  • || bedeutet ODER. Mindestens eine Seite muss wahr sein.

  • AND ( a, b ) und OR ( a, b ) machen dasselbe, nehmen aber genau zwei Argumente. Bei drei oder mehr Bedingungen verketten Sie && oder ||.

Diese funktionieren in IF und in jedem Zweig von SWITCH:

Order Priority =
SWITCH (
    TRUE (),
    Sales[Amount] >= 10000 && Sales[Channel] = "Online", "Priority online",
    Sales[Amount] >= 10000, "Priority",
    Sales[Region] = "EMEA" || Sales[Region] = "APJ", "International",
    "Standard"
)

Um eine Spalte gegen eine Liste zu prüfen, ist IN kürzer als eine Kette von ||:

Is International =
IF ( Sales[Region] IN { "EMEA", "APJ" }, "Yes", "No" )

Bereiche mit einem Measure auswerten

SWITCH funktioniert auch in Measures. Dieses Measure ordnet den ROI der aktuellen Auswahl einem Band zu. Es setzt ein vorhandenes Measure [ROI] voraus, das ein Verhältnis liefert, wobei 0,6 für 60 % steht.

ROI Range =
VAR CurrentROI = [ROI]
RETURN
    SWITCH (
        TRUE (),
        ISBLANK ( CurrentROI ), BLANK (),
        CurrentROI < 0, "Negative",
        CurrentROI <= 0.6, "0% to 60%",
        CurrentROI <= 0.7, "60% to 70%",
        CurrentROI <= 0.8, "70% to 80%",
        CurrentROI <= 0.9, "80% to 90%",
        CurrentROI <= 1.0, "90% to 100%",
        "Over 100%"
    )

Weil die Bedingungen der Reihe nach geprüft werden, braucht jede nur eine Obergrenze. Die Variable speichert den ROI einmal, das Measure wird also nicht für jeden Zweig erneut ausgewertet. Mehr dazu in unserem Leitfaden zu DAX-Variablen.

Der erste Zweig liefert blank, wenn es keinen ROI gibt, damit leere Zeilen leer bleiben und nicht beschriftet werden.

Fehler, die SWITCH brechen

Vier Dinge verursachen die meisten falschen SWITCH-Ergebnisse:

  1. Fehlendes TRUE (). Bedingungen in den Wertplätzen funktionieren nur, wenn der Ausdruck TRUE () ist.

  2. Falsche Reihenfolge. Die erste wahre Bedingung gewinnt. Wenn Sie < 1000 vor < 500 schreiben, ist jeder Preis unter 1.000 Medium und nichts ist jemals Low. Setzen Sie die engste Bedingung an den Anfang.

  3. Gemischte Datentypen. Jedes Ergebnis und der else-Wert müssen denselben Datentyp haben. Wenn ein Zweig Text und ein anderer eine Zahl zurückgibt, entsteht ein Fehler.

  4. Lücken in den Bereichen. Ein Wert, der zu keinem Zweig passt, bekommt den else-Wert oder blank, wenn es keinen gibt. Testen Sie die Ränder, etwa genau 500 oder eine negative Zahl, bevor Sie veröffentlichen.

Berechnete Spalte oder Measure

Die Preiskategorie hängt nur von Werten in derselben Zeile ab, sie kann also eine berechnete Spalte sein. Das ROI-Band hängt davon ab, was der Leser ausgewählt hat, es muss also ein Measure sein. In unserem Beitrag zu Measures vs. berechnete Spalten erfahren Sie, wie Sie wählen. Warum dieselbe Formel sich in beiden unterschiedlich verhält, lesen Sie unter Zeilenkontext vs. Filterkontext.

IF und SWITCH stehen oft in einem CALCULATE oder in einem anderen Measure. Unser vollständiger DAX-Leitfaden und der Beitrag zur Funktion CALCULATE behandeln diese Bausteine.

FAQs

Was ist der Unterschied zwischen Switch und If in Power BI?

IF prüft eine Bedingung und liefert eines von zwei Ergebnissen. Für mehr Ergebnisse verschachteln Sie ein weiteres IF darin. SWITCH nimmt eine Liste aus Wert-Ergebnis-Paaren in einer Funktion, plus einen optionalen else-Wert. Mit SWITCH ( TRUE (), ... ) kann jedes Paar eine vollständige Bedingung sein. Das Ergebnis ist dasselbe wie beim verschachtelten IF, aber die Bedingungen stehen in einer flachen Liste, die leichter zu lesen und zu ändern ist.

Ist es besser, If oder Switch zu verwenden?

Nutzen Sie IF für eine oder zwei Bedingungen, etwa ein Ja/Nein-Kennzeichen. Nutzen Sie SWITCH wenn es drei oder mehr Ergebnisse gibt oder Sie später weitere erwarten. Wählen Sie SWITCH wegen der Lesbarkeit, nicht wegen der Geschwindigkeit. Die Bedingungen werden der Reihe nach ausgewertet, genau wie bei einem verschachtelten IF.

Quellen

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch