Przejmij kontekst

Ukończone

Co się dzieje, gdy wyrażenie miary lub miary jest oceniane w kontekście wiersza? Ten scenariusz może się zdarzyć w formule obliczanej kolumny lub podczas obliczania wyrażenia w funkcji iteratora.

W poniższym przykładzie do tabeli Odbiorców zostanie dodać obliczoną kolumnę, aby sklasyfikować odbiorców w klasach lojalnościowych. Ten scenariusz jest prosty: Jeśli przychód produkowany przez klienta jest mniejszy niż $2500, odbiorca jest klasyfikowany jako Mały; w przeciwnym razie jest klasyfikowany jako Wysoki.

Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Na stronie 4 raportu dodaj raport Customer segment column jako legendę wykresu kołowyego.

Zauważ, że istnieje tylko segment wartości odbiorcy. Przyczyną tego jest to, że obliczona formuła kolumny generuje niepoprawny wynik: każdemu odbiorcy jest przypisywana wartość Wysoka SUM(Sales[Sales Amount]) , ponieważ wyrażenie nie jest oceniane w kontekście filtru. W związku z tym każdy odbiorca jest oceniany według sumy wartości każdej kolumny Kwota sprzedaży w tabeli Sprzedaż.

Aby wymusić ocenianie wyrażenia SUM(Sales[Sales Amount]) dla każdego odbiorcy, musi być stosowana zmiana kontekstu, która powoduje zastosowanie wartości kolumn kontekstu wiersza do kontekstu filtrowania. Przejście to można wykonać za pomocą funkcji CALCULATE bez przekazywania wyrażeń filtru.

Zmodyfikować obliczoną definicja kolumny, aby uzyskać poprawny wynik.

Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Na wykresie kołowym dodaj nową obliczoną kolumnę do dodatku Legenda, sprawdź, czy teraz są wyświetlane dwa segmenty kołowy.

W takim przypadku funkcja stosuje CALCULATE wartości kontekstu wiersza jako filtry, zwane przejściami do kontekstu. Aby była ona dokładna, proces nie działa w taki sposób, gdy w tabeli jest unikatowa kolumna. Jeśli w tabeli znajduje się unikatowa kolumna, aby przejście było możliwe, wystarczy zastosować w tej kolumnie filtr. W takim przypadku powoduje Power BI zastosowanie filtru w kolumnie CustomerKey dla wartości w kontekście wiersza.

Jeśli odwołujesz się do miar w wyrażeniu, które jest oceniane w kontekście wiersza, zmiana kontekstu jest automatyczna. W związku z tym nie ma potrzeby przekazywać odwołań do miar do CALCULATE funkcji.

Zmodyfikuj definicja kolumny, który odwołuje się do miary Przychód, i zwróć uwagę, że nadal jest ona w stanie uzyskać poprawny wynik.

Customer Segment = 
VAR CustomerRevenue = [Revenue]
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Teraz możesz wypełnić formułę miary Prowizja od sprzedaży. Aby wytworzyć sumę, należy użyć funkcji iteratora, która będzie iterować nad wszystkimi regionami w kontekście filtrowania. Wyrażenie funkcji iterator musi używać funkcji CALCULATE do przejścia kontekstu wiersza do kontekstu filtru. Należy zauważyć, że nie ma już potrzeby testowania pojedynczej wartości kolumny Kraj w tabeli Terytorium sprzedaży w kontekście filtru, ponieważ wiadomo, że filtrowanie jest możliwe według jednego kraju (ponieważ podlega on filtrowaniu nad regionami w kontekście filtru, a region należy tylko do jednego kraju).

Przełącz się na stronę 3 raportu, a następnie zmodyfikuj definicję miary prowizji sprzedaży, aby użyć SUMX funkcji iteratora:

Sales Commission =
SUMX(
    VALUES('Sales Territory'[Region]),
    CALCULATE(
        [Revenue]
        * IF(
            VALUES('Sales Territory'[Country]) = "United States",
            0.15,
            0.1
        )
    )
)

W tej tabeli jest teraz wyświetlana suma prowizji od sprzedaży dla wszystkich regionów.