CALCULATE

Hiermit wird ein Ausdruck in einem bearbeiteten Filterkontext ausgewertet.

Hinweis

Es gibt auch die Funktion CALCULATETABLE. Die Funktionalität ist identisch, hierbei wird jedoch der Filterkontext bearbeitet, der auf einen Ausdruck angewendet wird, der ein Tabellenobjekt zurückgibt.

Syntax

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

Parameter

Begriff Definition
expression Der auszuwertende Ausdruck.
filter1, filter2,… Optional: Boolesche Ausdrücke oder Tabellenausdrücke, die Filter definieren, oder Filtermodifiziererfunktionen.

Der als erster Parameter verwendete Ausdruck ist im Wesentlichen dasselbe wie ein Measure.

Filter können Folgendes sein:

  • Boolesche Filterausdrücke
  • Tabellenfilterausdrücke
  • Filtermodifiziererfunktionen

Wenn mehrere Filter vorhanden sind, können sie mithilfe des logischen Operators AND (&&) ausgewertet werden, was bedeutet, dass alle Bedingungen TRUE sein müssen. Alternativ kann der logische Operator OR (||) verwendet werden, wobei eine der Bedingungen TRUE sein kann.

Boolesche Filterausdrücke

Ein boolescher Ausdrucksfilter ist ein Ausdruck, der mit TRUE oder FALSE ausgewertet wird. Es gibt mehrere Regeln, die befolgt werden müssen:

  • Sie können auf Spalten aus einer einzelnen Tabelle verweisen.
  • Sie können nicht auf Measures verweisen.
  • Sie dürfen keine geschachtelte CALCULATE-Funktion verwenden.

Ab dem im September 2021 veröffentlichten Release von Power BI Desktop gelten außerdem folgende Regeln:

  • Sie können nur dann Funktionen zum Überprüfen oder Zurückgeben einer Tabelle verwenden, wenn sie als Argumente an Aggregationsfunktionen übergeben werden.
  • Sie können eine Aggregationsfunktion enthalten, die einen Skalarwert zurückgibt. Beispiel:
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Tabellenfilterausdruck

Ein Tabellenausdrucksfilter wendet ein Tabellenobjekt als Filter an. Dabei könnte es sich um einen Verweis auf eine Modelltabelle handeln, wahrscheinlicher handelt es sich jedoch um eine Funktion, die ein Tabellenobjekt zurückgibt. Sie können die FILTER-Funktion verwenden, um komplexe Filterbedingungen anzuwenden, einschließlich derjenigen, die von booleschen Filterausdrücken nicht definiert werden können.

Filtermodifiziererfunktionen

Filtermodifiziererfunktionen bieten Ihnen mehr Funktionalität als einfach nur das Hinzufügen von Filtern. Sie bieten Ihnen zusätzliche Steuerungsmöglichkeiten, wenn Filterkontexte bearbeitet werden.

Funktion Zweck
REMOVEFILTERS Hiermit werden alle Filter entfernt, oder Filter aus einer oder mehreren Spalten einer Tabelle, oder aus allen Spalten einer einzelnen Tabelle.
ALL1, ALLEXCEPT, ALLNOBLANKROW Hiermit werden Filter aus einer oder mehreren Spalten entfernt, oder aus allen Spalten einer einzelnen Tabelle.
KEEPFILTERS Hiermit wird ein Filter hinzugefügt, ohne dass vorhandene Filter derselben Spalten entfernt werden.
USERELATIONSHIP Hiermit wird eine inaktive Beziehung zwischen verknüpften Spalten hergestellt. In diesem Fall wird die aktive Beziehung automatisch inaktiv.
CROSSFILTER Hiermit wird die Filterrichtung geändert (von beide in einzeln oder von einzeln in beide), oder eine Beziehung wird deaktiviert.

1 Die ALL-Funktion und ihre Varianten verhalten sich sowohl wie Filtermodifizierer als auch wie Funktionen, die Tabellenobjekte zurückgeben. Wenn die REMOVEFILTERS-Funktion von Ihrem Tool unterstützt wird, sollten Sie eher diese verwenden, um Filter zu entfernen.

Rückgabewert

Der Wert, der das Ergebnis des Ausdrucks ist.

