CALCULATE
Dotyczy:kolumna obliczeniowa
tabela obliczeniowa
Miara
wizualizacji
Oblicza wyrażenie w zmodyfikowanym kontekście filtru.
Nuta
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 |
---|---|
expression |
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życiuoperatora logicznego
Wyrażenia filtru warunkowego
Filtr wyrażenia warunkowego jest wyrażeniem, które daje w wyniku TRUE
lub FALSE
. 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żeń tabeli stosuje obiekt tabeli jako filtr. 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.
Funkcja | Cel |
---|---|
REMOVEFILTERS | Usuń wszystkie filtry lub filtry z co najmniej jednej kolumny tabeli lub ze wszystkich kolumn pojedynczej tabeli. |
ALL 1, ALLEXCEPT, ALLNOBLANKROW | Usuń filtry z co najmniej jednej kolumny lub ze wszystkich kolumn pojedynczej tabeli. |
KEEPFILTERS | 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. |
CROSSFILTER | 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 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 obliczenia 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. Ten scenariusz może wystąpić w formule kolumny obliczeniowej lub w przypadku obliczenia wyrażenia w funkcji iteratora. 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 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 Adventure Works DW 2020 Power BI Desktop. Aby uzyskać model, zobacz DAX przykładowy model.
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 |
łączna | $109,809,274,20 | $9,602,850,97 |
Funkcja CALCULATE oblicza sumę tabeli SalesSales Amount w zmodyfikowanym kontekście filtru. Nowy filtr zostanie dodany do tabeli ProductColor — lub filtr zastępuje wszystkie filtry, które zostały już zastosowane do kolumny.
Poniższa definicja miary tabeli Sales generuje stosunek sprzedaży w stosunku do sprzedaży dla wszystkich kanałów sprzedaży.
Kanał | Kwota sprzedaży | Przychód % łączny kanał |
---|---|---|
Internet | $29,358,677,22 | 26.74% |
Sprzedawcy | 80 450 596,98 USD | 73.26% |
łączna | $109,809,274,20 | 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 tabelę SalesSales Amount wartość kolumny (w kontekście filtru) przy użyciu 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 filtrów. Usuwa filtry z tabeli Sales OrderChannel kolumny.
W poniższej tabeli Customer definicja kolumny obliczeniowej klasyfikuje klientów do klasy lojalnościowej. Jest to bardzo prosty scenariusz: gdy przychody generowane przez klienta są mniejsze niż 2500 USD, są one klasyfikowane jako Low; w przeciwnym razie są high.
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.
Powiązana zawartość
funkcja