Dynamiczna zmiana agregacji danych na wykresie

W dzisiejszym artykule omówię proste rozwiązanie dotyczące zmiany rodzaju wartości wyświetlanych na osi wykresu w zależności od wyboru filtra. Naszym przykładem będzie miara wartości sprzedaży w czasie wyświetlona na wykresie kolumnowym. Wymaganie dotyczy możliwości zmiany poziomu agregacji na podstawie filtra, tj. chcemy wyświetlić dane skumulowane do dnia, miesiąca lub roku tak jak na poniższym zrzucie ekranu.

Omówienie rozwiązania

Pierwszym krokiem będzie utworzenie tabeli zawierającej daty w różnych poziomach agregacji. Przyjrzyjmy się kodowi DAX poniżej.
DynamicCalendar = 
UNION(
 ADDCOLUMNS(
 CALENDAR(MIN('Date'[Date]),MAX('Date'[Date])),
 "Visual Date", [Date],
 "Type", "Daily",
 "Order", 1),
 ADDCOLUMNS(
 CALENDAR(MIN('Date'[Date]),MAX('Date'[Date])),
 "Visual Date", DATE(YEAR([Date]),MONTH([Date]),1),
 "Type", "Monthly",
 "Order", 2),
 ADDCOLUMNS(
 CALENDAR(MIN('Date'[Date]),MAX('Date'[Date])),
 "Visual Date", DATE(YEAR([Date]),1,1),
 "Type", "Yearly",
 "Order", 3)
)
Powyższy kod wykorzystuje wartości z tabeli „Date” tworząc automatyczny kalendarz (CALENDAR). W ten sposób tworzymy najpierw tabelę (ADDCOLUMNS) z wartościami dziennymi (Type – Daily) nadając jej wartościom numer porządkowy 1, następnie tworzymy tabele miesięczną i roczną zmieniając ich wartości porządkowe, a także skracając ich format daty (do pierwszego dnia miesiąca, lub roku). Jako ostatni krok łączymy wszystkie trzy zapytania ADDCOLUMNS wewnątrz funkcji UNION.
Mając utworzoną tabelę wartości datowych przejdźmy do utworzenia filtra.
DateSlicer = 
ADDCOLUMNS(
 VALUES( DynamicCalendar[Type] ),
 "Order", LOOKUPVALUE(DynamicCalendar[Order],DynamicCalendar[Type], DynamicCalendar[Type])
)
Nasza tabela DAX o nazwie DateSlicer zawiera unikatowe wartości Type z tabeli DynamicCalendar, którą utworzyliśmy krok wcześniej. Następnie funkcja LOOKUPVALUE przypisała wartość porządkową Order. Wykorzystamy ją do sortowania kolumny Type. Wystarczy zaznaczyć kolumnę Type, a następnie we wstążce Column Tools kliknąć Sort by Column i wybrać kolumnę Order. Dzięki temu nasze wartości będą przesortowane w porządku nie alfabetycznym, lecz logicznym, tj. Dzień – Miesiąc – Rok.
Pozostaje nam teraz utworzyć odpowiednie relacje w naszym modelu danych. Poniższy zrzut przedstawia potrzebny nam wycinek dotyczący tabel dat. Tabela DateSlicer zawiera relację jeden do wielu skierowaną w stronę tabeli DynamicCalendar. Tabela DynamicCalendar łączy się z naszą tabelą kalendarzową Date relacją wiele do jednego. Ważne jest w tym kroku, aby utworzyć relację dwukierunkową, tzn. obie tabele mogą się wzajemnie filtrować.

Efekt końcowy

Pozostaje nam teraz utworzyć trzy wizualizacje. Pierwszą z nich będzie fragmentator (Slicer) zawierający pole wyboru pojedynczych wartości Type z tabeli DateSlicer. Kolejny fragmentator będzie służył do przefiltrowania horyzontu czasowego, który chcemy analizować (kolumna Date z tabeli DynamicCalendar). Następnie pozostaje nam utworzyć wykres kolumnowy, na którym w polu wartości utworzymy naszą miarę wartości sprzedaży, a w polu osi wstawimy kolumnę Visual Date z tabeli DynamicCalendar. Poniższy zrzut ekranu przedstawia nasze rozwiązanie. Zauważ, że po wyborze typu danych miesięcznych, wykres automatycznie zagregował dane sprzedażowe do poziomu miesięcznego. Spójrz na pierwszy zrzut ekranu na początku artykułu, aby porównać przefiltrowane wartości.

Podsumowanie

W artykule omówiłem sposób tworzenia i konfiguracji fragmentatora, który zmieni poziom agregacji danych wyświetlanych na wykresie kolumnowym. Wykorzystałem do rozwiązania tworzenie tabel DAX, a także pracę z relacjami w modelu danych.

Interesujący artykuł? Podaj dalej!