Artikel neu anfordern
Power BI - Vergleich der Funktionen FILTER() und CALCULATE()
Mein Artikel zeigt anhand eines klar strukturierten Power‑BI‑Beispiels den zentralen Unterschied zwischen den DAX‑Funktionen FILTER() und CALCULATE().
Ausgangspunkt ist ein einfaches Sternschema mit den Tabellen Kunden, Produkte und Aufträge, das schrittweise zu einem Bericht mit Kennzahlen und Visuals aufgebaut wird.
Im Fokus steht die Erkenntnis, dass beide Funktionen zwar häufig identische Ergebnisse liefern, jedoch grundlegend unterschiedlich arbeiten.
FILTER() wirkt zeilenweise: Es prüft jede einzelne Zeile einer Tabelle und erzeugt daraus eine neue, gefilterte Teilmenge. Diese kann nicht direkt als Measure verwendet werden, da sie eine Tabelle zurückgibt. Deshalb ist eine Iterator‑Funktion wie beispielsweise SUMX notwendig, um daraus einen einzelnen Wert zu berechnen.
CALCULATE() hingegen verändert den Filterkontext. Anstatt eine Zwischentabelle zu erzeugen, wird die gewünschte Aggregation direkt unter neuen Filterbedingungen ausgeführt. Dieser set‑basierte Ansatz ist in den meisten Standardszenarien effizienter und stellt in der Praxis die bevorzugte Lösung dar.
Der Unterschied lässt sich prägnant so zusammenfassen: FILTER() folgt einem expliziten, zeilenorientierten Ansatz („Ich wähle zuerst die Daten und rechne dann“), während CALCULATE() die Berechnungsregeln selbst verändert („Ich passe den Kontext der Berechnung an“).
Zum Abschluss zeige ich, wie sich die entwickelten Filterlogiken in einem größeren, realistischeren Datenbestand verhalten. Denn erst durch eine ausreichend breite Datenbasis werden typische Effekte wie Verteilungen, Grenzfälle oder Unterschiede zwischen Segmenten sichtbar – und damit die Wirkung der Filterfunktionen wirklich greifbar.
...
Ausgangspunkt ist ein einfaches Sternschema mit den Tabellen Kunden, Produkte und Aufträge, das schrittweise zu einem Bericht mit Kennzahlen und Visuals aufgebaut wird.
Im Fokus steht die Erkenntnis, dass beide Funktionen zwar häufig identische Ergebnisse liefern, jedoch grundlegend unterschiedlich arbeiten.
FILTER() wirkt zeilenweise: Es prüft jede einzelne Zeile einer Tabelle und erzeugt daraus eine neue, gefilterte Teilmenge. Diese kann nicht direkt als Measure verwendet werden, da sie eine Tabelle zurückgibt. Deshalb ist eine Iterator‑Funktion wie beispielsweise SUMX notwendig, um daraus einen einzelnen Wert zu berechnen.
CALCULATE() hingegen verändert den Filterkontext. Anstatt eine Zwischentabelle zu erzeugen, wird die gewünschte Aggregation direkt unter neuen Filterbedingungen ausgeführt. Dieser set‑basierte Ansatz ist in den meisten Standardszenarien effizienter und stellt in der Praxis die bevorzugte Lösung dar.
Der Unterschied lässt sich prägnant so zusammenfassen: FILTER() folgt einem expliziten, zeilenorientierten Ansatz („Ich wähle zuerst die Daten und rechne dann“), während CALCULATE() die Berechnungsregeln selbst verändert („Ich passe den Kontext der Berechnung an“).
Zum Abschluss zeige ich, wie sich die entwickelten Filterlogiken in einem größeren, realistischeren Datenbestand verhalten. Denn erst durch eine ausreichend breite Datenbasis werden typische Effekte wie Verteilungen, Grenzfälle oder Unterschiede zwischen Segmenten sichtbar – und damit die Wirkung der Filterfunktionen wirklich greifbar.
...
Ich bin bereits Abonnent oder Abonnentin für Artikel dieses Themas, möchte den Artikel aber noch einmal laden.