Wykonywanie przeniesienia kontekstu
Co się dzieje, gdy miara lub wyrażenie miary zostaje ocenione w kontekście wiersza? Taki scenariusz może wystąpić w formule kolumny obliczeniowej lub podczas oceniania wyrażenia w funkcji iteracyjnej.
W poniższym przykładzie dodasz kolumnę obliczeniową do tabeli Customer ( Klient ), aby sklasyfikować klientów w klasie lojalnościowej. Scenariusz jest prosty: gdy przychody generowane przez klienta są mniejsze niż 2500 USD, klient jest klasyfikowany jako Niski; w przeciwnym razie są klasyfikowane jako Wysokie.
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Na stronie 4 raportu dodaj kolumnę Customer Segment (Segment klientów) jako legendę wykresu kołowego.
Zauważ, że istnieje tylko jedna wartość kolumny Customer Segment. Jest to wynikiem błędnie utworzonej formuły kolumny obliczeniowej: Każdemu klientowi przypisywana jest wartość High, ponieważ wyrażenie SUM(Sales[Sales Amount])
nie jest oceniane w kontekście filtru. W związku z tym każdy klient jest oceniany na podstawie sumy każdej wartości kolumny Sales Amount w tabeli Sales.
Aby wymusić ocenianie wyrażenia SUM(Sales[Sales Amount])
dla każdego klienta, musi nastąpić zmiana kontekstu, która zastosuje wartości kolumn z kontekstu wiersza w kontekście filtru. To przejście można wykonać przy użyciu CALCULATE
funkcji bez przekazywania wyrażeń filtru.
Zmień definicję kolumny obliczeniowej, by wynik był prawidłowy.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
W wizualizacji wykresu kołowego dodaj nową kolumnę obliczeniową do źródła Legenda, sprawdź, czy są teraz wyświetlane dwa segmenty kołowe.
W takim przypadku CALCULATE
funkcja stosuje wartości kontekstu wiersza jako filtry, nazywane przejściem kontekstu. Dla jasności: ten proces działa trochę inaczej, gdy w tabeli jest unikatowa kolumna. Wtedy wystarczy zastosować filtr na tej kolumnie, by nastąpiło przeniesienie. W tym przypadku usługa Power BI stosuje filtr wartości w kontekście wiersza na kolumnie CustomerKey (Klucz klienta).
Jeśli odwołujesz się do miar w wyrażeniu, które oceniane jest w kontekście wiersza, przeniesienie kontekstu nastąpi automatycznie. W związku z tym nie trzeba przekazywać odwołań miar do CALCULATE
funkcji.
Zmień definicję kolumny obliczeniowej odwołującej się do miary Revenue. Zauważysz, że wynik pozostanie prawidłowy.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Teraz możesz dokończyć pisanie formuły miary Sales Commission. Aby uzyskać sumę, musisz wykorzystać funkcję iteracyjną, która wykona iterację po wszystkich regionach w kontekście filtru. Wyrażenie funkcji iteratora musi używać CALCULATE
funkcji , aby przenieść kontekst wiersza do kontekstu filtru. Zwróć uwagę, że nie musi już testować, czy pojedyncza wartość kolumny Country w tabeli Sales Territory jest w kontekście filtru, ponieważ wiadomo, że jest ona filtrująca według jednego kraju (ponieważ iteruje ona w regionach w kontekście filtru, a region należy tylko do jednego kraju).
Przejdź do strony 3 raportu, a następnie zmodyfikuj definicję miary Sales Commission , aby użyć funkcji iteratora SUMX
:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
Wizualizacja tabeli wyświetla teraz sumę prowizji ze sprzedaży we wszystkich regionach.
Potrzebujesz pomocy? Zobacz nasz przewodnik po rozwiązywaniu problemów lub prześlij szczegółową opinię, zgłaszając problem.