
Zapanuj nad osiami w raporcie Power BI

Wykres powinien być nie tylko łądny czytelny i estetyczny ale także sensowny. A pewnie przede wszystkim sensowny 🙂 Powinien dawać zrozumienie wartości i wyobrażenie zależności pomiędzy danymi. Sam jeden powinien być niezależny i trwały w poglądach. Co to może oznaczać :)? Przeczytaj poniżej.

Na szkoleniach często pytacie jak zapanować nad osiami na wykresie – w taki sposób aby po zmianie filtrowania zakres osi pozostał stały. Dokładnie problem możesz podejrzeć na poniższym rysunku.

Zobacz, że mamy tutaj wykres przedstawiający sprzedaż dla każdej podkategorii i możliwość filtrowania po kategorii produktu.
Odfiltrowując kategorię na fragmentatorze Power BI próbuje zrobić nam uprzejmość i przelicza od nowa maksimum i minimum osi. Tym samym, jeśli nie przyjrzymy się dokładnie wartościom na osi – możemy mieć wrażenie, że sprzedaże w różnych kategoriach są podobne. Jeśli jednak dogłębnie przeanalizujemy wartości – zobaczymy w jak dużym błędzie możemy się znaleźć. Przykładowo po odfiltrowaniu na fragmentatorze kategorii Computers zobaczymy, że wartość sprzedaży w podkategorii Projectors&screens to ponad 1 miliard!
1335000000 +
Na osi Y wykresu…

Po zmianie filtrowania i wyborze kategorii Audio dostajemy na tym samym obszarze roboczym wykres zgodny z poniższym rysunkiem:

Odbiorca takiego raportu może poczuć się wprowadzony w błąd, wręcz czasem zmanipulowany tym co się tutaj zadziało.
Dzisiaj przeprowadzimy Cię krok po kroku przez ustalenie odpowiedniej wartości do maksymalnej wartości dla osi na Twoim wykresie w Power BI.
Zacznijmy od podstaw!
1. Rozwiązanie z czasów młotka i dłuta
Jeśli wiemy, że maksymalna wartość wynosi ok 1,4 mld to możemy taką wartość ustawić w opcjach osi.
Skąd wiemy, że to akurat taka wartość? Możemy oczywiście utworzyć taki raport lub odczytać ad hoc wartość z kolumny:

Power BI umożliwia ustawienie ręczne wartości maksymalnej i minimalnej dla osi wykresu. Możesz to zrobić przechodząc do opcji wizualizacji. Zaznacz zatem wykres, przejdź do opcji formatowania kafelka, do sekcji Wizualizacja a następnie do grupy Oś Y. W ostatnim kroku wpisz wartość 1,5 mld.

Po wpisaniu maksymalnej wartości – niezależnie od wyboru na fragmentatorach Power BI zawsze będzie utrzymywał maksymalną wartość osi jako 1,5 mld.
Głównym minusem tego rozwiązania jest to, że nie jest to rozwiązanie dynamiczne. Jeśli odświeżysz dane i okaże się, że maksymalna wartość sprzedaży w podkategorii wynosi już np. 3 mld. – Power BI nie będzie w stanie wyrysować do końca kolumn i zostaną odcięte na poziomie 1,5 mld. W jaki zatem sposób można podejść do problemu lepiej?
2. Rozwiązanie takie jakie powinno być
W każdym miejscu w Power BI gdzie zobaczysz ikonkę fx możesz skorzystać z wyrażenia w języku DAX (miary), która pozwoli Ci dynamicznie „coś” policzyć. W naszym przypadku tym „czymś” będzie właśnie maksymalna wartość dla osi, a wyznaczymy ją szukając maksymalnej kwoty sprzedaży dla wszystkich podkategorii.
Potrzebujemy zatem utworzyć miarę, która obliczy kwotę sprzedaży dla każdej podkategorii a następnie wyciągnie wartość maksymalną. Miara ta powinna jednocześnie ignorować filtr pochodzący z kategorii (Audio, Cameras and camcorders, Cell phones….). Dlaczego? Ponieważ w przeciwnym wypadku dalej oś tańczyłaby wraz ze zmianami kategorii.
Bardzo dużą częścią pisania kodu w języku DAX (Data Analysis eXpressions) jest odpowiednie manipulowanie filtrami, które są przekazywane w obliczeniach. Developer DAX za każdym razem powinien zastanowić się jakie filtry mogą wpływać na dane obliczenia i czy chce je zatrzymać, zastąpić, usunąć czy też dodać dodatkowy.
W naszym przypadku założymy, że filtrowanie odbywa się jedynie przez kategorię produktu.
Kategoria jest powiązana z podkategorią relacją 1:* zgodnie z poniższym rysunkiem.

Wynika z niego, że filtrując kategorię filtr jest propakowany do podkategorii. Nam zatem zależy na usunięciu filtru z tabeli podkategorie (pokazanie wszystkich podkategorii) w momencie gdy nałożony jest filtr na kategorię. Dzięki temu wyznaczymy zawsze maksymalną wartość osi.
Istnieje wiele sposobów napisania miary, która pozwoli uwzględnić powyższe działanie. Szczegółowe różnice – kiedy używać CALCULATE, kiedy DISTINCT, VALUES, ALL, ALLNOBLANKROW omawiamy na naszym szkoleniu Język DAX.
Utwórzmy zatem miarę:
W tej mierze korzystamy z kilku osobliwych koncepcji języka DAX (iterator, przejście kontekstu, filtr na tabeli a nie na kolumnie). Koncepcje te sprawiają, że język DAX staje się językiem bardzo osobliwym i wymaga dużej dozy praktyki. Trudnością w DAX nie jest nauczenie się dodatkowej funkcji czy też pięciu lecz zrozumienie dlaczego tak a nie inaczej DAX zachowuje się w różnych miejscach. Dopiero łącząc ze sobą wszystkie „kropki” a więc te nieoczywiste koncepcje będziemy w stanie powiedzieć, że umiemy sprawnie budować formuły w DAX. Takie podejście przyświecało nam przy projektowaniu naszych szkoleń – dać zrozumienie co się dzieje w kodzie gdzie i dlaczego 🙂
Zwróć uwagę jaki wynik daje miara w zależności od wybranej kategorii:

Jedyne co pozostało nam do wykonania to podłożenie tej miary do odpowiedniej opcji w maksimum dla osi Y. Aby tego dokonać kliknij przycisk fx widoczny na poniższym rysunku.

W wyświetlonym oknie odnajdź miarę i potwierdź przyciskiem OK:

Od tej pory wartość osi będzie stała niezależnie od wyboru kategorii, oraz co bardzo istotne – zawsze będzie przeliczana po załadowaniu nowych danych do raportu. Jeśli zatem w tabeli ze sprzedażą zanotujesz dużo nowych rekordów co wpłynie na totale sprzedaży dla kategorii – oś dostosuje się automatycznie. A czyż nie na tym nam zależy, żeby było ładnie, czytelnie, estetycznie, sensownie i automatycznie :)?