Grundlagen: Zeilen- und Filterkontext

Was ist das wichtigste Konzept um Power BI und die DAX Sprache zu verstehen? Der Unterschied zwischen Zeilen- und Filterkontext, denke ich. Alle Berechnungen beruhen hierauf. Und auch praktisch alle Probleme, an denen die wir im Lauf unserer DAX-Karriere wachsen, hängen damit zusammen. Deshalb möchte ich hier ein Praxisproblem vorstellen, das mir (in meiner Rolle als Trainer) aus zwei Gründen besonders gut gefällt:

Dachs zeichnet einen Plan
Dachs bei der Arbeit
  • An dem kleinen Beispiel lässt sich der Unterschied zwischen Zeilen- und Filterkontext gut demonstrieren
  • Es zeigt die Klarheit, die wir in DAX Formeln durch Variablen erreichen können

Die Aufgabenstellung lautete: In einer Liste können Buchungsnummern mehrfach vorkommen. Wie häufig kommt jede einzelne Buchungsnummer vor?

Von meiner DAXperten-Kollegin Anna habe ich mir abgeschaut, wie man schnell eine kleine Tabelle mit wenigen Einträgen erstellen kann, um die Funktionsweise einer neuen Formel zu testen: Wählt man beim Erstellen einer neuen Power BI Datei die Funktion „Daten in eine leere Tabelle einfügen“, dann kann man anschließend genau dies tun:

Screenshot zeigt wo wir Daten für Testzwecke in eine Tabelle eintragen können
Screenshot zeigt wo wir Daten für Testzwecke in eine Tabelle eintragen können
Alternativ funktioniert auch die Funktion „Daten eingeben“ im Start-Menü.
Bild zeigt die Ausgangsdaten
Dies sind die Testdaten mit BelegNummern
Bild zeigt die Ausgangsdaten und zusätzlich die berechnete Spalte
Und so soll das Ergebnis aussehen

Wie gehen wir nun am besten vor, um zu jeder BelegNummer ihre Anzahl anzugeben? Nun, zunächst einmal Zeile für Zeile: wir fügen die berechnete Spalte „Anzahl gleiche BelegNummer“ hinzu. Eine berechnete Spalte enthält eine Formel, die beim Laden neuer Daten in jeder Zeile berechnet wird. Und dies ist die Formel, die unsere Spalte berechnet:

Anzahl gleiche BelegNummer =
VAR b = DemoTabelle[BelegNummer]
VAR cnt =
    CALCULATE (
        COUNTROWS ( DemoTabelle ),
        DemoTabelle[BelegNummer] = b
    )
RETURN
    cnt

In der Variablen b merken wir uns den Wert von BelegNummer in dieser Zeile. Der Wert von b wird also im Zeilenkontext ermittelt.

In der Variablen cnt ermitteln wir nun, wie viele Zeilen es gibt, wo BelegNummer denselben Wert hat, wie wir ihn uns in b gemerkt haben. Dazu verwenden wir CALCULATE( ) mit der Filterbedingung „DemoTabelle[BelegNummer] = b“. Wir filtern also die DemoTabelle so, dass nur noch die Zeilen übrig bleiben, die zu dieser Bedingung passen und nutzen dann COUNTROWS( ), um die Anzahl der Zeilen zu ermitteln. Ein klarer Fall von Filterkontext.

In diesem Fall ist der Unterschied klar zu erkennen, daher gefällt mir das Beispiel so gut. Mit dieser Herangehensweise lassen sich dann mit etwas Übung auch komplexere Aufgabenstellungen meistern.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht.