Kontextübergänge ausführen
Was geschieht, wenn eine Kennzahl oder ein Kennzahl-Ausdruck im Zeilenkontext ausgewertet wird? Dieses Szenario kann in einer Formel für eine berechnete Spalte auftreten oder wenn ein Ausdruck in einer Iteratorfunktion ausgewertet wird.
Im folgenden Beispiel fügen Sie der Tabelle Customer eine berechnete Spalte hinzu, um Kunden nach Treuekategorien zu klassifizieren. Das Szenario ist einfach: Wenn der vom Kunden generierte Umsatz weniger als 2500 USD beträgt, wird der Kunde als Niedrig, andernfalls wird er als Hoch klassifiziert.
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Fügen Sie auf Seite 4 des Berichts die Spalte Customer Segment als Legende des Kreisdiagramms hinzu.
Beachten Sie, dass nur ein Wert für Kundensegment vorhanden ist. Der Grund dafür ist, dass die berechnete Spaltenformel ein falsches Ergebnis liefert: Jedem Kunden ist der Wert Hoch zugewiesen, da der Ausdruck SUM(Sales[Sales Amount])
in einem Filterkontext nicht ausgewertet wird. Folglich wird jeder Kunde anhand der Summe aller Werte in der Spalte Sales Amount in der Tabelle Sales bewertet.
Um die Auswertung des Ausdrucks SUM(Sales[Sales Amount])
für jeden Kunden zu erzwingen, muss ein Kontextübergang ausgeführt werden, der die Spaltenwerte im Zeilenkontext auf den Filterkontext anwendet. Sie können diesen Übergang erreichen, indem Sie die Funktion CALCULATE
ohne Übergabe von Filterausdrücken verwenden.
Ändern Sie die Definition der berechneten Spalte so, dass sie das richtige Ergebnis liefert.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Fügen Sie im Kreisdiagrammvisual der Legende die neue berechnete Spalte hinzu, und überprüfen Sie, ob jetzt zwei Kreissegmente angezeigt werden.
In diesem Fall wendet die Funktion CALCULATE
Zeilenkontextwerte als Filter an, die als Kontextübergang bezeichnet werden. Der Genauigkeit halber muss noch gesagt werden, dass der Prozess nicht genauso funktioniert, wenn eine eindeutige Spalte in der Tabelle verwendet wird. Wenn sich eine eindeutige Spalte in der Tabelle befindet, müssen Sie nur einen Filter auf diese Spalte anwenden, um den Übergang durchzuführen. In diesem Fall wendet Power BI einen Filter an auf die Spalte CustomerKey für den Wert im Zeilenkontext an.
Wenn Sie in einem Ausdruck, der im Zeilenkontext ausgewertet wird, auf Kennzahlen verweisen, erfolgt der Kontextübergang automatisch. Sie müssen also keine Kennzahl-Referenzen an die Funktion CALCULATE
übergeben.
Ändern Sie die Definition der berechneten Spalte, die auf die Kennzahl Revenue verweist, und beachten Sie, dass weiterhin das richtige Ergebnis erzeugt wird.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Nun können Sie die Formel für die Formelleiste Sales Commission vervollständigen. Um eine Summe zu erhalten, müssen Sie eine Iteratorfunktion verwenden, um alle Regionen im Filterkontext zu durchlaufen. Der Ausdruck der Iteratorfunktion muss die Funktion CALCULATE
verwenden, um den Zeilenkontext in den Filterkontext zu überführen. Beachten Sie, dass nicht mehr getestet werden muss, ob sich ein einzelner Wert der Spalte Country in der Tabelle Sales Territory im Filterkontext befindet, da bekannt ist, dass nach einem einzelnen Land gefiltert wird. (Die Iteration erfolgt über die Regionen im Filterkontext, und eine Region gehört nur zu einem Land.)
Wechseln Sie zu Seite 3 des Berichts, und ändern Sie dann die Kennzahldefinition Sales Commission so, dass sie die SUMX
-Iteratorfunktion verwendet:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
Das Tabellenvisual zeigt jetzt eine Gesamtsumme der Verkaufsprovisionen für alle Regionen an.