Interaktywne Grupowanie w Marimekko

Ostatnio jeden z konsultantów w pracy poprosił mnie o pomoc przy tworzeniu wykresu Marimekko. Szczególnie interesowała go możliwość dynamicznego grupowania kafelków. O ile samo Marimekko bazuje na podstawowej matematyce i jego stworzenie w Tableau jest  od dawna dobrze udokumentowane, to do interaktywnego dynamicznego grupowania potrzeba jednej z nowych funkcji wprowadzonych w 2018.3 - set actions.

Kliknij aby przejść do Tableau Public

Zacznijmy od tego, kiedy używamy Marimekko. Jest to typ wykresu na którym pokazujemy 2 zmienne (jedna jako wysokość, druga jako szerokość) i dwa wymiary (jeden pionowo, drugi poziomo). Można go interpretować jako stacked bar chart z dodaną szerokością słupka. Cała zagwostka polega na tym aby słupki się stykały pokazując sumę całego zbioru. Marimekko można też interpretowć w pewien sposób jako scatterplot pokazuący total lub sumę bieżącą.

Jeśli chcemy aby słupki się stykały, oś X musi być ciągła (zielona pigułka). To oznacza, że musimy wyliczyć położenie słupków. W naszym przypadku będziemy liczyć szerokość słupka oraz położenie jego prawej krawędzi. Posłużę się dobrze znanym zbiorem treningowym Superstore. Wykes będzie przedstawiał relację między ilością towaru (Quantity) oraz wartością sprzedaży (Sales) dla różnych typów klientów (Segment) według różnych opcji dostawy (Ship Mode).

Pierwszy krok to stworzenie zwykłego wykresu słupkowego pokazującego ilość towaru wg opcji wysyłki. Następnie zmieniamy ilość na udział procentowy - używamy Quick Table Calculation - Percent of Total. Liczymy to po Segmencie. 

Możemy się teraz zabrać za liczenie szerokości słupka. Są na to dwa sposoby: LOD i table calculation (window_sum). Zawsze preferuję LOD, jest ono też łatwiejsze w późniejszym sortowaniu. Tworzymy więc pole kalkulowane, które ma policzyć wartość sprzedaży (Sales) dla każdego Ship Mode - ignorujemy więc typ klienta. Zawartość pola powinna wyglądać tak:
Użyjmy go od razu jako szerokości słupka.

Na tym etapie widać już, że zmierzamy w dobrą stronę. Przed nami najtrudniejsza część, czyli kalkulacja licząca położenie słupka. Kalkulacja działa na podobnej zasadzie jak running sum. Zwykły running sum nie zadziała, gdyż chcemy liczyć partycje inaczej niż przedstawiamy je w widoku.


W tym momencie pozostaje tylko przerzucić wymiar Ship Mode na detal oraz użyć nowej kalkulacji na osi X. Ustawiamy ją tak, aby liczyła się przy użyciu obu wymiarów. Pierwszy powinen być wymiar który znajduje się na oxi X, drugi wymiar z osi Y. Możemy również od razu ustawić sortowanie.


W tym momencie wykres wygląda tak:

Widać, że dalej coś się nie zgadza. Mamy policzone pozycje słupków ale dalej nie wypełniają one widoku. Aby to naprawić musimy zrównać słupki do prawej krawędzi oraz zmienić typ szerokośc na fixed. Oznacza to, że szerokość będzie zsynchronizowana z osią.


Jedyne co pozostaje to ustawić kolory i sformatować labele i tooltipy.

Dodanie elementu interaktywnego grupowania wymaga od nas stworzenia drugiego wykresu, ponieważ set action nie może się odwoływać same do siebie na wykresie.

Dlatego tworzymy zwykły wykres słupkowy pokazujący udział wszystkich Ship Mode. Po wrzuceniu go na dashboard używamy paddingu aby zrównać krawędzie.

Musimy podmienić też Ship Mode na wykresie Marimekko. Do tego celu tworzymy nowy zbiór i pole bazujące na nim. Aby stworzyc zbiór bazujący na Ship Mode klikamy prawym klawiszem na pole i wybieramy Create > Set. Na obecną chwilę pozostawmy go pustym.


Nasz nowy wymiar ma zwracać elementy niezawarte w zbiorze, a te zawarte grupować. Logika ta wygląda następująco:


Po podmianie pola na wykresie i ponownym ustawieniu kalkulacji możemy wrócić do dashboardu i ustawić naszą akcję (Dashboard > Actions > Add Action > Change Set Values). 


Ustawiona tak akcja sprawi, że klikając na górnym wykresie (Ship Mode Bar) zostaną zmienione wartości zbioru Ship Mode Set, którego to używamy na drugim wykresie. Odklikniecie selekcji pozostawi zbiór z poprzednią zawartością.


Komentarze

Popularne posty z tego bloga

Radar Charts w Tableau

SprytneSztuczki#1 - 9 sprytnych funkcji Tableau, które ułatwią Ci życie

Alteryx + Tableau = Voronoi