Zum Inhalt springen

Power BI: Umsatz-Buckets mit DAX SWITCH erstellen

Eine berechnete Spalte ordnet jeden Positionsumsatz einer festen Klasse zu. SWITCH(TRUE()) hält die Grenzwerte lesbar; eine zweite Zahlenspalte sorgt dafür, dass Power BI die Klassen nicht alphabetisch sortiert.

DAX · eindeutige Grenzen · 5 Minuten
Oliver Nagel · Dokumentation geprüft am

In Power BI Desktop die Tabelle Auftragspositionen auswählen und über Modellierung → Neue Spalte diese berechnete Spalte anlegen. Tabellen- und Spaltennamen werden an das eigene Modell angepasst.

Umsatzklasse =
VAR Umsatz = 'Auftragspositionen'[PosUmsatz]
RETURN
SWITCH (
TRUE (),
ISBLANK ( Umsatz ), "Ohne Wert",
Umsatz <= 0, "≤ 0",
Umsatz <= 50, "0–50",
Umsatz <= 100, "50–100",
Umsatz <= 200, "100–200",
Umsatz <= 500, "200–500",
Umsatz <= 1000, "500–1.000",
"> 1.000"
)

Die Variable verhindert, dass versehentlich zwei verschiedene Umsatzfelder gemischt werden. SWITCH(TRUE()) gibt das Ergebnis der ersten zutreffenden Bedingung zurück. Deshalb stehen die engeren, kleineren Grenzen zuerst.

Mit der Formel oben gelten diese Zuordnungen:

  • BLANK() → „Ohne Wert“
  • -1 und 0 → „≤ 0“
  • 0,01 bis 50 → „0–50“
  • 50,01 bis 100 → „50–100“
  • 100,01 bis 200 → „100–200“
  • 200,01 bis 500 → „200–500“
  • 500,01 bis 1.000 → „500–1.000“
  • alles darüber → „> 1.000“

Eine Tabellenvisualisierung mit PosUmsatz und Umsatzklasse macht Fehler an den Grenzwerten sofort sichtbar. Besonders 0, 50, 100 und 1.000 einzeln prüfen.

Ohne Hilfsspalte sortiert Power BI die Bezeichnungen alphabetisch. Deshalb eine zweite berechnete Spalte mit derselben Logik anlegen:

UmsatzklasseSort =
VAR Umsatz = 'Auftragspositionen'[PosUmsatz]
RETURN
SWITCH (
TRUE (),
ISBLANK ( Umsatz ), 0,
Umsatz <= 0, 1,
Umsatz <= 50, 2,
Umsatz <= 100, 3,
Umsatz <= 200, 4,
Umsatz <= 500, 5,
Umsatz <= 1000, 6,
7
)

Danach Umsatzklasse markieren und Spaltentools → Nach Spalte sortieren → UmsatzklasseSort wählen. Beide Spalten liegen auf derselben Granularität; jeder Klassenname hat genau einen Sortierwert.

Für Achsen, Slicer und Filter auf Ebene einer Auftragsposition ist die berechnete Spalte richtig: Die Klasse wird beim Datenrefresh je Zeile gespeichert. Ein Measure ist sinnvoll, wenn zuerst im aktuellen Filterkontext aggregiert und erst danach klassifiziert werden soll.

Ein Measure kann jedoch nicht wie eine normale Modellspalte als stabile Kategorieachse dienen. Vor dem Schreiben der Formel deshalb entscheiden, ob die Klasse eine einzelne Position oder einen dynamischen Gesamtumsatz beschreibt.

Prüfen, ob die Quellspalte numerisch ist und ob der DAX-Ausdruck überall exakt dieselbe Spaltenreferenz verwendet. Gemischte Referenzen auf ein Measure und eine Spalte liefern kontextabhängige Ergebnisse.

Die Kategorie ist noch alphabetisch sortiert. Umsatzklasse markieren und die Eigenschaft Nach Spalte sortieren auf UmsatzklasseSort setzen.

Jeder eindeutige Textwert muss genau einem Sortierwert entsprechen. Kategorie- und Sortierspalte müssen dieselbe Granularität haben und mit denselben Grenzbedingungen berechnet werden.

Die Bedingungen stehen wahrscheinlich in der falschen Reihenfolge. Bei SWITCH(TRUE()) beendet der erste Treffer die Auswertung; eine allgemeine Bedingung wie Umsatz < 1.000 darf nicht vor engeren Grenzen stehen.

Die beiden berechneten Spalten Umsatzklasse und UmsatzklasseSort aus dem Modell entfernen und betroffene Visuals auf das ursprüngliche Feld zurückstellen. Die Quelldaten werden durch berechnete Spalten nicht verändert.