DAX – ISFILTERED, ISCROSSFILTERED

W DAX Istnieją dwie specjalne funkcje pozwalające sprawdzić mechanizm propagowania kontekstu filtra chodzi mianowicie o ISFILTERED oraz ISCROSSFILTERED, które chciałbym opisać w niniejszym artykule.

Wspomniane funkcje działają następująco:

  • ISFILTERED – zwraca TRUE lub FALSE w zależności czy kolumna przekazana jako argument jest bezpośrednio filtrowana
  • ISCROSSFILTERED – zwraca TRUE lub FALSE w zależności od tego czy kolumna przekazana jako argument jest filtrowana z powodu automatycznej propagacji filtra

Sprawdźmy ich działanie co pozwoli lepiej zrozumieć propagację filtra. Poniżej przedstawione zostały dwie miary sprawdzające kontekst wykonania oraz wynik ich działania w tabeli przestawnej. W wierszach tejże tabeli umieszczona została kolumna Size, a w fragmentatorze natomiast kolumna Color.

Jak można zauważyć kolumna Color nie jest w żaden sposób filtrowana ani na poziomie wierszy, ani na poziomie Grand Total tabeli przestawnej. Nie zmienia tego fakt, iż w fragmentatorze znajdują się wartości właśnie tej kolumny – dzieje się tak ze względu na to, że nie została wybrana żadna konkretna wartość tylko wszystkie – co jest równe z brakiem filtracji.

Inaczej ma się sprawa z kolumną Size, która na poziomie wierszy jest filtrowana przez konkretną wartość tegoż wiersza. Na poziomie Grand Total stworzona miara zwraca FALSE ponieważ tak naprawdę żaden filtr tam nie występuje i jest to agregacja wszystkich wartości atrybutu Size. W przypadku gdy zaznaczona zostanie wartość we fragmentatorze funkcja ISFILTERED wyniki prezentują się następująco:

Tym razem kolumna kolor została teraz przefiltrowana zarówno na poziomie wierszy (ponieważ wyświetlana teraz jest wartość dla wszystkich rozmiarów, które nie są czarne) jak i na poziomie Grnad Total ponieważ agregacja wyświetlana w tym miejscu pokazywała by wartość dla wszystkich rozmiarów oraz wszystkich kolorów nie licząc koloru czarnego. Jeśli chodzi o kolumnę Size to jest ona filtrowana tak jak poprzednio tj. poziom wierszy jest filtrowany przez atrybut umieszczony w sekcji wierszy natomiast podsumowanie nie jest bezpośrednio filtrowane.

ISCROSSFILTERED z kolei służy do identyfikacji tego czy filtr został przekazany w sposób niebezpośredni. Tak wiec stworzono dwie kolejne miary

Wynik działania powyższych formuł został dodany do testowej tabeli przestawnej.

Jak widać miara IsColorCrossFiltered przyjmuje wartość TRUE ponieważ na poziomie wiersza wartość została zmieniona niebezpośrednio przez znajdujące się w wierszach wartości kolumny Size.

Do czego przydatne są tego typu funkcje? Dzięki nim możemy zdeterminować czy użytkownik przefiltrował jakieś pole czy też nie np. w przypadku gdy mamy do czynienia z semiaddytywnymi lub nieaddytywnymi miarami możemy zaszyć w nich logikę, iż coś musi zostać wybrane aby wyświetlić wartość – w takim przypadku funkcja ISFILTERED może okazać się niezbędna. Takich scenariuszy z całą pewnością znajdziecie całkiem sporo, a znajomość przedstawionych funkcji może okazać się przydatna.

Adrian Chodkowski
Follow me

Adrian Chodkowski

SQL geek, Data enthusiast, Consultant & Developer
Adrian Chodkowski
Follow me

Leave a Comment

Your email address will not be published. Required fields are marked *