Bemerkungen

  • Wenn Filterausdrücke bereitgestellt werden, bearbeitet die CALCULATE-Funktion den Filterkontext, um den Ausdruck auszuwerten. Für jeden Filterausdruck gibt es zwei mögliche Standardergebnisse, wenn der Filterausdruck nicht in die KEEPFILTERS-Funktion eingeschlossen ist:

    • Wenn sich die Spalten (oder Tabellen) nicht im Filterkontext befinden, werden dem Filterkontext neue Filter hinzugefügt, um den Ausdruck auszuwerten.
    • Wenn die Spalten (oder Tabellen) sich bereits im Filterkontext befinden, werden die vorhandenen Filter durch die neuen Filter überschrieben, um den CALCULATE-Ausdruck auszuwerten.
  • Die ohne Filter verwendete CALCULATE-Funktion kann eine besondere Anforderung erfüllen. Sie sorgt für einen Übergang von Zeilenkontext zu Filterkontext. Sie ist erforderlich, wenn ein Ausdruck (kein Modellmeasure), der Modelldaten zusammenfasst, im Zeilenkontext ausgewertet werden muss. Dieses Szenario kann in einer Formel für eine berechnete Spalte auftreten oder wenn ein Ausdruck in einer Iteratorfunktion ausgewertet wird. Beachten Sie, dass der Kontextübergang bei Verwendung eines Modellmeasure im Zeilenkontext automatisch erfolgt.

  • Die Verwendung dieser Funktion im DirectQuery-Modus wird nicht unterstützt, wenn sie in berechneten Spalten oder RLS-Regeln (Row-Level Security) eingesetzt wird.

Beispiele

Die folgende Measuredefinition der Sales-Tabelle erzeugt ein Umsatzergebnis, jedoch nur für Produkte, die die Farbe Blau aufweisen.

Die Beispiele in diesem Artikel können mit dem Adventure Works SW 2020 Power BI Desktop Beispielmodell verwendet werden. Informationen zum Abrufen des Modells finden Sie unter DAX-Beispielmodell.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Category Sales Amount Blue Revenue (Umsätze für blaue Produkte)
Accessories 1\.272.057,89 US-Dollar 165.406,62 US-Dollar
Bikes 94.620.526,21 US-Dollar 8\.374.313,88 US-Dollar
Clothing 2\.117.613,45 US-Dollar 259.488,37 US-Dollar
Komponenten $11,799,076.66 803.642,10 US-Dollar
Gesamt 109.809.274,20 US-Dollar 9.602.850,97 US-Dollar

Die CALCULATE-Funktion wertet die Summe der Spalte SalesAmount der Tabelle Sales in einem bearbeiteten Filterkontext aus. Der Spalte Color der Tabelle Product wird ein neuer Filter hinzugefügt, oder der Filter überschreibt alle Filter, die bereits auf die Spalte angewendet wurden.

Die folgende Measuredefinition der Sales-Tabelle erzeugt eine Umsatzquote für die Umsätze aller Vertriebskanäle.

Kanal Sales Amount Revenue % Total Channel (Umsatzquote gesamt für alle Kanäle)
Internet $29,358,677.22 26,74 %
Reseller $80,450,596.98 73,26 %
Gesamt 109.809.274,20 US-Dollar 100,00 %
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

Die DIVIDE-Funktion dividiert einen Ausdruck, der (im Filterkontext) eine Summe des Spaltenwerts von Sales Amount der Tabelle Sales bildet, durch denselben Ausdruck in einem bearbeiteten Filterkontext. Dabei handelt es sich um die CALCULATE-Funktion, die den Filterkontext mithilfe der REMOVEFILTERS-Funktion bearbeitet, wobei es sich um eine Filtermodifiziererfunktion handelt. Sie entfernt Filter aus der Spalte Channel der Tabelle Sales Order.

Die folgende berechnete Spaltendefinition der Tabelle Customer klassifiziert Kunden in eine Treueklasse. Es handelt sich um ein sehr einfaches Szenario: Wenn der vom Kunden erzeugte Umsatz geringer als 2.500 US-Dollar ist, wird er als Low (Gering) klassifiziert, andernfalls als High (Hoch).

Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

In diesem Beispiel wird der Zeilenkontext in den Filterkontext konvertiert. Dies wird als Kontextübergang bezeichnet. Die ALLEXCEPT-Funktion entfernt Filter aus allen Spalten der Tabelle Customer, mit Ausnahme der Spalte CustomerKey.

Filterkontext
Zeilenkontext
CALCULATETABLE-Funktion
Filterfunktionen