Menu
CoddyTech

Power BI Cheat Sheet

Zuletzt aktualisiert

Power BI kostenlos lernen

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 machtDAX
Ein Measure erstellenTotal Sales = SUM ( Sales[Amount] )
Eine berechnete Spalte erstellen (ein Wert pro Zeile)Line Total = Sales[Quantity] * Sales[Unit Price]
Eine berechnete Tabelle erstellenTop Customers = TOPN ( 10, Customer, [Total Sales] )
Auf eine Spalte verweisen: Tabellenname, dann die Spalte in eckigen KlammernSales[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 verwendenAverage Price = DIVIDE ( [Total Sales], [Total Units] )

Aggregationsfunktionen

Jede fasst eine Spalte im aktuellen Filterkontext zusammen.

Was es machtDAX
Eine Spalte summierenSUM ( Sales[Amount] )
Durchschnitt einer SpalteAVERAGE ( Sales[Amount] )
Kleinster WertMIN ( Sales[Order Date] )
Größter WertMAX ( Sales[Order Date] )
Die Zeilen einer Tabelle zählenCOUNTROWS ( Sales )
Die nicht leeren Werte einer Spalte zählenCOUNT ( Sales[Amount] )
Eindeutige Werte zählenDISTINCTCOUNT ( Sales[Customer Key] )
Sicher dividieren: leer statt Fehler, wenn der Nenner 0 istDIVIDE ( [Total Sales], [Total Units] )
Dividieren mit einem Ersatzwert, wenn der Nenner 0 istDIVIDE ( [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 machtDAX
Pro Zeile multiplizieren, dann summierenSUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Durchschnitt eines Ergebnisses pro ZeileAVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Größtes Ergebnis pro ZeileMAXX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Durchschnitt eines Measures pro KundeAVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] )
Eine Spalte einer verknüpften Tabelle im Ausdruck nutzenSUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) )
Die Zeilen zählen, die eine Bedingung erfüllenCOUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) )
Rang jedes Produkts nach einem MeasureRANKX ( 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 verbindenCONCATENATEX ( 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 machtDAX
Auf einen Wert filternCALCULATE ( [Total Sales], Product[Category] = "Bikes" )
Auf eine Liste von Werten filternCALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } )
Zwei Filter (AND)CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" )
OR über zwei SpaltenCALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) )
Nach einem Measure filternCALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) )
Den bestehenden Filter behalten und mit ihm schneidenCALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) )
Die Filter einer Spalte entfernenCALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) )
Alle Filter einer Tabelle entfernenCALCULATE ( [Total Sales], ALL ( Product ) )
Alle Filter einer Tabelle außer bestimmten Spalten entfernenCALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) )
Die Auswahl im Datenschnitt behalten, die Zeilen des Visuals selbst ignorierenCALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) )
Eine inaktive Beziehung verwendenCALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) )
Einen Filter für ein Measure in beide Richtungen wirken lassenCALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) )
Mit einer Tabelle ohne Beziehung filternCALCULATE ( [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 machtDAX
Seit JahresbeginnTOTALYTD ( [Total Sales], 'Date'[Date] )
Seit Jahresbeginn, Geschäftsjahr endet am 30. JuniTOTALYTD ( [Total Sales], 'Date'[Date], "6/30" )
Seit Jahresbeginn innerhalb von CALCULATECALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) )
Seit QuartalsbeginnTOTALQTD ( [Total Sales], 'Date'[Date] )
Seit MonatsbeginnTOTALMTD ( [Total Sales], 'Date'[Date] )
Gleicher Zeitraum im VorjahrCALCULATE ( [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 VormonatCALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) )
Der ganze Zeitraum ein Jahr zurückCALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) )
Die letzten 12 Monate bis zum letzten sichtbaren DatumCALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) )
Ein fester DatumsbereichCALCULATE ( [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 machtDAX
Anteil an allen KategorienCategory % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) )
Anteil an dem, was die Datenschnitte übrig lassenVisible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) )
Wachstum gegenüber VorjahrYoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear )
Laufende Summe über den ganzen ZeitraumRunning 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 anzeigenTop 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] )
Kunden über einem Schwellenwert zählenBig Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) )
Ein Gesamtergebnis zur Summe seiner Zeilen machenBonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] )
Einen Wert nur auf einer Ebene einer Matrix anzeigenCategory Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) )
Endbestand: das letzte Datum mit einem WertClosing 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 machtDAX
Eine BedingungIF ( [Total Sales] > 1000, "High", "Low" )
Mehrere Werte eines AusdrucksSWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" )
Bereiche, von oben nach unten geprüftSWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" )
AND und ORIF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" )
Ist der Wert leer?ISBLANK ( [Total Sales] )
Erster nicht leerer WertCOALESCE ( [Total Sales], 0 )
Lässt der Filter genau einen Wert übrig?HASONEVALUE ( Product[Category] )
Dieser eine Wert oder ein StandardwertSELECTEDVALUE ( Product[Category], "All categories" )
Ist diese Zeile des Visuals nach der Spalte gruppiert?ISINSCOPE ( Product[Category] )
Einen leeren Wert zurückgebenBLANK ()

