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ć 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 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 elementy:
- Nie mogą używać funkcji, które skanują lub zwracają tabelę, chyba że są przekazywane 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 modyfikatora filtrów umożliwiają wykonywanie więcej niż 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. |
WSZYSTKIE1, 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 mogą być używane z przykładowym modelem Power BI Desktop Adventure Works DW 2020. Aby uzyskać model, zobacz przykładowy model języka 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