Ausführen von Kontextübergängen

Abgeschlossen

Was geschieht, wenn ein Measure oder Measureausdruck 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 erstellen Sie eine Definition für eine berechnete Spalte in der Tabelle Customer, um Kunden nach Treuekategorien zu klassifizieren. Das Szenario ist sehr einfach. Wenn der vom Kunden generierte Umsatz weniger als 2500 USD beträgt, wird der Kunde als Low klassifiziert, andernfalls als High.

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.

Abbildung eines Visuals mit einem Kreisdiagramm mit dem Titel „Revenue by Customer Segment“. Es gibt nur ein Segment: „High“, das 100 % der Daten darstellt.

Beachten Sie, dass nur ein Wert für Customer Segment vorhanden ist. Der Grund hierfür ist, dass die Formel für die berechnete Spalte ein falsches Ergebnis erzeugt: Jedem Kunden wird der Wert High zugeordnet, da der Ausdruck SUM(Sales[Sales Amount]) nicht in einem Filterkontext ausgewertet wird. Folglich wird jeder Kunde anhand der Summe der aller Spaltenwerte für 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 mit der CALCULATE-Funktion ausführen, ohne Filterausdrücke zu übergeben.

Ä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 Kreisdiagramm die neue berechnete Spalte zur Legende hinzu, und stellen Sie sicher, dass jetzt zwei Kreissegmente angezeigt werden.

Abbildung eines Visuals mit einem Kreisdiagramm mit dem Titel „Revenue by Customer Segment“. Es gibt zwei Segmente. „High“ und „Low“. „High“ stellt 76 % der Daten dar und „Low“ 24 %.

In diesem Fall wendet die CALCULATE-Funktion die Werte im Zeilenkontext als Filter an. Dies wird als Kontextübergang bezeichnet. 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 auf die Spalte CustomerKey für den Wert im Zeilenkontext an.

Wenn Sie in einem Ausdruck, der im Zeilenkontext ausgewertet wird, auf Measures verweisen, erfolgt der Kontextübergang automatisch. Daher müssen Sie keine Measureverweise an die CALCULATE-Funktion übergeben.

Ändern Sie die Definition der berechneten Spalte, die auf das Measure 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 das Measure Sales Commission vervollständigen. Um eine Summe zu erhalten, müssen Sie eine Iteratorfunktion verwenden, um alle Regionen im Filterkontext zu durchlaufen. Der Iteratorfunktionsausdruck muss die CALCULATE-Funktion verwenden, um den Übergang vom Zeilen- zum Filterkontext durchzufü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 Measuredefinition 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.

Abbildung eines Tabellenvisuals mit drei Spalten: „Region“, „Revenue“ und „Sales Commission“. Es werden zehn Zeilen mit Regionen und eine Summe angezeigt. Die Summe unter „Sales Commission“ enthält nun einen Wert.