CALCULATE

Gilt für:Berechnete SpalteBerechnete TabelleMeasurevisuelle Berechnung

Wertet einen Ausdruck in einem geänderten Filterkontext aus.

Anmerkung

Es gibt auch die CALCULATETABLE Funktion. Es führt genau dieselbe Funktionalität aus, mit der Ausnahme, dass der Filterkontext auf einen Ausdruck angewendet wird, der ein Tabellenobjektzurückgibt.

Syntax

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

Parameter

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

Der Ausdruck, den Sie als ersten Parameter verwenden, funktioniert wie ein Measure.

Filter können folgendes sein:

  • Boolesche Filterausdrücke
  • Tabellenfilterausdrücke
  • Filteränderungsfunktionen

Wenn Sie mehrere Filter verwenden, können Sie sie mithilfe des AND (&&) logischen Operators auswerten, was bedeutet, dass alle Bedingungen oder TRUEvom OR (||) logischen Operator sein müssen, was bedeutet, dass eine bedingung wahr sein kann. Weitere Informationen finden Sie unter DAX logische Operatoren für Operatoren>.

Boolesche Filterausdrücke

Ein boolescher Ausdrucksfilter ist ein Ausdruck, der zu TRUE oder FALSEausgewertet wird. Sie muss mehreren Regeln entsprechen:

  • Sie kann auf Spalten aus einer einzelnen Tabelle verweisen.

  • Es kann nicht auf Measures verwiesen werden.

  • Sie kann keine geschachtelte CALCULATE Funktion verwenden.

  • Sie kann keine Funktionen verwenden, die eine Tabelle scannen oder zurückgeben, es sei denn, Sie übergeben sie als Argumente an Aggregationsfunktionen.

  • Sie kann eine Aggregationsfunktion enthalten, die einen skalaren Wert 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. Es könnte ein Verweis auf eine Modelltabelle sein, aber wahrscheinlicher ist es eine Funktion, die ein Tabellenobjekt zurückgibt. Sie können die FILTER Funktion verwenden, um komplexe Filterbedingungen anzuwenden, einschließlich derer, die Sie nicht durch einen booleschen Filterausdruck definieren können.

Filtermodifiziererfunktionen

Mithilfe von Filtermodifiziererfunktionen können Sie nicht nur Filter hinzufügen. Sie bieten Ihnen zusätzliche Kontrolle beim Ändern des Filterkontexts.

Funktion Zweck
REMOVEFILTERS Entfernen Sie alle Filter oder Filter aus einer oder mehreren Spalten einer Tabelle oder aus allen Spalten einer einzelnen Tabelle.
ALL 1, , ALLEXCEPTALLNOBLANKROW Entfernen Sie Filter aus einer oder mehreren Spalten oder aus allen Spalten einer einzelnen Tabelle.
KEEPFILTERS Fügen Sie Filter hinzu, ohne vorhandene Filter in denselben Spalten zu entfernen.
USERELATIONSHIP Binden Sie eine inaktive Beziehung zwischen verwandten Spalten ein, in diesem Fall wird die aktive Beziehung automatisch inaktiv.
CROSSFILTER Ändern Sie die Filterrichtung (von beiden zu einem einzelnen oder von single zu beides), oder deaktivieren Sie eine Beziehung.

1 Die ALL-Funktion und die zugehörigen Varianten verhalten sich sowohl als Filtermodifizierer als auch als Funktionen, die Tabellenobjekte zurückgeben. Wenn Ihr Tool die REMOVEFILTERS Funktion unterstützt, verwenden Sie es, um Filter zu entfernen.

Rückgabewert

Der Wert, der aus dem Ausdruck resultiert.

