DAX ist ohne Filterfunktionen nur halb so mächtig. Denn erst durch Filterlogik bekommst du Antworten auf Fragen wie:
- „Wie viel Umsatz hat Produkt A im letzten Quartal – bereinigt von allen anderen Filtern?“
- „Wie hoch ist der Marktanteil dieses Monats im Vergleich zum Gesamtjahr?“
- „Welche Produkte erfüllen Bedingung X UND Y?“
DAX-Filterfunktionen steuern den Filterkontext, also welche Daten Power BI für eine Berechnung tatsächlich berücksichtigt.
Wenn du diesen Mechanismus verstehst, hebst du deine Modelle auf ein komplett neues Level.
Tipp: Auf meinem YouTube-Kanal findest du weitere Power-BI-Tutorials 👉 https://www.youtube.com/@datenanalyst
Der Schlüssel zu allem: Filterkontext vs. Zeilenkontext
Bevor wir Filterfunktionen anwenden, müssen wir verstehen, welcher Kontext überhaupt wirkt.
Filterkontext
Der Filterkontext entsteht z. B. durch:
- Visual-Filter
- Slicer
- Zeilen/Spalten in Tabellen
- CALCULATE()
Dieser Kontext bestimmt welche Zeilen für die Berechnung sichtbar sind.
Zeilenkontext
Der Zeilenkontext entsteht:
- in iterierenden Funktionen (SUMX, FILTER, ADDCOLUMNS …)
- in berechneten Spalten
Hier arbeitet DAX Zeile für Zeile.
Warum das wichtig ist
Nur wenn wir wissen, welcher Kontext aktiv ist, können wir verstehen, warum ein Measure unerwartete Werte liefert – eine der häufigsten Fehlerquellen bei Power-BI-Einsteigern.
Die wichtigste Filterfunktion überhaupt: CALCULATE()
CALCULATE() verändert den Filterkontext.
Das ist ihr ganzer Job – und genau deshalb ist sie die zentrale Funktion in DAX.
Beispiel: Umsatz nur für Produkt „A“
Umsatz Produkt A =
CALCULATE(
SUM(Sales[Amount]),
Products[ProductName] = "A"
)
Was passiert?
- Alle bestehenden Filter bleiben bestehen
- Der Filter auf ProductName = A kommt zusätzlich dazu
- SUM wird im neuen Kontext berechnet
Merke
CALCULATE() ist die einzige Funktion, die Filter aktiv überschreibt. Ohne CALCULATE wäre DAX statisch – mit CALCULATE wird DAX dynamisch.
FILTER(): Der feinjustierte Filter
Mit FILTER() baust du flexible Filterbedingungen, z. B. mit mehreren Kriterien:
Top Produkte Umsatz > 1000 =
CALCULATE(
SUM(Sales[Amount]),
FILTER(
Products,
Products[Umsatz] > 1000
)
)
FILTER():
- erzeugt einen Zeilenkontext
- prüft jede Zeile
- gibt nur jene zurück, die alle Bedingungen erfüllen
Der Trick: FILTER erlaubt Bedingungen, die nicht direkt in CALCULATE geschrieben werden können (z. B. Vergleiche über Measures).
ALL(): Filter entfernen – aber intelligent
ALL() ist eine der meist missverstandenen Funktionen.
Sie entfernt alle Filter auf eine Tabelle oder Spalte, damit du z. B. Anteile oder Rankings berechnen kannst.
Beispiel: Anteil am Gesamtumsatz
Umsatzanteil =
DIVIDE(
SUM(Sales[Amount]),
CALCULATE(SUM(Sales[Amount]), ALL(Sales))
)
Hier macht ALL() den zweiten Teil filterfrei, sodass der Gesamtumsatz berechnet wird, unabhängig von Slicern, Zeitraumfiltern oder Produktfiltern.
REMOVEFILTERS(): Der moderne Ersatz für ALL()
REMOVEFILTERS() macht das Gleiche wie ALL() – aber expliziter und klarer lesbar.
Gesamtumsatz =
CALCULATE(
SUM(Sales[Amount]),
REMOVEFILTERS(Sales)
)
Warum REMOVEFILTERS bevorzugt wird:
- besser verständlich
- funktional eindeutig
- standard in neuen Modellen
KEEPFILTERS(): Wenn CALCULATE zu „aggressiv“ ist
CALCULATE überschreibt Filter – außer du sagst ihm: „Bitte nicht.“
Beispiel:
Umsatz A und B =
CALCULATE(
SUM(Sales[Amount]),
KEEPFILTERS(Products[ProductName] IN {"A", "B"})
)
KEEПFILTERS() sorgt dafür, dass vorhandene Filter nicht ersetzt, sondern kombiniert werden.
Typische Fehler – und wie du sie vermeidest
1. FILTER falsch eingesetzt
Viele schreiben:
FILTER(Products, [Umsatz] > 1000)
Das funktioniert nur, wenn Umsatz bereits ein Measure ist.
Nutze Measures konsequent!
2. ALL zu breit angewendet
ALL(Sales) entfernt alle Filter, auch Zeitfilter.
ALL(Sales[Product]) entfernt nur Produktfilter.
Präzision spart dir Debugging-Zeit.
3. CALCULATE ohne Verständnis
Viele denken: „CALCULATE ist nur ein SUMMEWENN()“.
Falsch.
CALCULATE manipuliert den gesamten Kontext.
Praxis: Drei nützliche Muster für den Alltag
1. YTD ohne Zeitfilter
YTD Umsatz =
CALCULATE(
SUM(Sales[Amount]),
DATESYTD('Date'[Date]),
REMOVEFILTERS('Date'[Year])
)
2. Dynamische Top-N
TopN Umsatz =
CALCULATE(
SUM(Sales[Amount]),
FILTER(Products, Products[Rank] <= 10)
)
3. Produkte, die Bedingung X UND Y erfüllen
Produkte XY =
CALCULATE(
[Umsatz],
FILTER(Products, Products[Kategorie] = "A" && Products[Lager] > 0)
)
Weiterführende Artikel für dich
Für optimale interne Verlinkung:
- Power BI CALCULATE verstehen
- DAX Kontext einfach erklärt
- SUMX vs. SUM – die echten Unterschiede
- DAX ALL vs. REMOVEFILTERS – Wann was verwenden?
Fazit: Filterfunktionen sind das Herz von DAX
Wenn du CALCULATE(), FILTER(), ALL(), REMOVEFILTERS() und KEEPFILTERS() verstehst, hast du 80 % der DAX-Logik im Griff.
Sie steuern den Kontext – und damit das Ergebnis.
Ohne Filterlogik ist DAX nur ein Taschenrechner. Mit ihr wird es zu einem BI-Werkzeug der Spitzenklasse.
Wenn du praktische Video-Walkthroughs dazu sehen möchtest, findest du sie hier:
👉 https://www.youtube.com/@datenanalyst
