DAX und Datenmodelle
Zeilenkontext vs. Filterkontext in Power BI, mit DAX-Beispielen
Der Zeilenkontext wertet eine Formel Zeile für Zeile aus, der Filterkontext gegen gefilterte Zeilen. Wie CALCULATE beide verbindet, mit DAX-Beispielen.
Sajagan Thirugnanam
·
Aktualisiert
Zeilenkontext heißt: Power BI wertet eine Formel Zeile für Zeile aus, wie in einer berechneten Spalte. Filterkontext heißt: Power BI wertet eine Formel gegen die Teilmenge der Zeilen aus, die gerade gefiltert ist, wie in einem Measure. CALCULATE wandelt Zeilenkontext in Filterkontext um. Deshalb behebt es ein Measure, das sonst für jede Zeile dieselbe Summe liefert, wenn Sie SUM in CALCULATE einpacken. Dieser Leitfaden behandelt beide Kontexte, warum man sie verwechselt und wie Sie eine Formel debuggen, die nicht liefert, was Sie erwarten.
Was Kontext in Power BI bedeutet
Kontext ist die Menge der Regeln, die bestimmt, welche Datenzeilen eine DAX-Formel beim Ausführen sieht. Power BI wertet dieselbe Formel je nach Verwendung unterschiedlich aus: in einer berechneten Spalte, in einem Measure oder in einem Visual. Die zwei wichtigsten Kontextarten sind Zeilenkontext und Filterkontext.
Zeilenkontext
Zeilenkontext heißt: Power BI wertet einen Ausdruck für jeweils eine Zeile aus und kennt direkt die Werte in den Spalten dieser Zeile. Er tritt auf in:
Berechneten Spalten
Iterator-Funktionen wie
SUMX,AVERAGEXundFILTER
Gegeben sei eine Tabelle Sales:
Product | Quantity | Unit Price |
|---|---|---|
A | 2 | 50 |
B | 3 | 30 |
Diese berechnete Spalte:
Total Sales = Sales[Quantity] * Sales[Unit Price]läuft einmal pro Zeile: Zeile 1 liefert 2 × 50 = 100, Zeile 2 liefert 3 × 30 = 90. Diese zeilenweise Auswertung ist der Zeilenkontext.
Iterator-Funktionen erzeugen denselben Zeilenkontext innerhalb eines Measures:
Total Sales = SUMX(Sales, Sales[Quantity] * Sales[Unit Price])SUMX geht die Tabelle Sales Zeile für Zeile durch, wertet für jede Sales[Quantity] * Sales[Unit Price] aus und addiert die Ergebnisse.
Filterkontext
Filterkontext heißt: Power BI wertet eine Formel gegen die Teilmenge der Zeilen aus, die gerade gefiltert ist. Filter können aus Slicern, Seitenfiltern, Report-Filtern, Visual-Filtern, Beziehungen zwischen Tabellen oder einer Zeilen- und Spaltenauswahl in einer Matrix stammen. Der Filterkontext bestimmt Measures und Berechnungen auf Visual-Ebene.
Total Revenue = SUM(Sales[Revenue])Setzen Sie dieses Measure in ein Visual, das nach Product aufgeschlüsselt ist, wendet Power BI für jedes Produkt einen eigenen Filterkontext an: eine Auswertung gefiltert auf Product A, eine andere auf Product B. Dasselbe Measure liefert für jedes eine andere Zahl, weil sich der Filterkontext um es herum geändert hat, nicht die Formel.
Zeilenkontext und Filterkontext im Überblick
Zeilenkontext | Filterkontext | |
|---|---|---|
Wirkt auf | Die aktuelle Zeile | Eine Teilmenge der Daten anhand von Filtern |
Verwendet in | Berechneten Spalten, Iteratoren | Measures, Visuals |
Verhalten | Wertet Zeile für Zeile aus | Wertet die gefilterten Daten aus |
Beispiel |
|
|
Warum der Zeilenkontext die Tabelle nicht filtert
Der Zeilenkontext kennt die aktuelle Zeile, wird aber nicht automatisch zu einem Filter auf den Rest des Modells. Diese Lücke lässt eine berechnete Spalte wie diese scheitern:
Total Revenue Column = SUM(Sales[Revenue])Man vermutet, dass das den Umsatz pro Produkt summiert. Stattdessen liefert jede Zeile dieselbe Gesamtsumme. SUM berücksichtigt den Zeilenkontext nicht von selbst. Ohne Filter summiert es die ganze Tabelle, einmal pro Zeile, egal welche Zeile gerade aktuell ist.
Kontexttransition: So behebt CALCULATE das
CALCULATE wandelt Zeilenkontext in Filterkontext um. Das heißt Kontexttransition. Deshalb steckt CALCULATE in fast jeder nicht trivialen DAX-Formel.
Total Revenue Column = CALCULATE(SUM(Sales[Revenue]))Packen Sie SUM in CALCULATE, wird der aktuelle Zeilenkontext zu einem Filterkontext, der auf diese Zeile begrenzt ist, und SUM wird darin ausgewertet. Das Ergebnis: Jede Zeile liefert nun den Umsatz für die eigenen Werte, nicht die Gesamtsumme.
Dasselbe Muster gilt für eine berechnete Spalte in einer Tabelle Customers, die den Gesamtumsatz jedes Kunden braucht:
Customer Total Sales = CALCULATE(SUM(Sales[Revenue]))Ohne CALCULATE liefert das in jeder Kundenzeile dieselbe Gesamtsumme. Damit begrenzt die Kontexttransition SUM auf den jeweiligen Kunden.
Eine einfache Faustregel: Eine berechnete Spalte arbeitet standardmäßig im Zeilenkontext, ein Measure im Filterkontext, und CALCULATE ist die Brücke zwischen beiden. Eine Ausnahme sollten Sie sich merken: Eine Iterator-Funktion wie SUMX erzeugt Zeilenkontext, auch innerhalb eines Measures.
Total Revenue = SUMX(Sales, Sales[Quantity] * Sales[Unit Price])Hier erzeugt SUMX intern Zeilenkontext, wertet den Ausdruck pro Zeile aus und addiert die Ergebnisse, alles in einem Measure, das sonst im Filterkontext läuft.
Was den Filterkontext in einem echten Report aufbaut
Das Ergebnis eines Measures hängt von der Kombination aus dem Visual, in dem es steht, den Slicern und Filtern auf der Seite, den Beziehungen zwischen Tabellen und jedem CALCULATE oder FILTER in der Formel selbst ab. Liefert ein Measure etwas Unerwartetes, finden meist drei Fragen die Ursache:
Wonach filtert das Visual?
Welche Beziehungen wenden einen Filter an, den Sie nicht ausdrücklich geschrieben haben?
Erzeugt die Formel Zeilenkontext mit einem Iterator wie
SUMX?
Der Filterkontext hängt von den Beziehungen des Modells ab. Eine fehlende oder falsche Beziehung und eine Faktenzeile, deren Schlüssel in der zugehörigen Dimensionstabelle nicht existiert, führen beide zu unerwarteten Summen, weil die betroffenen Zeilen nicht so gefiltert werden, wie Sie erwarten. DIVIDE fängt die leeren Ergebnisse ab, die das Filtern erzeugen kann:
Profit Margin = DIVIDE([Profit], [Revenue], 0)Das dritte Argument ist der Wert, der statt eines Fehlers zurückgegeben wird, wenn der Nenner leer oder null ist.
Zwei verwandte Begriffe: Abfragekontext und verschachtelter Zeilenkontext
Zwei weitere Begriffe tauchen in fortgeschrittenem DAX auf. Beide erweitern die beiden Grundkonzepte oben und sind keine eigenen Ideen:
Abfragekontext ist der Filterkontext, den ein Visual für jede Zelle aufbaut, die es darstellt. In einer Matrix nach Product und Year wertet Power BI das Measure für jede Zelle einzeln aus. Der Abfragekontext erzeugt den Filterkontext hinter jeder Auswertung.
Verschachtelter Zeilenkontext entsteht, wenn ein Iterator in einem anderen steckt, etwa
SUMXinSUMX. Dann gibt es mehr als eine „aktuelle Zeile“ gleichzeitig. Modernes DAX löst das meist mitVARstatt mit der älteren FunktionEARLIER(). Unser Leitfaden zu DAX-Variablen behandeltVARausführlich.
Häufige Fehler
Ein Measure wie eine berechnete Spalte behandeln. Measures speichern keinen Wert pro Zeile. Sie rechnen dynamisch gegen den Filterkontext, der sie umgibt.
Erwarten, dass
SUMden Zeilenkontext automatisch berücksichtigt. Das tut es nicht. Packen Sie es inCALCULATE, wenn Sie das brauchen.Ohne Kenntnis des geänderten Filters
CALCULATEeinsetzen. Fragen Sie sich vorher, welchen Filterkontext Sie erzeugen oder überschreiben.
Zu den Filtermodifikatoren, die den Filterkontext gezielt ändern, etwa ALL und ALLSELECTED, lesen Sie unseren Leitfaden ALLSELECTED vs. ALL. DAX von Grund auf finden Sie in unserem vollständigen DAX-Leitfaden.
FAQs
Was ist Zeilenkontext in Power BI?
Zeilenkontext heißt, dass Power BI einen Ausdruck für jeweils eine Zeile auswertet. Er ist der Standardkontext in berechneten Spalten, und Iterator-Funktionen wie SUMX erzeugen ihn auch in Measures.
Was ist Filterkontext in Power BI?
Der Filterkontext ist die Menge der Filter, die auf die Daten wirken, wenn eine DAX-Formel ausgewertet wird. Er stammt aus Slicern, Visuals, Report- und Seitenfiltern und Tabellenbeziehungen.
Was ist der Hauptunterschied zwischen Zeilenkontext und Filterkontext?
Der Zeilenkontext wertet Daten Zeile für Zeile aus. Der Filterkontext wertet eine Formel gegen eine gefilterte Teilmenge der Daten aus. CALCULATE wandelt den ersten in den zweiten um.
Nutzen Measures Zeilenkontext?
Measures arbeiten standardmäßig im Filterkontext. Eine Iterator-Funktion in einem Measure, etwa SUMX, FILTER oder AVERAGEX, erzeugt jedoch intern Zeilenkontext, während das Measure insgesamt weiter im Filterkontext läuft.
Quellen
Context in DAX formulas - Microsoft Learn
CALCULATE function (DAX) - Microsoft Learn
Zeilenkontext heißt: Power BI wertet eine Formel Zeile für Zeile aus, wie in einer berechneten Spalte. Filterkontext heißt: Power BI wertet eine Formel gegen die Teilmenge der Zeilen aus, die gerade gefiltert ist, wie in einem Measure. CALCULATE wandelt Zeilenkontext in Filterkontext um. Deshalb behebt es ein Measure, das sonst für jede Zeile dieselbe Summe liefert, wenn Sie SUM in CALCULATE einpacken. Dieser Leitfaden behandelt beide Kontexte, warum man sie verwechselt und wie Sie eine Formel debuggen, die nicht liefert, was Sie erwarten.
Was Kontext in Power BI bedeutet
Kontext ist die Menge der Regeln, die bestimmt, welche Datenzeilen eine DAX-Formel beim Ausführen sieht. Power BI wertet dieselbe Formel je nach Verwendung unterschiedlich aus: in einer berechneten Spalte, in einem Measure oder in einem Visual. Die zwei wichtigsten Kontextarten sind Zeilenkontext und Filterkontext.
Zeilenkontext
Zeilenkontext heißt: Power BI wertet einen Ausdruck für jeweils eine Zeile aus und kennt direkt die Werte in den Spalten dieser Zeile. Er tritt auf in:
Berechneten Spalten
Iterator-Funktionen wie
SUMX,AVERAGEXundFILTER
Gegeben sei eine Tabelle Sales:
Product | Quantity | Unit Price |
|---|---|---|
A | 2 | 50 |
B | 3 | 30 |
Diese berechnete Spalte:
Total Sales = Sales[Quantity] * Sales[Unit Price]läuft einmal pro Zeile: Zeile 1 liefert 2 × 50 = 100, Zeile 2 liefert 3 × 30 = 90. Diese zeilenweise Auswertung ist der Zeilenkontext.
Iterator-Funktionen erzeugen denselben Zeilenkontext innerhalb eines Measures:
Total Sales = SUMX(Sales, Sales[Quantity] * Sales[Unit Price])SUMX geht die Tabelle Sales Zeile für Zeile durch, wertet für jede Sales[Quantity] * Sales[Unit Price] aus und addiert die Ergebnisse.
Filterkontext
Filterkontext heißt: Power BI wertet eine Formel gegen die Teilmenge der Zeilen aus, die gerade gefiltert ist. Filter können aus Slicern, Seitenfiltern, Report-Filtern, Visual-Filtern, Beziehungen zwischen Tabellen oder einer Zeilen- und Spaltenauswahl in einer Matrix stammen. Der Filterkontext bestimmt Measures und Berechnungen auf Visual-Ebene.
Total Revenue = SUM(Sales[Revenue])Setzen Sie dieses Measure in ein Visual, das nach Product aufgeschlüsselt ist, wendet Power BI für jedes Produkt einen eigenen Filterkontext an: eine Auswertung gefiltert auf Product A, eine andere auf Product B. Dasselbe Measure liefert für jedes eine andere Zahl, weil sich der Filterkontext um es herum geändert hat, nicht die Formel.
Zeilenkontext und Filterkontext im Überblick
Zeilenkontext | Filterkontext | |
|---|---|---|
Wirkt auf | Die aktuelle Zeile | Eine Teilmenge der Daten anhand von Filtern |
Verwendet in | Berechneten Spalten, Iteratoren | Measures, Visuals |
Verhalten | Wertet Zeile für Zeile aus | Wertet die gefilterten Daten aus |
Beispiel |
|
|
Warum der Zeilenkontext die Tabelle nicht filtert
Der Zeilenkontext kennt die aktuelle Zeile, wird aber nicht automatisch zu einem Filter auf den Rest des Modells. Diese Lücke lässt eine berechnete Spalte wie diese scheitern:
Total Revenue Column = SUM(Sales[Revenue])Man vermutet, dass das den Umsatz pro Produkt summiert. Stattdessen liefert jede Zeile dieselbe Gesamtsumme. SUM berücksichtigt den Zeilenkontext nicht von selbst. Ohne Filter summiert es die ganze Tabelle, einmal pro Zeile, egal welche Zeile gerade aktuell ist.
Kontexttransition: So behebt CALCULATE das
CALCULATE wandelt Zeilenkontext in Filterkontext um. Das heißt Kontexttransition. Deshalb steckt CALCULATE in fast jeder nicht trivialen DAX-Formel.
Total Revenue Column = CALCULATE(SUM(Sales[Revenue]))Packen Sie SUM in CALCULATE, wird der aktuelle Zeilenkontext zu einem Filterkontext, der auf diese Zeile begrenzt ist, und SUM wird darin ausgewertet. Das Ergebnis: Jede Zeile liefert nun den Umsatz für die eigenen Werte, nicht die Gesamtsumme.
Dasselbe Muster gilt für eine berechnete Spalte in einer Tabelle Customers, die den Gesamtumsatz jedes Kunden braucht:
Customer Total Sales = CALCULATE(SUM(Sales[Revenue]))Ohne CALCULATE liefert das in jeder Kundenzeile dieselbe Gesamtsumme. Damit begrenzt die Kontexttransition SUM auf den jeweiligen Kunden.
Eine einfache Faustregel: Eine berechnete Spalte arbeitet standardmäßig im Zeilenkontext, ein Measure im Filterkontext, und CALCULATE ist die Brücke zwischen beiden. Eine Ausnahme sollten Sie sich merken: Eine Iterator-Funktion wie SUMX erzeugt Zeilenkontext, auch innerhalb eines Measures.
Total Revenue = SUMX(Sales, Sales[Quantity] * Sales[Unit Price])Hier erzeugt SUMX intern Zeilenkontext, wertet den Ausdruck pro Zeile aus und addiert die Ergebnisse, alles in einem Measure, das sonst im Filterkontext läuft.
Was den Filterkontext in einem echten Report aufbaut
Das Ergebnis eines Measures hängt von der Kombination aus dem Visual, in dem es steht, den Slicern und Filtern auf der Seite, den Beziehungen zwischen Tabellen und jedem CALCULATE oder FILTER in der Formel selbst ab. Liefert ein Measure etwas Unerwartetes, finden meist drei Fragen die Ursache:
Wonach filtert das Visual?
Welche Beziehungen wenden einen Filter an, den Sie nicht ausdrücklich geschrieben haben?
Erzeugt die Formel Zeilenkontext mit einem Iterator wie
SUMX?
Der Filterkontext hängt von den Beziehungen des Modells ab. Eine fehlende oder falsche Beziehung und eine Faktenzeile, deren Schlüssel in der zugehörigen Dimensionstabelle nicht existiert, führen beide zu unerwarteten Summen, weil die betroffenen Zeilen nicht so gefiltert werden, wie Sie erwarten. DIVIDE fängt die leeren Ergebnisse ab, die das Filtern erzeugen kann:
Profit Margin = DIVIDE([Profit], [Revenue], 0)Das dritte Argument ist der Wert, der statt eines Fehlers zurückgegeben wird, wenn der Nenner leer oder null ist.
Zwei verwandte Begriffe: Abfragekontext und verschachtelter Zeilenkontext
Zwei weitere Begriffe tauchen in fortgeschrittenem DAX auf. Beide erweitern die beiden Grundkonzepte oben und sind keine eigenen Ideen:
Abfragekontext ist der Filterkontext, den ein Visual für jede Zelle aufbaut, die es darstellt. In einer Matrix nach Product und Year wertet Power BI das Measure für jede Zelle einzeln aus. Der Abfragekontext erzeugt den Filterkontext hinter jeder Auswertung.
Verschachtelter Zeilenkontext entsteht, wenn ein Iterator in einem anderen steckt, etwa
SUMXinSUMX. Dann gibt es mehr als eine „aktuelle Zeile“ gleichzeitig. Modernes DAX löst das meist mitVARstatt mit der älteren FunktionEARLIER(). Unser Leitfaden zu DAX-Variablen behandeltVARausführlich.
Häufige Fehler
Ein Measure wie eine berechnete Spalte behandeln. Measures speichern keinen Wert pro Zeile. Sie rechnen dynamisch gegen den Filterkontext, der sie umgibt.
Erwarten, dass
SUMden Zeilenkontext automatisch berücksichtigt. Das tut es nicht. Packen Sie es inCALCULATE, wenn Sie das brauchen.Ohne Kenntnis des geänderten Filters
CALCULATEeinsetzen. Fragen Sie sich vorher, welchen Filterkontext Sie erzeugen oder überschreiben.
Zu den Filtermodifikatoren, die den Filterkontext gezielt ändern, etwa ALL und ALLSELECTED, lesen Sie unseren Leitfaden ALLSELECTED vs. ALL. DAX von Grund auf finden Sie in unserem vollständigen DAX-Leitfaden.
FAQs
Was ist Zeilenkontext in Power BI?
Zeilenkontext heißt, dass Power BI einen Ausdruck für jeweils eine Zeile auswertet. Er ist der Standardkontext in berechneten Spalten, und Iterator-Funktionen wie SUMX erzeugen ihn auch in Measures.
Was ist Filterkontext in Power BI?
Der Filterkontext ist die Menge der Filter, die auf die Daten wirken, wenn eine DAX-Formel ausgewertet wird. Er stammt aus Slicern, Visuals, Report- und Seitenfiltern und Tabellenbeziehungen.
Was ist der Hauptunterschied zwischen Zeilenkontext und Filterkontext?
Der Zeilenkontext wertet Daten Zeile für Zeile aus. Der Filterkontext wertet eine Formel gegen eine gefilterte Teilmenge der Daten aus. CALCULATE wandelt den ersten in den zweiten um.
Nutzen Measures Zeilenkontext?
Measures arbeiten standardmäßig im Filterkontext. Eine Iterator-Funktion in einem Measure, etwa SUMX, FILTER oder AVERAGEX, erzeugt jedoch intern Zeilenkontext, während das Measure insgesamt weiter im Filterkontext läuft.
Quellen
Context in DAX formulas - Microsoft Learn
CALCULATE function (DAX) - Microsoft Learn
Mehr zu diesem Thema.
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
Kostenlose Tools
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
Kostenlose Tools
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
