W ramach dzisiejszego artykułu chciałbym pokazać Wam w jaki sposób możemy osiągnąć efekt w postaci wizualizacji typu Trellis zwanego również Small multiples w Power BI. Wizualizacja ta nie jest wprost dostępna jako dedykowany visual jednakże mamy pewne możliwości pozwalające nam stworzyć tą niezwykle użyteczną graficzną reprezentację danych, zapraszam serdecznie do lektury.
Na wstępie chciałbym powiedzieć parę słów na temat samej wizualizacji jak i wskazać kilka przykładowych zastosowań. Tak więc Trellis to nic innego jak zestaw tych samych wykresów (najczęściej słupkowych, kolumnowych lub liniowych ale nie tylko) ukazujących daną wielkość w tej samej skali podzieloną (partycjonowaną) w określony sposób. Za przykład może nam tutaj posłużyć poniższe zestawienie, które przygotowałem manualnie w Power BI:
Powyższa wizualizacja przedstawia cztery wykresy kolumnowe zawierające sprzedaż po kwartałach gdzie każdy z wykresów przedstawia inny rok i płeć tak więc właśnie te atrybuty są naszą partycją. Celem powstałej wizualizacji jest to aby móc w stosunkowo szybki sposób porównać wartości pomiędzy różnymi okresami czasu dla określonych płci. Stworzenie tego typu rozwiązania dla nikogo nie powinno być wielkim wyzwaniem jednakże posiada ono kilka istotnych wad.
Przede wszystkim stworzona przeze mnie wizualizacja składa się z 4 kombinacji atrybutów rok/płeć tj. do analizy wziąłem jedynie lata 2012 oraz 2013 gdzie po przemnożeniu przez płeć mamy właśnie 4 kombinacje. Co by się stało jakbym zamiast 2 lat chciał porównać 8 lub 10? Manualne tworzenie tylu wykresów może być bardzo problematyczne (nie mówiąc o kwestiach utrzymania i ewentualnych zmian). Dodatkowo każdy z wykresów zgodnie z definicją powinien posiadać te same osie po to aby poszczególne słupki były ze sobą w ogóle porównywalne. Jak możecie zauważyć powyżej sprzedaż w roku 2013 była dużo wyższa niż sprzedaż 2012, oceniamy to po wysokości słupka i jest to możliwe dzięki temu, że automatyczne skalowanie osi Y zostało wyłączone. Aby uniknąć przekłamania związanego z automatycznym skalowaniem ustawiłem odpowiednie limity wartości dla każdego z wykresów wynoszące od 0 do 3000000:
Sztywne wartości mają to do siebie, że są… sztywne. W przypadku gdy będzie trzeba je zmienić to czeka nas manualne ustawianie każdego z wykresów. Podobny problem pojawi się w momencie gdy chcielibyśmy zmienić porównywane lata z 2012/2013 na np. 2013/2014. Niektóre przypadki raportowe oczywiście dopuszczają tego typu rozwiązanie jednak w idealnym świecie chcielibyśmy aby wykresy powstawały automatycznie biorąc pod uwagę atrybuty wybrane jako partycja oraz skale wartości. Czy jest to w ogóle możliwe? Oczywiście, że tak! Mamy do dyspozycji kilka możliwości, a ja postaram się przedstawić trzy wybrane.
Do przykładu użyłem trzech tabel z AdventureWorksDW:
- FactInternetSales
- DimDate
- DimCustomer
które razem stworzyły następujący model danych:
Pierwszym sposobem rozwiązania problemu są tzw. Data bars, które w niektórych przypadkach mogą świetnie zastąpić wspomniany typ wizualizacji. Czym są Data Bars? Zobrazujmy sobie ich działanie na przykładzie, w pierwszym kroku tworzymy wizualizację typu matrix, a następnie umieszczamy następujące atrybuty:
W wierszach:
- DimDate[CalendarYear]
- DimDate[CalendarQuarter]
W kolumnach:
- DimCustomer[Gender]
W polu wartości:
- FactInternetSales[SalesAmount]
Efekt powinien przypominać ten zobrazowany na poniższym zrzucie ekranowym:
Mając gotowego matrixa z wartościami nie pozostaje nam nic innego jak włączyć Data Bars. Sprowadza się to do włączenia odpowiedniego przełącznika znajdującego się w węźle formatowania warunkowego (Conditional Formatting). Jeśli nie chcemy aby widoczne były wartości to możemy wejść w zaawansowane opcje formatowania warunkowego i tam zaznaczyć opcję Show bar only – cały proces został przedstawiony poniżej:
Oczywiście każdy ze słupków możemy formatować według własnego uznania np. wartości ujemne wyświetlać na czerwono, a dodatnie na zielono itp. Ponadto możemy zmienić kierunek w którym rozszerzają się słupki:
Czy takie podejście znajduje zastosowanie? Jasne, że tak. Daje nam takie możliwości jakich oczekiwalibyśmy od Trellis czyli szybkie porównanie wartości dla różnych atrybutów. Jedna uwaga z mojej strony jest taka aby kolumny zawierające Data Bars miały tą samą szerokość w której mogą się zmieścić tak aby nie zakłamać przekazu, wystarczy spojrzeć na poniższy zrzut aby dostrzec gdzie leży problem:
Wiemy zatem jak w łatwy sposób użyć Data Bars. Co jeszcze mamy do dyspozycji? Kolejnym rozwiązaniem może być użycie niestandardowego darmowego komponentu stworzonego przez Microsoft, którym jest Infographic Designer. Komponent ten jest potężnym narzędziem i dzięki niemu możemy osiągnąć pożądany efekt. Importujemy go w standardowy sposób klikając na trzy kropki w Visualizations, a następnie wybierając z dostępnych opcji Import from marketplace:
Wyszukanie i dodanie visuala do pliku raportu nie powinno już stanowić problemu:
Po jego imporcie do Power BI Desktop należy skonfigurować go według potrzeb. Mamy do dyspozycji wiele pozycji na wizualizacji jak np.:
- Category – atrybut po którym będą grupowane kolumny,
- Legend – atrybut dodatkowego grupowania.
- Measure – miara obliczana na wykresie,
- Column By – atrybut partycjonujący horyzontalnie,
- Row By – atrybut partycjonujący wertykalnie.
Poniżej przykład konfiguracji powyższych właściwości wraz z powstałą wizualizacją danych:
Nie wiem jak Wam ale mnie bardzo podoba się powstały efekt! Ilość wykresów zależy od atrybutów, które wybraliśmy jako partycjonujące, a oś Y sama wyskalowała się tak jakbyśmy sobie tego życzyli. Dodatkowo Inforgraphic Desginer daje nam możliwości zmiany formatowania i kilku dodatkowych właściwości pozwalających dostosować wizualizację do naszych potrzeb. Wykres słupkowy nie jest jedyną możliwością jaką mamy do wyboru, możemy również wybrać wykres kolumnowy i liniowy tak jak zostało to przedstawione poniżej:
Mamy już dwie możliwości za sobą, a więc pora na ostatnią, która tak naprawdę daje nam niemal nieograniczone możliwości dostosowania tj. język R lub Python. Jeśli chodzi o R to wachlarz możliwości jest naprawdę szeroki i z najpopularniejszych bibliotek możemy użyć klasycznego ggplot2 lub np. lattice. Poniżej znajduje się kod R wykorzystujący pierwszą ze wspomnianych bibliotek:
library(ggplot2) ggplot(data=dataset, aes(x=CalendarQuarter,y=SalesAmount)) + scale_y_discrete()+ geom_bar(stat="identity") + facet_wrap(~Gender~CalendarYear,ncol=4) + ggtitle("Sales Amount by Time and Gener")
Nie wgłębiając się w samą składnię ggplot2, która jest dosyć specyficzna i opiera się o gramatykę wizualizacji (więcej o tym możecie poczytać np. tutaj) możemy powiedzieć, że ostatecznie otrzymaliśmy to czego chcieliśmy:
Również w tym przypadku możemy zmienić typ wykresu na np. liniowy podmieniając w kodzie definicję geom_bar na geom_line:
Oczywiście to nie koniec możliwości, które zdecydowanie wykraczają poza powyższe proste przykłady- jeśli chcecie zapoznać się z samą biblioteką odsyłam do dokumentacji. W przypadku języka R ggplot2 nie jest ani jedynym właściwym wyborem ani najlepszym w każdym przypadku bo podobne efekty można osiągnąć jak to zwykle bywa na wiele różnych możliwości.
Podsumowując można zadać sobie pytanie którą z przedstawionych metod wybrać? To wszystko zależy od konkretnego scenariusza i nierzadko zdarza się, że dwa najzwyklejsze wykresy ułożone obok siebie lub Data Bars mogą być tym czego oczekujemy, a innym razem świetnie sprawdzi się Infographic Designer lub R/Python. Każde rozwiązanie ma swoje wady i zalety dlatego warto się zastanowić, zachować umiar i wybierać najprostsze możliwe rozwiązanie bez przesadnego kombinowania zgodnie z zasadą KISS.
- 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
Last comments