Bemerkungen

  • Wenn Sie Filterausdrücke bereitstellen, ändert die CALCULATE Funktion den Filterkontext, um den Ausdruck auszuwerten. Für jeden Filterausdruck sind zwei Standardergebnisse vorhanden, wenn der Filterausdruck nicht in die KEEPFILTERS Funktion eingeschlossen wird:

    • Wenn sich die Spalten oder Tabellen nicht im Filterkontext befinden, werden dem Filterkontext neue Filter hinzugefügt, um den Ausdruck auszuwerten.
    • Wenn sich die Spalten oder Tabellen bereits im Filterkontext befinden, werden die vorhandenen Filter von den neuen Filtern überschrieben, um den CALCULATE Ausdruck auszuwerten.
  • Die Verwendung der CALCULATE Funktion ohne Filter erreicht eine bestimmte Anforderung. Er übergibt den Zeilenkontext in den Filterkontext. Dieser Übergang ist erforderlich, wenn ein Ausdruck (kein Modellmaß), der Modelldaten zusammenfasst, im Zeilenkontext ausgewertet werden muss. Dieses Szenario kann in einer berechneten Spaltenformel auftreten oder wenn ein Ausdruck in einer Iteratorfunktion ausgewertet wird. Wenn Sie ein Modellmaß im Zeilenkontext verwenden, erfolgt der Kontextübergang automatisch.

  • Diese Funktion wird für die Verwendung im DirectQuery-Modus nicht unterstützt, wenn sie in berechneten Spalten oder Sicherheitsregeln auf Zeilenebene (RLS) verwendet wird.

Beispiele

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

Die folgende Definition von "Sales table measure" erzeugt ein Umsatzergebnis, aber nur für Produkte mit der Farbe Blau.

Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
Kategorie Verkaufsbetrag Blauer Umsatz
Zubehör $1.272.057,89 $165,406,62
Fahrräder $94,620,526.21 $8,374,313,88
Kleidung $2.117.613,45 $259,488,37
Komponenten $11.799.076,66 $803,642.10
Gesamt- 109.809.274,20 $ $9.602.850,97

Die funktion CALCULATE wertet die Summe der Tabelle SalesSales Amount spalte in einem geänderten Filterkontext aus. Der Tabelle Product Tabelle Color Spalte wird ein neuer Filter hinzugefügt, oder der Filter überschreibt alle Filter, die bereits auf die Spalte angewendet wurden.

Die folgende Definition von "Sales table measure" erzeugt ein Verhältnis zwischen Umsatz und Umsatz für alle Vertriebskanäle.

Revenue % Total Channel =
DIVIDE (
    SUM ( Sales[Sales Amount] ),
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        REMOVEFILTERS ( 'Sales Order'[Channel] )
    )
)
Kanal Verkaufsbetrag Umsatz % Gesamtkanal
Internet $29,358,677,22 26.74%
Wiederverkäufer $80,450,596,98 73.26%
Gesamt- 109.809.274,20 $ 100.00%

Die funktion DIVIDE dividiert einen Ausdruck, der die Tabelle Sales tabelle Sales Amount spaltenwert (im Filterkontext) durch denselben Ausdruck in einem geänderten Filterkontext addiert. Es ist die CALCULATE-Funktion, die den Filterkontext mithilfe der REMOVEFILTERS-Funktion ändert, bei der es sich um eine Filtermodifiziererfunktion handelt. Sie entfernt Filter aus der Tabelle Sales OrderChannel Spalte.

Im folgenden Kunden Tabelle berechnete Spaltendefinition klassifiziert Kunden in eine Treueklasse. Es ist ein sehr einfaches Szenario: Wenn der vom Kunden erzeugte Umsatz kleiner als 2500 $ ist, werden sie als Lowklassifiziert; andernfalls sind sie High.

Customer Segment =
IF (
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        ALLEXCEPT ( Customer, Customer[CustomerKey] )
    ) < 2500,
    "Low",
    "High"
)
Kundensegment Kundenanzahl Verkaufsbetrag
Hoch 4,637 $102,670,663,09
Niedrig 13,848 $7.138.611.11
Gesamt- 18,485 109.809.274,20 $

In diesem Beispiel wird der Zeilenkontext in den Filterkontext konvertiert. Es wird als Kontextübergangbezeichnet. Mit der funktion werden Filter aus allen Tabellenspalten Customer entfernt, mit Ausnahme der Spalte CustomerKey.