Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Berechnete Spalte
Berechnete Tabelle
Measure
visuelle 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