CALCULATE

Oblicza wyrażenie w zmodyfikowanym kontekście filtru.

Uwaga

Dostępna jest również funkcja CALCULATETABLE. Wykonuje dokładnie te same funkcje z tą różnicą, że modyfikuje kontekst filtru stosowanego do wyrażenia, które zwraca obiekt tabeli.

Składnia

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

Parametry

Termin Definicja
expression Wyrażenie, które ma zostać obliczone.
filtr1, filtr2, … (Opcjonalnie) Wyrażenia logiczne lub wyrażenia tabeli, które definiują filtry lub funkcje modyfikujące filtr.

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

Filtry mogą być następujące:

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

Jeśli istnieje wiele filtrów, można je ocenić za pomocą operatora logicznego AND (&&), co oznacza,że wszystkie warunki muszą mieć wartość TRUE lub operator logiczny OR (||), co oznacza, że każdy warunek może mieć wartość true.

Wyrażenia filtru logicznego

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

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

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

  • Nie mogą używać funkcji, które skanują lub zwracają tabelę, chyba że zostaną przekazane jako argumenty do funkcji agregacji.
  • Mogą one 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 częściej jest to funkcja zwracająca obiekt tabeli. Można użyć funkcji FILTER, aby zastosować złożone warunki filtru, w tym te, które nie mogą być zdefiniowane przez wyrażenie filtru logicznego.

Funkcje modyfikujące filtr

Funkcje modyfikujące filtry umożliwiają nie tylko dodawanie filtrów. Zapewniają one dodatkową kontrolę podczas modyfikowania kontekstu filtru.

Funkcja Przeznaczenie
REMOVEFILTERS Usuń wszystkie filtry lub filtry z co najmniej jednej kolumny tabeli bądź ze wszystkich kolumn jednej tabeli.
ALL 1, ALLEXCEPT, ALLNOBLANKROW Usuń filtry z co najmniej jednej kolumny lub ze wszystkich kolumn jednej tabeli.
KEEPFILTERS Dodaj filtr bez usuwania istniejących filtrów w tych samych kolumnach.
USERELATIONSHIP Włącz nieaktywną relację między powiązanymi kolumnami. W takim przypadku aktywna relacja stanie się automatycznie nieaktywna.
CROSSFILTER Modyfikuj kierunek filtrowania (z obu na pojedynczy lub z pojedynczego na oba) lub wyłącz relację.

1 Funkcja ALL i jej warianty działają zarówno jako modyfikatory filtru, jak i jako funkcje, które zwracają obiekty tabeli. Jeśli funkcja REMOVEFILTERS jest obsługiwana przez narzędzie, lepiej jest używać go do usuwania filtrów.

Wartość zwracana

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

Uwagi

  • Gdy są podane wyrażenia filtru, funkcja CALCULATE modyfikuje kontekst filtru, aby ocenić wyrażenie. 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 znajdują się w kontekście filtru, nowe filtry zostaną dodane do kontekstu filtru, aby obliczyć wyrażenie.
    • Jeśli kolumny (lub tabele) znajdują się już w kontekście filtru, istniejące filtry zostaną zastąpione przez nowe filtry w celu oceny wyrażenia funkcji CALCULATE.
  • Funkcja CALCULATE używana bez filtrów osiąga określone wymaganie. Przekształca kontekst wiersza na kontekst filtru. Jest to wymagane, gdy wyrażenie (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 zauważyć, że gdy miara modelu jest używana w kontekście wiersza, przekształcenie kontekstu odbywa się automatycznie.

  • Ta funkcja nie jest obsługiwana w trybie DirectQuery, gdy jest używana w kolumnach obliczeniowych lub regułach zabezpieczeń na poziomie wiersza (RLS).

Przykłady

Następująca definicja miary tabeli Sales generuje wynik przychodu, ale tylko dla produktów, które mają kolor niebieski.

Przykłady w tym artykule można dodać do przykładowego modelu programu Power BI Desktop. Aby uzyskać model, zobacz Przykładowy model DAX.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Kategoria Kwota sprzedaży Przychód niebieski
Accessories 1 272 057,89 USD 165 406,62 USD
Rowery 94 620 526,21 USD 8 374 313,88 USD
Odzież 2 117 613,45 USD 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 USD

Funkcja CALCULATE oblicza sumę kolumny Sales Amount tabeli Sales w zmodyfikowanym kontekście filtru. Nowy filtr zostanie dodany do kolumny Color tabeli Product — lub filtr zastąpi wszystkie filtry, które zostały już zastosowane do kolumny.

Następująca definicja miary tabeli Sales tworzy stosunek sprzedaży względem sprzedaży dla wszystkich kanałów sprzedaży.

Kanał Kwota sprzedaży Udział % kanału w łącznym przychodzie
Internet 29 358 677,22 USD 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, które sumuje wartość kolumny Sales Amount tabeli Sales (w kontekście filtru) według tego samego wyrażenia w zmodyfikowanym kontekście filtru. Jest to funkcja CALCULATE, która modyfikuje kontekst filtru przy użyciu funkcji REMOVEFILTERS, która jest funkcją modyfikatora filtru. Usuwa filtry z kolumny Channel tabeli Sales Order.

W poniższej tabeli Customer definicja kolumny obliczeniowej klasyfikuje klientów w klasy lojalnościowe. Jest to bardzo prosty scenariusz: gdy dochody generowane przez klienta są mniejsze niż 2500 USD, są one klasyfikowane jako Low (Niskie), a w przeciwnym razie są High (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 przekształceniem kontekstu. Funkcja ALLEXCEPT usuwa filtry ze wszystkich kolumn tabeli Customer z wyjątkiem kolumny CustomerKey.

Zobacz też

Kontekst filtru
Kontekst wiersza
CALCULATETABLE, funkcja
Funkcje filtrowania