Ändern des Filterkontexts

Abgeschlossen

Sie können die DAX-Funktion CALCULATE verwenden, um den Filterkontext in Ihren Formeln zu ändern. Die Syntax für die CALCULATE-Funktion lautet wie folgt:

CALCULATE(<expression>, [[<filter1>], <filter2>]…)

Die Funktion erfordert die Übergabe in einem Ausdruck, der einen skalaren Wert zurückgibt, und mit so vielen Filtern, wie Sie benötigen. Der Ausdruck kann ein Measure (ein benannter Ausdruck) oder ein beliebiger Ausdruck sein, der im Filterkontext ausgewertet werden kann.

Filter können boolesche Ausdrücke oder Tabellenausdrücke sein. Es ist auch möglich, Filtermodifiziererfunktionen zu übergeben, die beim Ändern des Filterkontexts zusätzliche Steuerungsmöglichkeiten bieten.

Wenn Sie über mehrere Filter verfügen, werden diese mit dem logischen UND-Operator ausgewertet. Das bedeutet, dass alle Bedingungen gleichzeitig TRUE sein müssen.

Hinweis

Die DAX-Funktion CALCULATETABLE führt genau die gleiche Funktionalität wie die CALCULATE-Funktion aus. Sie ändert jedoch den Filterkontext, der auf einen Ausdruck angewandt wird, der ein Tabellenobjekt zurückgibt. In diesem Modul wird für die Erläuterungen und Beispiele die CALCULATE-Funktion verwendet. Behalten Sie jedoch im Hinterkopf, dass diese Szenarien auch auf die CALCULATETABLE-Funktion angewandt werden können.

Anwenden von booleschen Ausdrucksfiltern

Ein boolescher Ausdrucksfilter ist ein Ausdruck, der mit TRUE oder FALSE ausgewertet wird. Boolesche Filter müssen die folgenden Regeln einhalten:

  • Sie können nur auf eine einzelne Spalte verweisen.

  • Sie können nicht auf Measures verweisen.

  • Sie können keine Funktionen verwenden, die eine Tabelle scannen oder zurückgeben, die Aggregationsfunktionen wie SUM enthält.

In diesem Beispiel erstellen Sie ein Measure. Laden Sie zunächst die Datei Adventure Works DW 2020 M06.pbix herunter, und öffnen Sie sie. Fügen Sie dann die folgende Measuredefinition hinzu, mit der das Measure Revenue mithilfe eines booleschen Ausdrucksfilters nach roten Produkten gefiltert wird.

Revenue Red = CALCULATE([Revenue], 'Product'[Color] = "Red")

Fügen Sie das Measure Revenue Red dem Tabellenvisual auf Seite 1 des Berichts hinzu.

Abbildung einer Tabelle mit drei Spalten: „Region“, „Revenue“ und „Revenue Red“. In der Tabelle werden 10 Zeilen und eine Summe angezeigt.

Im nächsten Beispiel filtert das folgende Measure das Measure Revenue nach mehreren Farben. Beachten Sie die Verwendung des IN-Operators, gefolgt von einer Liste von Farbwerten.

Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})

Das folgende Measure filtert das Measure Revenue nach teuren Produkten. Teure Produkte sind solche mit einem Listenpreis von mehr als 1.000 USD.

Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)

Anwenden von Tabellenausdrucksfiltern

Ein Tabellenausdrucksfilter wendet ein Tabellenobjekt als Filter an. Dabei kann es sich um einen Verweis auf eine Modelltabelle handeln. Es ist jedoch wahrscheinlich eine DAX-Funktion, die ein Tabellenobjekt zurückgibt.

Im Allgemeinen verwenden Sie die DAX-Funktion FILTER, um komplexe Filterbedingungen anzuwenden, einschließlich solcher, die nicht durch einen booleschen Filterausdruck definiert werden können. Die FILTER-Funktion wird als Iteratorfunktion klassifiziert, sodass Sie eine Tabelle oder einen Tabellenausdruck und einen Ausdruck übergeben, um jede Zeile dieser Tabelle auszuwerten.

