Power BI Cheat Sheet
Zuletzt aktualisiert
Measures, Spalten und Tabellen
Ein Measure wird für jede Zelle eines Visuals berechnet; eine berechnete Spalte wird einmal pro Zeile berechnet und gespeichert.
| Was es macht | DAX |
|---|---|
| Ein Measure erstellen | Total Sales = SUM ( Sales[Amount] ) |
| Eine berechnete Spalte erstellen (ein Wert pro Zeile) | Line Total = Sales[Quantity] * Sales[Unit Price] |
| Eine berechnete Tabelle erstellen | Top Customers = TOPN ( 10, Customer, [Total Sales] ) |
| Auf eine Spalte verweisen: Tabellenname, dann die Spalte in eckigen Klammern | Sales[Amount] |
| Einen Tabellennamen mit Leerzeichen oder einen reservierten Namen in Anführungszeichen setzen | 'Date'[Date] |
| Auf ein Measure verweisen: nur eckige Klammern | [Total Sales] |
| Ein Measure in einem anderen Measure verwenden | Average Price = DIVIDE ( [Total Sales], [Total Units] ) |
Aggregationsfunktionen
Jede fasst eine Spalte im aktuellen Filterkontext zusammen.
| Was es macht | DAX |
|---|---|
| Eine Spalte summieren | SUM ( Sales[Amount] ) |
| Durchschnitt einer Spalte | AVERAGE ( Sales[Amount] ) |
| Kleinster Wert | MIN ( Sales[Order Date] ) |
| Größter Wert | MAX ( Sales[Order Date] ) |
| Die Zeilen einer Tabelle zählen | COUNTROWS ( Sales ) |
| Die nicht leeren Werte einer Spalte zählen | COUNT ( Sales[Amount] ) |
| Eindeutige Werte zählen | DISTINCTCOUNT ( Sales[Customer Key] ) |
| Sicher dividieren: leer statt Fehler, wenn der Nenner 0 ist | DIVIDE ( [Total Sales], [Total Units] ) |
| Dividieren mit einem Ersatzwert, wenn der Nenner 0 ist | DIVIDE ( [Profit], [Total Sales], 0 ) |
Iteratoren (die X-Funktionen)
Sie gehen eine Tabelle Zeile für Zeile durch, werten für jede Zeile einen Ausdruck aus und aggregieren dann die Ergebnisse.
| Was es macht | DAX |
|---|---|
| Pro Zeile multiplizieren, dann summieren | SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Durchschnitt eines Ergebnisses pro Zeile | AVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Größtes Ergebnis pro Zeile | MAXX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Durchschnitt eines Measures pro Kunde | AVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] ) |
| Eine Spalte einer verknüpften Tabelle im Ausdruck nutzen | SUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) ) |
| Die Zeilen zählen, die eine Bedingung erfüllen | COUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) ) |
| Rang jedes Produkts nach einem Measure | RANKX ( ALL ( Product[Product] ), [Total Sales] ) |
| Rang ohne Lücken nach Gleichständen (1, 1, 2) | RANKX ( ALL ( Product[Product] ), [Total Sales], , DESC, DENSE ) |
| Werte zu einem Text verbinden | CONCATENATEX ( VALUES ( Product[Category] ), Product[Category], ", " ) |
CALCULATE und Filterfunktionen
CALCULATE wertet einen Ausdruck mit geänderten Filtern aus. Ein Filter auf dieselbe Spalte ersetzt den alten; Filter auf verschiedene Spalten werden mit AND kombiniert.
| Was es macht | DAX |
|---|---|
| Auf einen Wert filtern | CALCULATE ( [Total Sales], Product[Category] = "Bikes" ) |
| Auf eine Liste von Werten filtern | CALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } ) |
| Zwei Filter (AND) | CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" ) |
| OR über zwei Spalten | CALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) ) |
| Nach einem Measure filtern | CALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Den bestehenden Filter behalten und mit ihm schneiden | CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) ) |
| Die Filter einer Spalte entfernen | CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) |
| Alle Filter einer Tabelle entfernen | CALCULATE ( [Total Sales], ALL ( Product ) ) |
| Alle Filter einer Tabelle außer bestimmten Spalten entfernen | CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) ) |
| Die Auswahl im Datenschnitt behalten, die Zeilen des Visuals selbst ignorieren | CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) |
| Eine inaktive Beziehung verwenden | CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) ) |
| Einen Filter für ein Measure in beide Richtungen wirken lassen | CALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) ) |
| Mit einer Tabelle ohne Beziehung filtern | CALCULATE ( [Total Sales], TREATAS ( VALUES ( Budget[Category] ), Product[Category] ) ) |
Zeitintelligenz
Diese Funktionen brauchen eine Datumstabelle: eine Zeile pro Tag, ohne Lücken, als Datumstabelle markiert.
| Was es macht | DAX |
|---|---|
| Seit Jahresbeginn | TOTALYTD ( [Total Sales], 'Date'[Date] ) |
| Seit Jahresbeginn, Geschäftsjahr endet am 30. Juni | TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" ) |
| Seit Jahresbeginn innerhalb von CALCULATE | CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) |
| Seit Quartalsbeginn | TOTALQTD ( [Total Sales], 'Date'[Date] ) |
| Seit Monatsbeginn | TOTALMTD ( [Total Sales], 'Date'[Date] ) |
| Gleicher Zeitraum im Vorjahr | CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) |
| Die Datumswerte um ein Intervall verschieben (hier einen Monat zurück) | CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) ) |
| Der ganze Vormonat | CALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) ) |
| Der ganze Zeitraum ein Jahr zurück | CALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) ) |
| Die letzten 12 Monate bis zum letzten sichtbaren Datum | CALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) ) |
| Ein fester Datumsbereich | CALCULATE ( [Total Sales], DATESBETWEEN ( 'Date'[Date], DATE ( 2025, 1, 1 ), DATE ( 2025, 3, 31 ) ) ) |
Häufige Measure-Muster
Kopieren, dann Tabellen und Spalten passend zu deinem Modell umbenennen.
| Was es macht | DAX |
|---|---|
| Anteil an allen Kategorien | Category % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) ) |
| Anteil an dem, was die Datenschnitte übrig lassen | Visible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) ) |
| Wachstum gegenüber Vorjahr | YoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear ) |
| Laufende Summe über den ganzen Zeitraum | Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) |
| Gleitender 7-Tage-Durchschnitt (pro Tag mit Umsatz) | Sales 7 Day Avg = AVERAGEX ( DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ), [Total Sales] ) |
| Einen Wert nur für die Top 5 anzeigen | Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] ) |
| Kunden über einem Schwellenwert zählen | Big Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Ein Gesamtergebnis zur Summe seiner Zeilen machen | Bonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] ) |
| Einen Wert nur auf einer Ebene einer Matrix anzeigen | Category Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) ) |
| Endbestand: das letzte Datum mit einem Wert | Closing Units = CALCULATE ( SUM ( Inventory[Units] ), LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Inventory[Units] ) ) ) ) |
Logik- und Informationsfunktionen
Für Bedingungen und um abzufragen, was der Filterkontext enthält.
| Was es macht | DAX |
|---|---|
| Eine Bedingung | IF ( [Total Sales] > 1000, "High", "Low" ) |
| Mehrere Werte eines Ausdrucks | SWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" ) |
| Bereiche, von oben nach unten geprüft | SWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" ) |
| AND und OR | IF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" ) |
| Ist der Wert leer? | ISBLANK ( [Total Sales] ) |
| Erster nicht leerer Wert | COALESCE ( [Total Sales], 0 ) |
| Lässt der Filter genau einen Wert übrig? | HASONEVALUE ( Product[Category] ) |
| Dieser eine Wert oder ein Standardwert | SELECTEDVALUE ( Product[Category], "All categories" ) |
| Ist diese Zeile des Visuals nach der Spalte gruppiert? | ISINSCOPE ( Product[Category] ) |
| Einen leeren Wert zurückgeben | BLANK () |
Textfunktionen
Der Operator & verbindet Text; FORMAT macht aus einer Zahl oder einem Datum Text.
| Was es macht | DAX |
|---|---|
| Text verbinden | Customer[First Name] & " " & Customer[Last Name] |
| Eine Zahl formatieren | FORMAT ( [Total Sales], "#,0.00" ) |
| Ein Datum formatieren | FORMAT ( 'Date'[Date], "mmm yyyy" ) |
| Erste Zeichen | LEFT ( Product[Code], 3 ) |
| Zeichen ab einer Position | MID ( Product[Code], 4, 2 ) |
| Länge | LEN ( Product[Name] ) |
| Großbuchstaben | UPPER ( Store[City] ) |
| Überflüssige Leerzeichen entfernen | TRIM ( Customer[Name] ) |
| Text ersetzen | SUBSTITUTE ( Customer[Phone], " ", "" ) |
| Position eines Texts, ohne Groß- und Kleinschreibung (0, wenn er fehlt) | SEARCH ( "pro", Product[Name], 1, 0 ) |
Datumsfunktionen
Datumswerte sind intern Zahlen, du kannst sie also subtrahieren, um Tage zu erhalten.
| Was es macht | DAX |
|---|---|
| Das heutige Datum | TODAY () |
| Ein Datum bilden | DATE ( 2025, 12, 31 ) |
| Jahr eines Datums | YEAR ( 'Date'[Date] ) |
| Monatsnummer | MONTH ( 'Date'[Date] ) |
| Wochentag, Montag als 1 | WEEKDAY ( 'Date'[Date], 2 ) |
| Kalenderwoche, Wochen beginnen am Montag | WEEKNUM ( 'Date'[Date], 2 ) |
| Letzter Tag des Monats | EOMONTH ( 'Date'[Date], 0 ) |
| Derselbe Tag einen Monat früher | EDATE ( 'Date'[Date], -1 ) |
| Tage zwischen zwei Datumswerten | DATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY ) |
| Eine Datumstabelle aus festen Datumswerten | CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ) |
| Eine Datumstabelle aus den Datumswerten im Modell | CALENDARAUTO () |
Beziehungen und Nachschlagen
RELATED folgt einer Beziehung von der n-Seite zur 1-Seite.
| Was es macht | DAX |
|---|---|
| Wert von der 1-Seite (in einer Spalte von Sales) | RELATED ( Product[Category] ) |
| Die Zeilen der n-Seite zur aktuellen Zeile (in einer Spalte von Customer) | COUNTROWS ( RELATEDTABLE ( Sales ) ) |
| Einen Wert ohne Beziehung nachschlagen | LOOKUPVALUE ( Product[Price], Product[SKU], Sales[SKU] ) |
| Eltern-Kind-Pfad (für Hierarchien und Sicherheit auf Zeilenebene) | PATH ( Employee[Employee ID], Employee[Manager ID] ) |
| Der angemeldete Benutzer, für dynamische Sicherheit auf Zeilenebene | USERPRINCIPALNAME () |
Tabellenfunktionen
Sie geben Tabellen zurück: Nutze sie in einer berechneten Tabelle, in CALCULATE oder in einem Iterator.
| Was es macht | DAX |
|---|---|
| Eindeutige Werte im aktuellen Filter | VALUES ( Product[Category] ) |
| Zeilen, die eine Bedingung erfüllen | FILTER ( Product, Product[Price] > 100 ) |
| Die obersten N Zeilen nach einem Measure | TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) |
| Nach Spalten gruppieren und Measures hinzufügen | SUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] ) |
| Einer Tabelle eine Spalte hinzufügen | ADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] ) |
| Spalten auswählen und umbenennen | SELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] ) |
| Eine Zahlenreihe | GENERATESERIES ( 1, 10, 1 ) |
| Jede Kombination zweier Tabellen | CROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) ) |
| Zwei Tabellen mit denselben Spalten untereinander anfügen | UNION ( 'Sales 2024', 'Sales 2025' ) |
Variablen
VAR benennt einen Schritt und berechnet ihn einmal; RETURN liefert das Ergebnis.
| Was es macht | DAX |
|---|---|
| Eine Variable | Margin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue ) |
| Mehrere Variablen | Sales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY |
| Eine Tabelle in einer Variable | Top 5 Total = VAR Top5 = TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) RETURN CALCULATE ( [Total Sales], Top5 ) |
Power Query-Schritte (M)
Power Query bereitet die Daten vor dem Laden auf. Das sind die M-Formeln hinter den häufigsten Schaltflächen.
| Was es macht | M |
|---|---|
| Passende Zeilen behalten | Table.SelectRows(Source, each [Status] = "Paid") |
| Spalten entfernen | Table.RemoveColumns(Source, {"Notes", "Temp"}) |
| Spaltentypen festlegen | Table.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}}) |
| Eine Spalte umbenennen | Table.RenameColumns(Source, {{"amt", "Amount"}}) |
| Eine Spalte hinzufügen | Table.AddColumn(Source, "Total", each [Quantity] * [Price], type number) |
| Zwei Abfragen zusammenführen (Join) | Table.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter) |
| Abfragen anfügen (untereinander) | Table.Combine({Sales2024, Sales2025}) |
| Spalten in Zeilen entpivotieren | Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount") |
| Gruppieren und aggregieren | Table.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}}) |
| Fehler durch einen Wert ersetzen | Table.ReplaceErrorValues(Source, {{"Amount", 0}}) |
Dieses Power BI Cheat Sheet zeigt auf einer Seite das DAX, das du am häufigsten schreibst: Aggregationen, die X-Iteratoren, CALCULATE und die Funktionen, die Filter ändern, Zeitintelligenz, Text- und Datumsfunktionen und Measure-Muster zum Kopieren, etwa den Anteil am Gesamtwert, das Wachstum gegenüber dem Vorjahr und laufende Summen.
Die Beispiele nutzen ein Verkaufsmodell mit den Tabellen Sales, Product, Customer und 'Date'; benenne sie passend zu deinem Modell um. Das DAX wurde mit der Engine hinter Coddys Power BI-Kurs geparst, in dem du es in einem Power BI-Arbeitsbereich im Browser schreiben und prüfen lassen kannst.
Häufige Fragen zum Power BI Cheat Sheet
Ist dieses Power BI Cheat Sheet kostenlos?
Ja. Lies es hier oder setz ein Lesezeichen; eine Anmeldung brauchst du nicht.
Was ist der Unterschied zwischen einem Measure und einer berechneten Spalte?
Eine berechnete Spalte wird beim Aktualisieren einmal pro Zeile berechnet und gespeichert, deshalb kannst du nach ihr filtern und gruppieren. Ein Measure wird für jede Zelle eines Visuals berechnet, mit den Filtern dieser Zelle, und speichert nichts. Summen und Verhältnisse gehören in Measures.
Was macht CALCULATE?
Es wertet einen Ausdruck mit geänderten Filtern aus: Es fügt Filter hinzu, ersetzt oder entfernt sie und berechnet dann das Ergebnis. Fast alles DAX, das über einfache Summen hinausgeht, ist CALCULATE mit den richtigen Filterargumenten.
Warum DIVIDE statt des Operators /?
DIVIDE gibt einen leeren Wert (oder einen Wert deiner Wahl) zurück, wenn der Nenner null oder leer ist. Der Operator / liefert stattdessen Unendlich oder einen Fehlerwert, der in Visuals sichtbar wird.Brauche ich für Zeitintelligenz eine Datumstabelle?
TOTALYTD und SAMEPERIODLASTYEAR brauchen eine Tabelle mit einer Zeile pro Tag, ohne Lücken und mit ganzen Jahren, die mit deinen Faktentabellen verbunden und als Datumstabelle markiert ist.Funktioniert dieses DAX auch in Power Pivot für Excel und in Analysis Services?
Die Sprache DAX ist dieselbe, also funktioniert fast alles auch dort. Einige neuere Funktionen kommen zuerst in Power BI.
Wo kann ich DAX üben?
Im Power BI-Kurs von Coddy: Jede Lektion gibt dir einen Power BI-Arbeitsbereich im Browser und prüft dein Measure mit den Daten der Lektion und mit versteckten Kopien davon.