Warum DAX-Filterfunktionen so entscheidend sind

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