Textfunktionen

Der Operator & verbindet Text; FORMAT macht aus einer Zahl oder einem Datum Text.

Was es machtDAX
Text verbindenCustomer[First Name] & " " & Customer[Last Name]
Eine Zahl formatierenFORMAT ( [Total Sales], "#,0.00" )
Ein Datum formatierenFORMAT ( 'Date'[Date], "mmm yyyy" )
Erste ZeichenLEFT ( Product[Code], 3 )
Zeichen ab einer PositionMID ( Product[Code], 4, 2 )
LängeLEN ( Product[Name] )
GroßbuchstabenUPPER ( Store[City] )
Überflüssige Leerzeichen entfernenTRIM ( Customer[Name] )
Text ersetzenSUBSTITUTE ( 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 machtDAX
Das heutige DatumTODAY ()
Ein Datum bildenDATE ( 2025, 12, 31 )
Jahr eines DatumsYEAR ( 'Date'[Date] )
MonatsnummerMONTH ( 'Date'[Date] )
Wochentag, Montag als 1WEEKDAY ( 'Date'[Date], 2 )
Kalenderwoche, Wochen beginnen am MontagWEEKNUM ( 'Date'[Date], 2 )
Letzter Tag des MonatsEOMONTH ( 'Date'[Date], 0 )
Derselbe Tag einen Monat früherEDATE ( 'Date'[Date], -1 )
Tage zwischen zwei DatumswertenDATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY )
Eine Datumstabelle aus festen DatumswertenCALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) )
Eine Datumstabelle aus den Datumswerten im ModellCALENDARAUTO ()

Beziehungen und Nachschlagen

RELATED folgt einer Beziehung von der n-Seite zur 1-Seite.

Was es machtDAX
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 nachschlagenLOOKUPVALUE ( 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 ZeilenebeneUSERPRINCIPALNAME ()

Tabellenfunktionen

Sie geben Tabellen zurück: Nutze sie in einer berechneten Tabelle, in CALCULATE oder in einem Iterator.

Was es machtDAX
Eindeutige Werte im aktuellen FilterVALUES ( Product[Category] )
Zeilen, die eine Bedingung erfüllenFILTER ( Product, Product[Price] > 100 )
Die obersten N Zeilen nach einem MeasureTOPN ( 5, ALL ( Product[Product] ), [Total Sales] )
Nach Spalten gruppieren und Measures hinzufügenSUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] )
Einer Tabelle eine Spalte hinzufügenADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] )
Spalten auswählen und umbenennenSELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] )
Eine ZahlenreiheGENERATESERIES ( 1, 10, 1 )
Jede Kombination zweier TabellenCROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) )
Zwei Tabellen mit denselben Spalten untereinander anfügenUNION ( 'Sales 2024', 'Sales 2025' )

Variablen

VAR benennt einen Schritt und berechnet ihn einmal; RETURN liefert das Ergebnis.

Was es machtDAX
Eine VariableMargin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue )
Mehrere VariablenSales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY
Eine Tabelle in einer VariableTop 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 machtM
Passende Zeilen behaltenTable.SelectRows(Source, each [Status] = "Paid")
Spalten entfernenTable.RemoveColumns(Source, {"Notes", "Temp"})
Spaltentypen festlegenTable.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}})
Eine Spalte umbenennenTable.RenameColumns(Source, {{"amt", "Amount"}})
Eine Spalte hinzufügenTable.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 entpivotierenTable.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount")
Gruppieren und aggregierenTable.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}})
Fehler durch einen Wert ersetzenTable.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?
Ja. Funktionen wie 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.

Illustration der Programmiersprachen bei Coddy

Lerne Power BI mit Coddy

Los geht's