OBLICZYĆ

Dotyczy: Obliczanie kolumny obliczeniowejtabeliobliczeniowej Miarawizualizacji

Oblicza wyrażenie w zmodyfikowanym kontekście filtru.

Uwaga

Istnieje również funkcja CALCULATETABLE . Wykonuje dokładnie te same funkcje, z wyjątkiem modyfikacji kontekstu filtru zastosowanego do wyrażenia zwracającego obiekt tabeli.

Składnia

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

Parametry

Termin Definicja
wyrażenie Wyrażenie do obliczenia.
filter1, filter2,... (Opcjonalnie) Wyrażenia logiczne lub wyrażenia tabeli definiujące filtry lub funkcje modyfikujące filtr.

Wyrażenie używane jako pierwszy parametr jest zasadniczo takie samo jak miara.

Filtry mogą być następujące:

  • Wyrażenia filtru warunkowego
  • Wyrażenia filtru tabeli
  • Funkcje modyfikacji filtru

Jeśli istnieje wiele filtrów, można je ocenić przy użyciu operatora logicznego AND (&&), co oznacza, że wszystkie warunki muszą mieć wartość TRUE lub przez operator logiczny OR (||), co oznacza, że warunek może być spełniony.

Wyrażenia filtru warunkowego

Filtr wyrażenia warunkowego to wyrażenie, które zwraca wartość TRUE (prawda) lub FALSE (fałsz). Istnieje kilka reguł, które muszą przestrzegać:

  • Mogą odwoływać się do kolumn z jednej tabeli.
  • Nie mogą odwoływać się do miar.
  • Nie mogą używać zagnieżdżonej funkcji CALCULATE.

Począwszy od wersji programu Power BI Desktop z września 2021 r., obowiązują również następujące elementy:

  • Nie mogą używać funkcji, które skanują lub zwracają tabelę, chyba że są przekazywane jako argumenty do funkcji agregacji.
  • Mogą zawierać funkcję agregacji, która zwraca wartość skalarną. Na przykład
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Wyrażenie filtru tabeli

Filtr wyrażenia tabeli stosuje jako filtr obiekt tabeli. Może to być odwołanie do tabeli modelu, ale najprawdopodobniej jest to funkcja zwracająca obiekt tabeli. Możesz użyć funkcji FILTER , aby zastosować złożone warunki filtrowania, w tym te, których nie można zdefiniować za pomocą wyrażenia filtru logicznego.

Funkcje modyfikujące filtr

Funkcje modyfikujące filtr umożliwiają wykonywanie więcej niż tylko dodawanie filtrów. Zapewniają one dodatkową kontrolę podczas modyfikowania kontekstu filtru.

Function Purpose
USUŃFILERY Usuń wszystkie filtry lub filtry z co najmniej jednej kolumny tabeli lub ze wszystkich kolumn pojedynczej tabeli.
WSZYSTKIE1, ALLEXCEPT, ALLNOBLANKROW Usuń filtry z co najmniej jednej kolumny lub ze wszystkich kolumn pojedynczej tabeli.
ZACHOWAJFILERY Dodaj filtr bez usuwania istniejących filtrów w tych samych kolumnach.
USERELATIONSHIP Angażowanie nieaktywnej relacji między powiązanymi kolumnami, w tym przypadku aktywna relacja automatycznie stanie się nieaktywna.
FILTROWANIE KRZYŻOWE Zmodyfikuj kierunek filtrowania (zarówno z jednej, jak i z pojedynczej do obu) lub wyłącz relację.

1 Funkcja ALL i jego warianty zachowują się zarówno jako modyfikatory filtrów, jak i jako funkcje zwracające obiekty tabeli. Jeśli funkcja REMOVEFILTERS jest obsługiwana przez narzędzie, lepiej użyć jej do usuwania filtrów.

Wartość zwracana

Wartość, która jest wynikiem wyrażenia.

