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.
Siehe auch
Filterkontext
Zeilenkontext
CALCULATETABLE-Funktion
Filterfunktionen