Podświetlenie filtrowanej wartości

Tworząc nowy raport w pracy spotkałem się z wymaganiem, aby po wybraniu wartości fragmentatorem jedna z wizualizacji nie filtrowała się, a jedynie podświetlała wybraną wartość, gdy reszta wizualizacji miała zostać przefiltrowana. Nie byłoby w tym żadnego problemu, gdybym mógł się posłużyć wizualizacją tabeli i ustawieniem interakcji pomiędzy wizualizacjami na filtrowanie/podświetlanie, jednak wymaganie mówiło jasno – fragmentator ma podświetlać wybrane dane. Aby to lepiej zobrazować spójrzmy na poniższy przykład.
Po wybraniu roku 2014 (1) wykres Sales in time nie filtruje się, a jedynie podświetla wartość dla roku 2014, natomiast inne wizualizacje automatycznie się filtrują. Rozwiązanie na pozór wydaje się być skomplikowane, jednak przy wykorzystaniu DAX i synchronizacji filtrów da się je opracować w kilka minut. Przyjrzyjmy się temu krok po kroku.

Opracowanie

Pierwszym krokiem będzie utworzenie tabeli w DAX, która będzie zawierała wartości będące wsadem do naszego fragmentatora, czyli krótko mówiąc czym chcemy filtrować – w moim przypadku rok kalendarzowy. Funkcja DAX wygląda następująco:
SelectedYear =
ALL(
'Date'[Calendar Year],
'Date'[Year Number]
)

Nie musimy się przejmować brakiem jakichkolwiek relacji pomiędzy utworzoną tabelą, a tabelą kalendarzową.

Kolejnym krokiem będzie utworzenie odpowiedniej miary, która na podstawie naszego wyboru dobierze odpowiedni kolor dla serii danych. Zrzut poniżej pokazuje całą funkcję. Rozłóżmy ją na części pierwsze:
  • _selectedyears – służy otrzymaniu wszystkich unikatowych wartości Calendar Year;
  • _yeartohighlight – służy do określenia, która z wybranych fragmentatorem wartości powinna zostać podświetlona (jest to kolumna wykorzystywana również w serii danych wykresu)
  • _filtered – sprawdza czy niepołączona tabela jest filtrowana (zależnie od wykonywanej akcji)
  • _result – wyrażenie logiczne, które mówi, że jeśli wartości są filtrowane to wykorzystaj kolor #F1C917 (żółty), natomiast w przypadku gdy nie są wykorzystaj kolor #117D40 (zielony).
Następnie zaznaczyłem wykres Sales in time, i w opcjach formatowania (1) wybrałem kolory serii (2). Zauważ, że w polu default color jest możliwość wykorzystania funkcji. Pojawi się wtedy okno, w którym możemy wybrać funkcję określającą kolor serii danych – wybierz utworzoną miarę BarToHighlight (3).

Wizualizacja

Teraz wystarczy tylko wykorzystać jeden fragmentator do podświetlania danych, natomiast drugi do filtrowania lat.  Beznadzieja, prawda? Po co używać dwóch fragmentatorów do tego samego typu danych? Aby wyeliminować ten problem skorzystamy z funkcjonalności synchronizacji fragmentatorów. Utworzyłem dwa fragmentatory: Pick year oraz Highlight. Pierwszy z nich odpowiada za filtrowanie roku na wszystkich wizualizacjach, poza wykresem kolumnowym Sales in time. Aby wyłączyć filtrowanie wykresu, edytowałem interakcje pomiędzy fragmentatorem, a wykresem (zaznaczyłem fragmentator (1), a następnie we wstążce Format (2) wybrałem funkcję Edit interactions i wyłączyłem możliwość filtrowania wykresu (3). Kolejnym krokiem było ustawienie synchronizacji filtrów. Aby to zrobić, udaj się do wstążki View i wybierz Sync slicers. Otworzy to panel synchronizacji (4). Zaznacz fragmentator, który chcesz synchronizować (w moim przypadku Pick year) i w zaawansowanych wpisz nazwę grupy do synchronizacji. Swoją grupę w tym przypadku nazwałem Highlight. Następnie udałem się do fragmentatora Highlight i również dla niego wpisałem nazwę grupy highlight. Dzięki temu moje dwa fragmentatory zostały ze sobą połączone. Ostatnim krokiem było ukrycie fragmentatora Highlight. W tym celu we wstążce View wybrałem Selection, aby otworzyć panel zaznaczenia i następnie wyłączyłem widoczność fragmentatora Highlight (5).
Rozwiązanie gotowe! Od teraz fragmentator Pick year będzie podświetlał wybrany rok na wykresie kolumnowym, a pozostałe wizualizacje zostaną przez niego przefiltrowane.

Interesujący artykuł? Podaj dalej!