Jak stworzyć wymiar daty w Power BI Desktop?

Dzisiaj pokażę Wam jak stworzyć najważniejszą tabelę, która powinna być obecna w modelu danych – wymiar daty (ang. Date dimension). Podejdziemy do zagadnienia na kilka sposobów, tak, żebyś mógł wybrać, ten który najbardziej Ci pasuje, a także jest możliwy do zaimplementowania w Twoim rozwiązaniu raportowym. Do dzieła! 🙂

Tworzenie w DAX

Jednym z narzędzi, które umożliwi nam zbudowanie wymiaru daty w dynamiczny sposób jest funkcja DAX’ owa CALENDAR(), której opis znajdziesz też w dokumentacji Microsoftowej.

Składnia samej funkcji jest bardzo prosta i za parametry przyjmuje <start date>  i <end date>, gdzie definiujemy zakresy początku i końca, dla którtych ma zostać wygenerowana tabela.

CALENDAR(<start_date>, <end_date>)

Funkcja zwróci tabelę z jedną kolumnę [Date], gdzie wartościami będą daty z podanego zakresu.

No dobra, ale mówiłeś coś o wymiarze, a nie jednej kolumnie?!

Dokładnie. W kolejnym kroku obudujemy funkcję CALENDAR, funkcją ADDCOLUMNS, która bardzo nam pomoże w kwestii budowania „naszego” wymiaru daty. Pokażę Ci też, jak to zrobić.

Dodatkowo, zawęzimy nasz kalendarz do dat, których de facto używamy na podstawie wpisów w naszej tabeli faktów.

W Power BI Desktop przejdź do widoku tabeli.

W kolejnym kroku wybierz [Narzędzia główne] -> [Nowa tabela]

Mój wymiar daty będzie budowany na podstawie tabelki faktowej [Sales] i pola datowego [TransactionDate]. Oczywiście nic nie stoi na przeszkodzie, żebyś użył innych dat, zdefiniowanych nawet „z ręki”. Taki przykład pokazany jest w dokumentacji.

Mój kod na razie wygląda w ten sposób, gdzie [Data Sprzedaży] to nazwa tabeli.
Jak widzisz, odwołuje się do [TransactionDate] z tabeli [Sales], a mój wymiar będzie posiadał daty od najmniejszej MIN(), do największej (MAX) w ramach tej tabeli. Oczywiście parametry możesz przekazywać też z ręki lub na podstawie różnych tabel.

Data Sprzedaży =
CALENDAR ( MIN ( 'Sales'[TransactionDate] ), MAX ( 'Sales'[TransactionDate] ) )

Przystąpimy teraz do rozbudowy naszego wymiaru daty i używania pól, które mogą być Tobie potrzebne. Aby to zrobić, należy naszą funkcję CALENDAR () „opakować” funkcją ADDCOLUMNS(), dzięki której będziesz mógł dodawać atrybuty niezbędne do Twojej analizy. Np. [rok], [rok-msc] itp. Itd.

Wybrałem kilka atrybutów jak np. [Dzień], [Nazwa dnia] czy też [Rok-miesiąc].

Data Sprzedaży =
ADDCOLUMNS (
    (
        CALENDAR ( MIN ( 'Sales'[TransactionDate] ), MAX ( 'Sales'[TransactionDate] ) )
    ),
    "Rok", YEAR ( [Date] ),
    "Miesiąc", MONTH ( [Date] ),
    "Dzień", DAY ( [Date] ),
    "Rok-miesiąc", FORMAT ( [Date], "yyyy.mm" ),
    "Nazwa dnia", FORMAT ( [Date], "DDD" )
)

Funkcja ADDCOLUMNS przyjmuje w pierwszym argumencie tabelę (w naszym przypadku jest to tabela z datami z kalendarza). Kolejne argumenty to nazwa kolumny, czyli np. „Rok” pisana w cudzysłowie i wyrażenie, które ma być użyte do kalkulacji w tej kolumnie. Np. YEAR([Date]), czyli rok, od naszej daty [Date].

Jak widzisz, użyłem też funkcji FORMAT, która pozwala prezentować naszą datę [Date] w różnym formacie i wyciągać z niej określone interesujące nas części. Zachęcam do eksploracji możliwości tej funkcji np. tutaj lub tutaj. W podanych linkach znajdź część dotyczącą formatowania daty.

Ostatecznie moja tabela daty wygląda w następujący sposób:

Ważne konfiguracje wymiaru daty

Pamiętaj, żeby po stworzeniu tabeli, która będzie pełnić rolę wymiaru daty, oznaczyć ją jako tabelkę datową. Już pokazuję Ci jak to zrobić:

