Dynamiczny tytuł i wartość osi w Power BI
Power BI to potężne narzędzie do analizy danych, które pozwala na tworzenie interaktywnych raportów i wizualizacji. Jednym z kluczowych elementów poprawiających użyteczność raportów jest dynamiczny tytuł osi i tytułów na wykresach, tabelach czy całych stronach raportów, który dostosowuje się do wyborów użytkownika, takich jak filtry czy fragmentatory. W tym artykule omówimy, jak stworzyć taki dynamiczny tytuł osi w Power BI, wykorzystując wyrażenia DAX i parametry pól.
W tradycyjnych raportach Power BI tytuły osi są statyczne, co oznacza, że nie zmieniają się w zależności od interakcji użytkownika z raportem. Dynamiczne tytuły osi pozwalają na automatyczne dostosowanie tytułu do aktualnego kontekstu, co zwiększa przejrzystość i użyteczność raportu.
Raport powinien spełniać trzy cechy:
Powinien być:
1. Funkcjonalny
2. Czytelny
3. Interaktywny
Można by przytoczyć powiedzenie „Drogi użytkowniku wybierz sobie dwa z trzech”, ale wtedy nasz raport albo nie będzie funkcjonalny albo czytelny albo interaktywny. Zastanówmy się więc, dlaczego w ogóle warto zadbać o interaktywność raportu – w tym przypadku skupiając się na dynamicznych tytułach.
Przede wszystkim pozwoli to na lepszą interpretacje danych – użytkownicy będą mogli łatwiej zrozumieć, jakie dane są aktualnie wyświetlane, bez konieczności analizowania całego raportu. Ważnym aspektem jest fakt, że raporty stają się bardziej interaktywne i responsywne na działania użytkownika, co wpływa na jakość raportu. Nie zapomnijmy też o oszczędności czasu, którego nie tracimy na ręczne dostosowywanie tytułów, co oszczędza czas i redukuje potencjalne błędy.
Przykładowo zastosować dynamiczny tytuł osi można, w raporcie sprzedaży gdzie będzie zmieniać się, w zależności od wybranego regionu, kategorii lub produktu, co pozwala na szybkie zrozumienie kontekstu danych.
Kolejnym biznesowym zastosowaniem może być raport finansowy, gdzie może wskazywać na wybrany rok, kwartał lub miesiąc, ułatwiając analizę danych w czasie. Natomiast w świecie HR może zmieniać się w zależności od wybranego działu, stanowiska lub lokalizacji, co pozwala na precyzyjną analizę danych kadrowych.
Scenariuszy wykorzystania jest wiele i z pewnością każdy ma inny pomysł na wykorzystanie takich funkcjonalności.
Po krótkim wstępie przejdźmy zatem do napisania kilku miar w DAX, za pomocą których spróbujemy „ożywić raport” interaktywnymi tytułami. Na tym etapie warto się zaprzyjaźnić z takimi funkcjami jak SELECTEDVALUE czy CONCATENATEX, za pomocą których pobierzemy dynamiczne dane z kontekstu filtra na raporcie. Nie możemy także zapomnieć o obsłudze różnych scenariuszy czyli funkcje logiczne jak IF czy SWITCH także będą bardzo pomocne.
Domyślnym ustawieniem tabel czy wykresów w Power BI Desktop są statyczne osie i tytuły. Nie robiąc za wiele możemy bez trudu uzyskać taki efekt jak poniżej gdzie mamy dwa fragmentatory do przefiltrowania danych na raporcie oraz wykres kolumnowy prezentujące dane, Proszę zwrócić uwagę, że na raporcie został założony filtr na wartości sprzedaży oraz nie filtrujemy danych po kontynencie czyli dane dotyczą wszystkich krajów. Na raporcie wykres dane prezentuję poprawnie ale niestety z tytułów i osi nie wynika czego te dane dotyczą. Gdybym zastosował np. zakładki w celu ukrycia panelu z filtrami kontekst tych danych nie byłby jasny dla odbiorcy.
Poniżej widać, że dane na tytułach i osiach są statyczne.
Jako twórca takiego raportu chciałbym aby tytuły i osie były dynamiczne i pobierały kontekst z raportu czyli w tym przypadku z zastosowanych filtrów wpływających na prezentowane dane.
Dla przykładu oczekuję aby tytuł wykresu pokazywał dynamicznie co jest zaznaczone na dwóch fragmentatorach. Spróbujmy zastanowić się jak utworzyć miarę, która zwróci tekst „Wartość sprzedaży* dla krajów i w tym miejscu wymienić po przecinku nazwy krajów**”
*to wartość z drugiego fragmentatora
** to wartość z pierwszego fragmentatora
Aby wykonać pierwszą część tytułu użyjemy funkcji DAX – SELECTEDVALUE, która zwróci jedną odfiltrowaną wartość. Projektuje raport w ten sposób, że użytkownik będzie mógł wybrać do analizy tylko jeden typ agregacji i będą to Koszty, Zyski lub Wartości sprzedaży, które są w tabeli.
Druga część tytułu chciałbym aby zwracała nazwy krajów w bieżącym kontekście filtra na raporcie, które są odfiltrowane za pomocą fragmentatora z kontynentem. Proszę zwrócić uwagę, że nazwy krajów się powtarzają dlatego, że sprzedaże prowadzimy w różnych regionach. Nie mogę na tytule powtórzyć nazwy kraju dlatego w celu zwrócenia tabeli z unikatowymi wartościami skorzystam z funkcji DISTINCT.
Unikatową tabelę, która zwróci funkcja DISTINCT podstawię do CONCATENATEX, która jak każda funkcja iteracyjna przeskanuję ją po każdym wierszu (w tym przypadku unikatowych wartości) i połączy nazwy krajów, które są odfiltrowane na raporcie. W dalszej części kodu funkcja sortuję według wybranej miary malejąco.
W celu utworzenia takiej miary, którą wykorzystam jako dynamiczny tytuł wykresu napisałem wyrażenia za pomocą DAX:
A Tytuł wykresu v1 =
SELECTEDVALUE('Typ agregacji'[Typ]) & -- Zwraca wybrany typ obliczenia
" dla obszarów " &
CONCATENATEX( -- Zwraca nazwy krajów w bieżącym kontekście
DISTINCT(DimObszarSprzedazy[Kraj]),
DimObszarSprzedazy[Kraj],
", ",
[$ Wybrana miara],DESC
)
Gdy miara już modelu jest utworzona pozostaje wyświetlić ją jako tytuł wykresu – wykorzystam do tego formatowanie warunkowe tytułu wizualizacji.
Efekt tego formatowania jest widoczny poniżej:
Tytuł wyświetla wybrany typ agregacji (SELECTEDVALUE) oraz nazwy krajów w kolejności występowania na wykresie.
Można by się pokusić o lekką modyfikację tej miary ponieważ działa ona w ten sposób, że gdy użytkownik wybierze jakąkolwiek wartość na kontynencie to łączą się nazwy krajów i to jest prawidłowe. Ale gdy nie wybierze nic to pojawią się wszystkie nazwy.
Gdyby tych wartości było np. 40 to nasz tytuł nie byłby funkcjonalny. W takim przypadku chciałbym aby wyświetlił się komunikat „Wszystkie kraje”.
Mam zatem dwa scenariusze. W pierwszym jest filtr na raporcie i łączysz nazwy kraju, natomiast w drugim gdy nic nie zaznaczymy na kontynencie pokazujesz „Wszystkie kraje”.
Do utworzenia takiej logiki skorzystam z funkcji IF aby zbudować dwa warunki oraz ISFILTERED aby sprawdzić czy jest filtr na raporcie. Zmodyfikuję zatem poprzednią miarę w sposób jak poniżej:
A Tytuł wykresu v2=
SELECTEDVALUE('Typ agregacji'[Typ]) &
" dla obszarów " &
IF(
ISFILTERED(DimObszarSprzedazy[Kontynent]),
CONCATENATEX(
DISTINCT(DimObszarSprzedazy[Kraj]),
DimObszarSprzedazy[Kraj],
", ",
[$ Wybrana miara],DESC
),
"Wszystkie kraje"
)
Różnica między tymi miarami będzie taka, że gdy założymy filtry na kontynencie miary zachowają się identycznie:
Ale gdy filtr nie zostanie zastosowany pierwsza miara wymieni wszystkie kraje, a druga zwróci wartość z trzeciego argumentu funkcji IF.
Implementując w ten sposób logikę można w podobny sposób prezentować dynamiczne dane na wykresach czy całych stronach raportu. Niezbędna jest nam do tego znajomość języka DAX, która daje nam nieograniczone możliwości. Tylko w tym przykładzie skorzystaliśmy z wielu skomplikowanych teorii tego języka jak kontekst filtra, iteracja czy przejście kontekstu. Zdecydowanie warto poświęcić trochę czasu aby świadomie pracować z tym tematem.
Kolejnym przykładem (trochę uproszczonym) do zastosowania dynamicznych danych na tytułach czy osiach będzie wykorzystanie parametru pola, który całą „czarną robotę” wykona za nas. Jak się łatwo domyśleć, niestety nie będziemy mieli za dużej możliwości manipulacji tymi rozwiązaniami więc albo bierzemy „z pudełka” to co nam parametr daje albo nie bierzemy nic.
Utwórzmy parametr pola z kolumn kontynent, kraj i kategoria.
Na karcie modelowanie w Power BI Desktop można w bardzo intuicyjny sposób taki parametr pola utworzyć z interfejsu programu.
Teraz wystarczy wykorzystać parametr na tabeli, wykresie lub fragmentatorze.
Proszę zwrócić uwagę, że tytuły zmieniają się zgodnie z tym co filtrujemy oraz dodatkowo tytuły osi także prezentują aktualnie wyfiltrowaną wartość.
Ostatnim elementem, który warto zaznaczyć jest to, że w Power BI tytuły osi są statyczne i nie można ich formatować warunkowo. Ale jak stare powiedzenie mówi, że potrzeba matką wynalazków, to można utworzyć pole tekstowe z dynamicznymi wartościami i pokazać w miejscu statycznej osi aby zmieniała się kontekstowo do raportu. Podpowiedź – przydatna do tego będzie funkcja SELECTEDVALUE oraz wartość na polu tekstowym. Zachęcam do przetestowania czyli napisania miary zwracającej dynamicznie wartość (np. nazwę kontynentu) i podpięcie jej w zaznaczonym miejscu poniżej.
Powodzenia😊
Oczekiwany efekt, który możemy uzyskać wygląda jak poniżej:
Podsumowując dynamiczne tytuły osi w Power BI to przydatna funkcjonalność, która zwiększa interaktywność i użyteczność raportów. Dzięki wykorzystaniu DAX i parametrów pól, możemy tworzyć raporty, które automatycznie dostosowują się do wyborów użytkownika, co ułatwia analizę danych i podejmowanie decyzji.
Na koniec kilka przydatnych wskazówek i często popełnianych błędów aby ich uniknąć:
- Brak obsługi wartości pustych: Używaj funkcji takich jak SELECTEDVALUE z wartością domyślną, aby obsłużyć przypadki, gdy nie ma wybranego elementu. Funkcja ta jako ostatni argument wyświetla wartość domyślną.
- Zbyt skomplikowane miary: Staraj się, aby miary były proste i czytelne, co ułatwi ich późniejsze modyfikacje.
- Brak testów: Regularnie testuj raporty, aby upewnić się, że dynamiczne tytuły działają poprawnie w różnych scenariuszach.