Modyfikowanie kontekstu filtru
Funkcja języka DAX umożliwia CALCULATE
modyfikowanie kontekstu filtru w formułach. Jej składnia jest następująca:
CALCULATE(<expression>, [[<filter1>], <filter2>]…)
Funkcja wymaga przekazania wyrażenia zwracającego wartość skalarną. Można jej również przekazać dowolną liczbę filtrów. Wyrażenie może być miarą (czyli wyrażeniem o nadanej nazwie) lub dowolnym wyrażeniem, które można ocenić w kontekście filtru.
Filtry mogą być wyrażeniami warunkowymi lub wyrażeniami tabel. Istnieje również możliwość przekazania funkcji modyfikacji filtru, które zapewniają dodatkową kontrolę podczas modyfikowania kontekstu filtru.
Jeśli masz wiele filtrów, są one oceniane przy użyciu operatora logicznego AND
, co oznacza, że wszystkie warunki muszą być TRUE
jednocześnie spełnione.
Uwaga
Funkcja CALCULATETABLE
języka DAX wykonuje dokładnie te same funkcje co CALCULATE
funkcja, z tą różnicą, że modyfikuje kontekst filtru zastosowany do wyrażenia zwracającego obiekt tabeli. W tym module objaśnienia i przykłady korzystają z CALCULATE
funkcji, ale pamiętaj, że te scenariusze mogą być również stosowane do CALCULATETABLE
funkcji.
Stosowanie filtrów wyrażeń warunkowych
Filtr wyrażenia warunkowego jest wyrażeniem, które daje w wyniku wartość TRUE
lub FALSE
. Filtry warunkowe muszą spełniać poniższe zasady:
- Mogą odwoływać się tylko do jednej kolumny.
- Nie mogą odwoływać się do miar.
- Nie mogą używać funkcji, które skanują lub zwracają tabelę zawierającą funkcje agregacji, takie jak
SUM
.
W tym przykładzie utworzysz miarę. Najpierw pobierz i otwórz plik Adventure Works DW 2020 M06.pbix. Następnie dodaj następującą miarę do tabeli Sales (Sprzedaż ), która filtruje miarę Revenue (Przychód ) przy użyciu filtru wyrażenia logicznego dla produktów czerwonych.
Revenue Red = CALCULATE([Revenue], 'Product'[Color] = "Red")
Dodaj miarę Revenue Red (Przychód czerwony) do wizualizacji tabeli, która znajduje się na stronie 1 raportu.
W następnym przykładzie poniższa miara filtruje miarę Revenue, wyszukując kilka kolorów. Zwróć uwagę na użycie IN
operatora, po którym następuje lista wartości kolorów.
Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})
Poniższa miara filtruje miarę Revenue, wyszukując drogie produkty o cenie katalogowej większej niż 1000 USD.
Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)
Stosowanie filtrów wyrażeń tabel
Filtr wyrażenia tabeli stosuje jako filtr obiekt tabeli. Może to być odwołanie do tabeli modelu, najczęściej jednak jest to funkcja DAX zwracająca obiekt tabeli.
Często używasz FILTER
funkcji języka DAX do stosowania złożonych warunków filtrowania, w tym tych, których nie można zdefiniować za pomocą wyrażenia filtru logicznego. Funkcja FILTER
jest klasowana jako funkcja iteratora, więc należy przekazać tabelę lub wyrażenie tabeli oraz wyrażenie do obliczenia dla każdego wiersza tej tabeli.
Funkcja FILTER
zwraca obiekt tabeli z dokładnie taką samą strukturą jak przekazana przez tabelę. Jego wiersze są podzbiorem tych wierszy, które zostały przekazane, co oznacza wiersze, w których wyrażenie zostało obliczone jako TRUE
.
W poniższym przykładzie pokazano wyrażenie filtru FILTER
tabeli, które używa funkcji :
Revenue High Margin Products =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[List Price] > 'Product'[Standard Cost] * 2
)
)
W tym przykładzie FILTER
funkcja filtruje wszystkie wiersze tabeli Product, które są w kontekście filtru. W przefiltrowanej tabeli wyświetlane są wiersze wszystkich produktów, których cena katalogowa przekracza podwójny koszt standardowy. W związku z tym miara Revenue jest oceniana dla wszystkich produktów zwracanych przez FILTER
funkcję.
Wszystkie wyrażenia filtru przekazywane do CALCULATE
funkcji to wyrażenia filtru tabeli. Wyrażenia filtrów warunkowych to skrócona notacja, ułatwiająca pisanie i odczytywanie kodu. W rzeczywistości usługa Microsoft Power BI zamienia wyrażenia filtrów warunkowych na wyrażenia filtrów tabel — tak jak definicję miary Revenue Red.
Revenue Red =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[Color] = "Red"
)
)
Zachowanie filtrów
Podczas dodawania wyrażeń filtru CALCULATE
do funkcji występują dwa możliwe wyniki standardowe:
- Jeśli kolumny (lub tabele) nie są w kontekście filtru, nowe filtry zostaną dodane do kontekstu filtru w celu oceny
CALCULATE
wyrażenia. - Jeśli kolumny (lub tabele) są już w kontekście filtru, istniejące filtry zostaną zastąpione przez nowe filtry w celu oceny
CALCULATE
wyrażenia.
W poniższych przykładach pokazano, jak działa dodawanie wyrażeń filtru CALCULATE
do funkcji.
Uwaga
W przykładach nie zastosowano żadnych filtrów do wizualizacji tabeli.
Tak jak w poprzednim ćwiczeniu, do wizualizacji tabeli grupującej produkty według regionu i wyświetlającej przychód dodano miarę Revenue Red.
Ponieważ w kolumnie Color (Kolor ) w tabeli Product (Produkt ) nie zastosowano żadnego filtru, ocena miary dodaje nowy filtr do kontekstu filtru. Wartość 2 681 324,79 $ w pierwszym wierszu to przychód ze sprzedaży czerwonych produktów w Australii.
Przełączenie pierwszej kolumny wizualizacji tabeli z Regionu na Kolor spowoduje wygenerowanie innego wyniku, ponieważ kolumna Color w tabeli Product znajduje się teraz w kontekście filtru.
Formuła miary Revenue Red oblicza miarę Revenue (Przychód ) przez dodanie filtru w kolumnie Color (kolor czerwony) w tabeli Product . W związku z tym w wizualizacji grupującej produkty według koloru formuła miary zastępuje kontekst filtru nowym filtrem.
Taki rezultat może nie być pożądany. W następnej lekcji przedstawiono KEEPFILTERS
funkcję języka DAX, która jest funkcją modyfikacji filtru, której można użyć do zachowania filtrów, a nie ich zastąpienia.