Die FILTER-Funktion gibt ein Tabellenobjekt zurück, das genau die gleiche Struktur hat wie die übergebene Tabelle. Die Zeilen sind eine Teilmenge der übergebenen Zeilen, und zwar mit genau den Zeilen, für die der Ausdruck mit TRUE ausgewertet wurde.

Das folgende Beispiel zeigt einen Tabellenfilterausdruck, der die FILTER-Funktion verwendet:

Revenue High Margin Products =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[List Price] > 'Product'[Standard Cost] * 2
    )
)

In diesem Beispiel filtert die FILTER-Funktion alle Zeilen der Tabelle „Product“, die im Filterkontext liegen. Jede Zeile für ein Produkt, dessen Listenpreis die doppelten Standardkosten übersteigt, wird als Zeile in der gefilterten Tabelle angezeigt. Daher wird das Measure Revenue für alle Produkte ausgewertet, die von der FILTER-Funktion zurückgegeben werden.

Alle Filterausdrücke, die an die CALCULATE-Funktion übergeben werden, sind Tabellenfilterausdrücke. Ein boolescher Filterausdruck stellt eine Kurzschreibweise dar, um das Schreiben und Lesen zu vereinfachen. Intern werden boolesche Filterausdrücke von Microsoft Power BI in Tabellenfilterausdrücke übersetzt, und auf diese Weise wird auch Ihre Measuredefinition für Revenue Red übersetzt.

Revenue Red =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[Color] = "Red"
    )
)

Filterverhalten

Es gibt zwei mögliche Standardergebnisse, wenn Sie der CALCULATE-Funktion Filterausdrücke hinzufügen:

  • Wenn sich die Spalten (oder Tabellen) nicht im Filterkontext befinden, werden dem Filterkontext neue Filter hinzugefügt, um den CALCULATE-Ausdruck auszuwerten.

  • Wenn sich die Spalten (oder Tabellen) bereits im Filterkontext befinden, werden die vorhandenen Filter durch neue Filter überschrieben, um den CALCULATE-Ausdruck auszuwerten.

In den folgenden Beispielen wird das Hinzufügen von Filterausdrücken zur CALCULATE-Funktion veranschaulicht.

Hinweis

In sämtlichen Beispielen werden keine Filter auf das Tabellenvisual angewandt.

Wie in der vorherigen Aktivität wurde das Measure Revenue Red einem Tabellenvisual hinzugefügt, das nach Region gruppiert und die Umsätze anzeigt.

Abbildung einer Tabelle mit drei Spalten: „Region“, „Revenue“ und „Revenue Red“. In der Tabelle werden 10 Zeilen und eine Summe angezeigt.

Da auf die Spalte Color in der Tabelle „Product“ kein Filter angewandt wird, wird dem Filterkontext durch die Auswertung des Measures ein neuer Filter hinzugefügt. In der ersten Zeile steht der Wert „$2.681.324,79“ für rote Produkte, die in der Region „Australia“ verkauft wurden.

Wenn Sie die erste Spalte des Tabellenvisuals von Region auf Color umstellen, erhalten Sie ein anderes Ergebnis, da sich die Spalte Color in der Tabelle „Product“ nun im Filterkontext befindet.

Abbildung einer Tabelle mit drei Spalten: „Color“, „Revenue“ und „Revenue Red“. In der Tabelle werden 10 Zeilen und eine Summe angezeigt. Der Wert für „Revenue Red“ ist für jede Zeile gleich.

Die Formel für das Measure Revenue Red wertet das Measure Revenue durch Hinzufügen eines Filters für die Spalte Color (rot) in der Tabelle „Product“ aus. Aus diesem Grund überschreibt in diesem Visual, das nach Farbe gruppiert, die Measureformel den Filterkontext mit einem neuen Filter.

Das Ergebnis entspricht möglicherweise nicht Ihren Erwartungen. In der nächsten Einheit wird die DAX-Funktion KEEPFILTERS vorgestellt. Dies ist eine Filtermodifiziererfunktion, mit der Sie Filter beibehalten können, anstatt sie zu überschreiben.