Uwagi

  • Po podaniu wyrażeń filtru funkcja CALCULATE modyfikuje kontekst filtru w celu oceny wyrażenia. Dla każdego wyrażenia filtru istnieją dwa możliwe wyniki standardowe, gdy wyrażenie filtru nie jest opakowane w funkcję KEEPFILTERS:

    • Jeśli kolumny (lub tabele) nie są w kontekście filtru, nowe filtry zostaną dodane do kontekstu filtru w celu oceny wyrażenia.
    • Jeśli kolumny (lub tabele) znajdują się już w kontekście filtru, istniejące filtry zostaną zastąpione przez nowe filtry w celu obliczenia wyrażenia CALCULATE.
  • Funkcja CALCULATE używana bez filtrów osiąga określone wymaganie. Przenosi kontekst wiersza do kontekstu filtru. Jest to wymagane, gdy wyrażenie (a nie miara modelu), które podsumowuje dane modelu, musi być oceniane w kontekście wiersza. Taki scenariusz może wystąpić w formule kolumny obliczeniowej lub podczas oceniania wyrażenia w funkcji iteracyjnej. Należy pamiętać, że gdy miara modelu jest używana w kontekście wiersza, przejście kontekstu jest automatyczne.

  • Ta funkcja nie jest obsługiwana w trybie DirectQuery w przypadku użycia w kolumnach obliczeniowych lub regułach zabezpieczeń na poziomie wiersza.

Przykłady

Poniższa definicja miary Tabeli sprzedaży generuje wynik przychodu, ale tylko dla produktów, które mają kolor niebieski.

Przykłady w tym artykule mogą być używane z przykładowym modelem Adventure Works DW 2020 Power BI Desktop. Aby uzyskać model, zobacz przykładowy model języka DAX.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Kategoria Kwota sprzedaży Niebieski przychód
Akcesoria $1,272,057,89 165 406,62 USD
Rowery 94 620 526,21 USD $8,374,313,88
Odzież $2,117,613.45 259 488,37 USD
Składniki 11 799 076,66 USD 803 642,10 USD
Łącznie 109 809 274,20 USD $9,602,850.97

Funkcja CALCULATE oblicza sumę kolumny Sales Amount tabeli Sales w zmodyfikowanym kontekście filtru. Nowy filtr jest dodawany do kolumny Product table Color (Kolor tabeli Product) lub filtr zastępuje wszystkie filtry, które zostały już zastosowane do kolumny.

Poniższa definicja miary tabeli Sales (Sprzedaż ) generuje współczynnik sprzedaży w stosunku do sprzedaży dla wszystkich kanałów sprzedaży.

Kanał Kwota sprzedaży Przychód % łącznego kanału
Internet $29,358,677,22 26.74%
Reseller (Odsprzedawca) 80 450 596,98 USD 73.26%
Łącznie 109 809 274,20 USD 100.00%
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

Funkcja DIVIDE dzieli wyrażenie sumujące wartość kolumny Sales Amount tabeli Sales Amount (w kontekście filtru) przez to samo wyrażenie w zmodyfikowanym kontekście filtru. Jest to funkcja CALCULATE, która modyfikuje kontekst filtru przy użyciu funkcji REMOVEFILTERS, która jest funkcją modyfikującą filtr. Usuwa filtry z kolumny Kanał tabeli Zamówienia sprzedaży.

Poniższa tabela Customer (Klient) tabela obliczeniowa definicji kolumny klasyfikuje klientów do klasy lojalnościowej. Jest to bardzo prosty scenariusz: gdy przychody generowane przez klienta są mniejsze niż 2500 USD, są klasyfikowane jako Niskie; w przeciwnym razie są wysokie.

Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

W tym przykładzie kontekst wiersza jest konwertowany na kontekst filtru. Jest to nazywane przejściem kontekstu. Funkcja ALLEXCEPT usuwa filtry ze wszystkich kolumn tabeli Customer z wyjątkiem kolumny CustomerKey.

Kontekst filtru
Kontekst wiersza
CALCULATETABLE, funkcja
Funkcje filtrowania