Power BI jest narzędziem, które zapewnia dosyć wysoką dawkę interakcji z użytkownikiem. Zdarza się jednak, że użytkownicy chcą abyśmy dodali coś niestandardowego co nada większego dynamizmu do naszych wizualizacji. Bardzo często jednym z takich wymogów jest dynamiczne podstawianie konkretnych wartości pod osie wykresów. O co właściwie chodzi? Postaram się to przedstawić w dalszej części niniejszego artykułu do lektury którego serdecznie zapraszam (jeśli jesteś chcesz wiedzieć jak osiągnąć ten efekt przy użyciu DAX i M zapraszam tutaj).
W ramach wstępu powiedzmy sobie parę słów o przykładowym scenariuszu z którym mamy do czynienia. Wyobraźmy sobie sytuację, że mamy wykresy kolumnowy, a na nim wartość sprzedaży po latach – może on przypominać ten obiekt, który zamieściłem na poniższym zrzucie ekranowym:
Przypuśćmy, że biznes chce mieć możliwość podmiany atrybutu Calendar Year na np. Product Color. Słysząc tego typu oświadczenie naturalną odpowiedzią jaka może nam się nasunąć na myśli to prosta technika “przeciągnij upuść”, która sprowadza się do tego, że użytkownik edytując raport sam sobie podmieni atrybut na taki jaki mu odpowiada:
Podejście to ma dwie zasadnicze wady. Pierwszą z nich jest to, że użytkownik w takim przypadku musi mieć prawo do edycji raportu co może być uciążliwe zarówno pod kątem licencjonowania jak i ustalonego schematu pracy z raportem. Drugą z kolei jest niekiedy niechęć ze strony użytkowników, którzy przyzwyczajeni do raportowania, które nie ma z samoobsługą za wiele do czynienia chcą mieć wszystko przygotowane przez odpowiedzialnych za to ludzi. Co więc możemy począć gdy usłyszymy tego typu wymóg, a edycja raportu nie wchodzi w grę? Możemy przygotować predefiniowany zbiór atrybutów mogących znaleźć się na osi wykresu używając Bookmarks!
Przejdźmy zatem do pracy i spróbujmy coś osiągnąć z wykorzystaniem wspomnianego mechanizmu. W naszym przykładzie będziemy chcieli przełączać się pomiędzy następującymi atrybutami:
- DimDate[CalendarYear]
- DimProduct[Color]
- DimCustomer[Gender]
Myślę, że ten uproszczony scenariusz świetnie zobrazuje tą technikę, ale warto pamiętać o tym, że zawsze możemy użyć znacznie większej ilości atrybutów. Pierwszym krokiem jaki wykonamy jest trzykrotne skopiowanie przedstawionego wcześniej wykresu. Możemy to wykonać każdą znaną nam techniką kopiowania jak chociażby używając CTRL+C /CTRL+V. Po skopiowaniu obiektów nasz raport powinien wyglądać następująco:
Kolejnym krokiem jest zamiana w wykresie numer dwa oraz trzy atrybutów na osi X tak aby mieć sprzedaż per rok, kolor produktu oraz płeć. Myślę, że zadanie to nikomu nie powinno przysporzyć problemów.
Następnym krokiem jest to abyśmy upewnili się, że nasze trzy wykresy mają dokładnie takie same rozmiary. Ze względu na fakt, iż Power BI wpisuje się w standard narzędzi “pixel wise” możemy rozmiar ustalić co do piksela zaznaczając każdy z wykresów i we właściwościach w sekcji General ustalając właściwości Width oraz Height:
Gdy już mamy ustawiony pożądany rozmiar musimy ustawić wizualizacje niejako “jeden na drugim” aby mieć pewność, że ustawiliśmy wszystko co do piksela możemy po raz kolejny ustawić właściwości znajdujące się w General tym razem o nazwie X Position oraz Y Position (one rónież są widoczne na powyższym zrzucie ekranowym) tak aby powstał tego typu miszmasz:
Abyśmy nie pogubili się w gąszczu wykresów możemy włączyć tzw. Selection Pane zaznaczając go ze wstążki na zakładce View skąd będziemy mogli sterować widocznością poszczególnych obiektów:
Mając już trzy wykresy dokładnie w tym samym miejscu możemy dodać zestaw pól tekstowych, które będą pełniły rolę przycisków. W moim przypadku zrobiłem prosty “panel” tak jak zostało to przedstawione na poniższym zrzucie ekranowym (kwestia umiejscowienia i formatowania jest oczywiście otwarta i można to dostosować do swoich potrzeb):
Do przygotowanych przez nas “przycisków” przygotowałem również proste obramowania będące kształtami ze względu na fakt, że do pola tekstowego nie można przypiąć bookmarka, a do kształtu już tak. Na ten moment raport przedstawia się następująco:
Dobrym pomysłem byłoby również wskazanie użytkownikowi, który przycisk został wybrany, w rzeczywistości może to być cokolwiek jak np. symbol strzałki przy wybranym atrybucie. Ja zdecydowałem się na dodanie kolejnego obramowania tym razem o kolorze czerwonym, który będzie dosyć wyraźnie wskazywał co zostało wybrane. Aby umiejscowić wszystko w pożądanym miejscu warto posługiwać się wspomnianą wcześniej zakładką General we właściwościach, a nie metodą przeciągania przede wszystkim dlatego, że w tym miejscu powinniśmy być dokładni aby nic niepotrzebnego nie wystawało i nie psuło całego efektu. Ważne jest to aby dodane obramowania mające być wskaźnikiem selekcji były na wyższej warstwie niż pola tekstowe tak aby dało się w nie kliknąć. Na poniższym zrzucie możecie zauważyć, że pole tekstowe jak i oba obramowania mają dokładnie to samo umiejscowienie i wielkość:
W przypadku nachodzących na siebie wizualizacji warto używać wspomnianego wcześniej Selection Pane bo po pierwsze łatwiej się w nim poruszać, a po drugie niemal niemożliwe jest kliknięcie w konkretny element, który nas interesuje jeśli coś na siebie nachodzi.
Przechodząc dalej, to co teraz musimy zrobić to przypisać do konkretnych pól tekstowych konkretne zakładki definiujące widoczność konkretnych obiektów. Posłuży nam do tego wcześniej włączony Selection Pane oraz Bookmarks Pane, który również możemy włączyć z poziomu wstążki. O tym jak zdefiniować Bookmark pisałem już wcześniej (tutaj) więc nie będę się powtarzał – konkretna konfiguracja przedstawia poszczególnych zakładek przedstawia się następująco:
Ostatnim krokiem jaki nam pozostał jest przypisanie konkretnych bookmarków do poszczególnych kształtów. Aby to zrobić należy odnaleźć dany kształt w Selection Pane i we właściwościach w sekcji Action wybrać odpowiedniego bookmarka:
W tym miejscu ktoś mógłby zadać w pełni uzasadnione pytanie dlaczego nie ponazywałem sobie obiektów jakoś bardziej intuicyjnie. Odpowiedź jest taka, że powinienem to zrobić jednakże okno Selection mi tego nie umożliwia. Mogę jedynie ustawić właściwość Title dla każdego z obiektów bo to właśnie ona jest wyświetlana we wspomnianym oknie (jeżeli w ogóle została ustawiona, jeśli nie to wyświetlana jest nazwa ogólna wskazująca na typ obiektu) i ją wyłączyć, jednakże nie zawsze chce zmieniać tą właściwość bo np. chce aby wykresy jej używały w standardowy sposób i wyświetlały przyjazną użytkownikowi nazwę. Dlatego też pozostawiłem wszystko w domyślnym stanie. Po przypisaniu zakładek nasz raport powinien mieć dosyć ciekawą możliwość interakcji – dokładnie taką jaką chciałem uzyskać:
Nasz cel został wykonany i myślę, że spełniliśmy wymóg stosunkowo małym nakładem pracy. Z punktu widzenia wydajności takiego rozwiązania to oczywiście może być bardzo różnie i wszystko zależy przede wszystkim jakie dane wyświetlamy pod poszczególnymi wykresami. Istnieje jeszcze technika pozwalająca osiągnąć podobny efekt, a opierająca się na odpowiednim zbudowaniu wymiarów w modelu jednakże w moim odczuciu jest ona tak mocno inwazyjna, że pozwoliłem sobie w tym miejscu ją pominąć. Zdaję sobie również sprawę z tego, że to co osiągnęliśmy nie jest tak naprawdę dynamiczną osią, a osobnym obiektem jednakże tzw. użytkownik ma możliwość przełączania atrybutów na osi bez konieczności modyfikacji raportu i w gruncie rzeczy nie jest dla niego istotne w jaki sposób osiągnęliśmy pożądany efekt, a będący pod spodem model pozostał prosty co również nie jest bez znaczenia.
To by było na tyle w tym temacie. W Power BI mamy wiele różnych technik pozwalających osiągnąć ciekawe efekty i myślę, że postaram się z czasem kilka z nich opisać co być może pozwoli Wam je zastosować w praktyce w swoich projektach.
- Avoiding Issues: Monitoring Query Pushdowns in Databricks Federated Queries - October 27, 2024
- Microsoft Fabric: Using Workspace Identity for Authentication - September 25, 2024
- Executing SQL queries from Azure DevOps using Service Connection credentials - August 28, 2024
Always good stuff to be found here. Thanx.