Prawym Przyciskiem Myszy kliknij na stworzoną tabelę i wybierz opcję [Oznacz jako tabelę dat]. Zwróć uwagę, że przy naszej tabeli pojawiła się ikonka takiego „kalkulatora”. Oznacza to, że jest to tabela kalkulowana (czyli w naszym przykładzie stworzona przy użyciu DAX’a, a nie importowana z jakiegoś źródła np. bazy danych).

W kolejnym kroku wskaż pole, które jest kluczem (unikatowe) w wymiarze daty i wybierz „OK”.


Ostatnim elementem, o który warto zadbać jest wyłączenie domyślnej funkcjonalności, która w Power BI’u tworzy swoje niewidoczne dla Użytkownika tabele z wymiarem daty. Dodatkowo, tamte tabele są obecne w modelu, a tego nie chcemy (bo zabierają miejsce, wpływają na ładowanie modelu). Teraz pokażę Ci jak wyłączyć tę opcje.

W lewym górnym roku aplikacji wybierz kolejno [Plik] -> [Opcje i Ustawienia] -> [Opcje].

W menu, które Ci się okaże odznacz poniższe opcje:

Budowa wymiaru daty w Power Query

Kolejne podejście zakłada stworzenie naszego wymiaru daty przy użyciu skryptu Power Query. Posłużę się takim, który udostępnia Reza Rad (Konsultant, MVP Microsoftu) na swoim blogu.
Link do bezpośredniego pobrania skryptu w języku M znajdziecie tutaj. Zachęcam też do śledzenia jego bloga, gdzie poruszanych jest wiele ciekawych tematów związanych z pracą z danymi w technologii Microsoftu. Link do bloga znajdziesz tutaj.

Mechanizm implementacji tego rozwiązania znajdziesz tutaj, pokazywałem go w ramach sesji Odczaruj Power BI, które organizuje Paweł Czapiewski. W linku jest odwołanie do konkretnego momentu, gdzie pokazuję krok po kroku jak zbudować tabelę wymiaru daty na podstawie wspomnianego wyżej skryptu oraz jak stworzyć relację w modelu.

Po ściągnięciu skryptu, dokonajcie tylko drobnej zmiany dotyczącej dat, tak, żeby skrypt obejmował lata, które są niezbędne do Waszej analizy. Czyli np. ToYear = 2026

Budowa wymiaru daty na źródle bazodanowym

Kolejnym podejściem do tworzenia i używania tabeli wymiaru daty w modelu jest stworzenie jej np. na bazie danych, z której pobierasz dane. Jeśli pobierasz dane z Hurtowni Danych, na pewno wymiar daty jest tam już stworzony.

Jeśli tworzysz obiekt na źródle bazodanowym, możesz załadować dane „bazowe” (czyli np. listę dat, jak w przykładzie z funkcją CALENDAR() ) do jednej tabeli, a potem przy pomocy widoku SQL’owego „dobudowywać” sobie pola, które Cię interesują. Widok da Ci większą elastyczność, niż przebudowywanie samej tabelki za każdym razem, gdy pojawi się potrzeba dodania nowego atrybutu. Nie jest to jednak przedmiotem tego artykułu. Zaznaczam tylko, że istnieje taka możliwość i takie podejście również jest spotykane w projektach.

Po co to robić?

Budowanie osobnego wymiaru daty jest standardową praktyką w projektach BI’ owych. Jest to najbardziej podstawowy i bardzo ważny wymiar, które występuje w analizach. Pomyśl sobie, jak ważne jest analizowanie danych w kontekście dat.

Dzięki temu wymiarowi możliwe jest łatwiejsze przeprowadzanie analiz typu time intelligence (o tym też planuję stworzyć artykuł 🙂 ).  W ramach wymiaru daty można też zbudować hierarchię (zachęcam Cię do poszukania informacji na ten temat), dzięki czemu Użytkownicy raportu mogą „schodzić” głębiej np. od roku, przez kwartały, aż do miesięcy czy dni. Stworzenie osobnego wymiaru daty pozwala też w łatwy sposób budować atrybuty niezbędne do analizy jak np. [Rok], [Rok-miesiąc] i zarządzać formatami daty. Jeden wymiar daty w ramach projektu zapewnia też spójność w rozwiązaniach (wszyscy działają według jednego, tego samego obiektu).

Podsumowanie

Wymiar daty to jeden z najważniejszych i najczęściej spotykanych wymiarów w ramach modeli danych. W artykule znajdziesz informacje jak stworzyć go w różny sposób. Szczególną uwagę poświęciłem tworzeniu przy użyciu tabelki kalkulowanej DAX i przy użyciu skryptu w języku M w ramach Edytora Power Query.

Dane są wszędzie, wiesz?

Zapisz się, jeśli interesujesz się Power BI'em i danymi. Co jakiś czas odezwę się z ciekawymi materiałami.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *