Język DAX Power BI- czym jest i do czego służy?

Język DAX, czyli Data Analysis Expressions, możemy określić jako Wyrażenia analizy danych. Jest to język programowania zbudowany z wyrażeń, które są wywołaniami danej funkcji. Wykorzystywany jest przez narzędzia: Power BI, SQL Server Analysis Services (SSAS) i Power Pivot for Excel, a powstał w 2010 roku. Działa na wewnętrznym silniku Tabular, czyli tabelarycznej bazie danych.

Język DAX został stworzony do obliczania formuł biznesowych w modelu danych, jest używany głównie do wyliczania wartości na podstawie zawartości kolumn w tabelach. Z jego pomocą można również wykonać agregacje, czy też wyszukiwanie liczb, jednak do wszystkich tych operacji niezbędne są tabele oraz kolumny.

Na podstawowym poziomie język DAX jest stosunkowo łatwy do opanowania, jednak zaawansowane działania, takie jak konteksty wykonania, iteracje czy też propagowanie kontekstów są zdecydowanie bardziej skomplikowane.

Funkcje języka DAX – lista

Funkcjami nazywane są formuły w wyrażeniach, a większość z nich ma wymagane i opcjonalne argumenty (inaczej parametry) jako dane wejściowe. Funkcja DAX zawsze odwołuje się do kolumny lub tabeli. Jeżeli chcemy użyć konkretnej wartości, konieczne jest dodanie odpowiednich filtrów. Jeśli na co dzień korzystasz z Excela, być może część z funkcji dostępnych w Power BI wyda Ci się znajoma.

Podział funkcji DAX ze względu na zastosowanie:

⦁ Funkcje agregujące

To funkcje agregujące wartości z kolumny i zwracające pojedynczą wartość. Są używane bardzo często, ponieważ prawie każdy model potrzebuje zagregowanych danych do prawidłowego działania. Różnią się między sobą tylko sposobem agregacji danych, a prawie wsyzstki funkcje działają na datach i wartościach numerycznych. Nigdy nie uwzględniają za to pustych wierszy (jedna z różnic względem Excela). Do typowych funkcji agregujących należą: SUM, AVERAGE, MIN, MAX, czy też COUNTROWS, DISTINCTCOUNT.

Jedną z podgrup tego rodzaju funkcji są iteratory. Wyróżniają się one tym, że mogą agregować wyrażenia, a nie pojedynczą kolumnę. Są szczególnie przydatne do wszelkich obliczeń z wykorzystaniem kolumn z wielu powiązanych ze sobą tabel lub kiedy potrzebujemy zmniejszyć liczbę kolumn obliczanych.

Iteratory przyjmują zawsze co najmniej 2 parametry: Pierwszy to tabela, która ma być skanowana, a drugim jest zwykle wyrażenie obliczane dla każdego wiersza tabeli. Po zeskanowaniu tabeli i obliczeniu wyrażenia wiersz po wierszu iteratory agregują częściowe wyniki, zgodnie ze swoja semantyką (działaniem). Większość iteratorów używa takich samych nazw, jak ich odpowiednik nieiteracyjny, uzupełnionych przyrostkiem ‘X’, np. SUMX, MINX, AVERAGEX.

⦁ Funkcje logiczne

To funkcje stosowane w celu budowy warunków logicznych, np. wykonanie obliczeń w zależności od spełnienia danego warunku lub w drugą stronę – w celu wychwycenia błędu. Wszystkie funkcje z tej grupy działają w dość oczywisty, jak sugeruje nazwa, sposób; np.: AND (oraz), FALSE (fałsz), IF (jeżeli), IFERROR (jeżeli błąd), SWITCH (przełącz), OR (lub). Wspomniana funkcja SWITCH wykorzystywana jest w sytuacji, gdy dana kolumna zawiera niewielką liczbę różnych wartości, a naszym zamiarem jest uzyskanie różnych wyników w zależności od wartości przyjętej z danej kolumny.

⦁ Funkcje informacyjne

Służą do analizy typu wyrażenia, a zatem wskazują, jaki rodzaj wartości jest zwracany przez dane wyrażenie. Wszystkie funkcje tego typu zwracają wartości logiczne i mogą być używane w każdym wyrażeniu warunkowym (np. IF). Do tej grupy należą, na przykład: ISBLANK (czy puste), ISERROR(czy błąd), ISNUMBER (czy liczba).

⦁ Funkcje matematyczne

Działają w analogiczny sposób do funkcji używanych w Excelu. Do najczęściej używanych należą: ABS (wartość bezwzględna), LOG (logarytm), MOD (reszta z dzielenia), SQRT (pierwiastek z liczby), RAND (liczba losowa).

⦁ Funkcje trygonometryczne

To bogaty zbiór, który również przypominający funkcje znane z Excela. Działanie funkcji trygonometrycznych i hiperbolicznych jest intuicyjne, ponieważ sugerowane przez nazwę, na przykład: COS (cosinus), COTH (cotangens hiperboliczny), ASIN (arcus sinus).

⦁ Funkcje tekstowe

Większość funkcji tekstowych DAX jest analogiczna do ich odpowiedników z Excela. Służą one do manipulacji danymi tekstowymi i wyciągania określonych danych z wielołańcuchowych wartości. Przykładowe funkcje tekstowe: CONCATENATE (połącz dwa ciągi tekstowe w jeden), LEN (zwraca liczbę znaków w ciągu tekstowym), TRIM (usuwa wszystkie spacje poza pojedynczymi między wyrazami).

⦁ Funkcje konwersji

Jak wskazuje nazwa, są to funkcje, które dokonują konwersji z jednego typu na inny. Należą do nich np.: CURRENCY (przekształca na typ walutowy), INT (zwraca wielkość całkowitoliczbową), VALUE (konwersja tekstu na liczbę).

⦁ Funkcje daty i czasu

Wykorzystywane są w niemal każdej analizie danych, ponieważ bardzo często pojawia się konieczność przetwarzania informacji o datach i czasie. Niektóre z nich mają swoje odpowiedniki w Excelu. Jako przykłady można podać: DATE (zwraca określoną datę w formacie daty/godziny), EDATE (zwraca datę, które wypada o określoną liczbę miesięcy przed lub po dacie rozpoczęcia), TODAY (zwraca bieżącą datę).

⦁ Funkcje relacyjne

Język DAX udostępnia dwie funkcje, które umożliwiają nawigowanie po relacjach pomiędzy tabelami w modelu danych: RELATED i RELATEDTABLE. W grupie tej wyróżnione są cztery funkcje: RELATED (zwraca powiązaną wartość z innej tabeli), RELATEDTABLE (oblicza wyrażenie tabeli w nowym kontekście), CROSSFILTER (określa kierunek filtrowania krzyżowego), USERELATIONSHIP (określa relację, która ma być używana w konkretnym obliczeniu).

⦁ Funkcje filtrowania

To jedne z najbardziej skomplikowanych funkcji języka DAX, które znacznie różnią się od tych znanych z programu Excel. Ich działanie opiera się na tabelach i relacjach, tak jak w przypadku bazy danych. Umożliwiają zmienianie kontekstu obliczania, co jest przydatne przy tworzeniu dynamicznych obliczeń. Do najczęściej używanych funkcji filtrowania należą: ALL (zwraca wszystkie wiersze lub wartości, ignorując wszelkie filtry), ALLEXCEPT (usuwa wszystkie filtry kontekstu z tabeli z wyjątkiem określonych kolumn), CALCULATE (oblicza wyrażenie w zmodyfikowanym kontekście filtra).

⦁ Funkcje finansowe

Są używane do wszelkich obliczeń finansowych, przypominają funkcje znane z Excela. Jako przykłady można wymienić: PV (zwraca wartość bieżącą na podstawie stałej stopy procentowej), FV (zwraca przyszłą wartość inwestycji na podstawie stałej stopy procentowej).

⦁ Funkcje analizy czasowej

Pozwalają na manipulację danymi przy użyciu różnych okresów, takich jak dni, miesiące, kwartały czy lata. Na ich podstawie można tworzyć i porównywać wartości w wybranych odcinkach czasowych. W tej funkcji zawsze jedna z tabel zawierających daty powinna być oznaczona jako tabela dat. Przykłady: DATEADD (zwraca tabelę z przesuniętymi datami do przodu lub do tyłu o określoną liczbę interwałów), LASTDATE (zwraca ostatnią datę dla określonej kolumny dat), FIRSTNONBLANK (zwraca pierwszą nie pustą wartość z danej kolumny).

⦁ Pozostałe funkcje

Do tej grupy możemy zaliczyć funkcje, które wykonują unikatowe akcje, przez co nie da się ich zdefiniować żadną z powyższych kategorii. Do takich funkcji należą:

  1. BLANK – zwraca wartość pustą
  2. ERROR – zgłasza błąd z komunikatem
  3. EVALUATEANDLOG – zwraca wartość pierwszego argumentu i zapisuje ją w zdarzeniu profilera dziennika DAX.

Analiza czasowa i miary DAX

Prawie każdy model danych zawiera pewną część obliczeń opartych na datach. Istnieje wiele funkcji DAX, które znacznie ułatwiają takie obliczenia, pod warunkiem, że model zawiera w sobie tabelę kalendarza. Bez niej nie będziemy w stanie tworzyć jakichkolwiek agregacji czy porównań.

Niektóre funkcje analizy czasowej są predefiniowane i zawierają w sobie typowe obliczenia, takie jak: DATESYTD (obliczenia od początku roku), DATESMTD (obliczenia od początku miesiąca) itp.

Natomiast wraz z rozbudowywaniem modelu danych, funkcje te nie są już wystarczające do zaspokojenia potrzeb odbiorców i każdy deweloper DAX powinien dysponować wiedzą, jak budować miary analizy czasowej.

Ogólną zasadą tworzenia takich miar przy pomocy języka DAX jest budowa wyrażenia, które będzie odpowiednio manipulowało kontekstem filtra w ustalony przez nas sposób. Obliczenia następują w dwóch krokach:

  1. W pierwszej kolejności ustalany jest nowy filtr dla dat
  2. Dopiero wtedy zaczyna działać nowy kontekst filtra, na podstawie którego miara zareaguje na wartości.

Przykład miary DAX analizy czasowej:

Sprzedaż od początku roku (YTD) =

CALCULATE (

SUMX (Sprzedaż, Sprzedaż [Wartość Netto] * Sprzedaż [Ilość] ),

DATESYTD ( ‘Tabela dat’ [Data] )

)

Odbiorcy raportów równie często potrzebują uzyskać zagregowane wartości dla analogicznych okresów roku poprzedniego. Do tego używamy funkcji SAMEPRIODLASTYEAR (ten sam okres w poprzednim roku. Miara taka wyglądałaby następująco:

Sprzedaż z poprzedniego roku (PY) =

CALCULATE(

[Sprzedaż],

SAMEPERIODLASTYEAR ( ‘Tabela dat’ [Data] )

)

Przydatną funkcjonalnością analizy czasowej jest też możliwość łączenia funkcji. Przykładem użycia może być poniższa:

Sprzedaż od początku roku, z poprzedniego roku (PY YTD) =

CALCULATE(

[Sprzedaż],

SAMEPERIODLASTYEAR (DATESYTD ( ‘Tabela dat’ [Data] ) )

)

Jak poprawnie wykorzystać język DAX w modelowaniu danych panelowych?

Dane panelowe w statystyce i ekonometrii to wielowymiarowe dane. Dotyczą zazwyczaj tych samych podmiotów, a ich wyniki śledzone są w konkretnych punktach w czasie. Przykładem modelu danych panelowych może być zestaw danych zawierający sprzedaż wielu produktów na przestrzeni lat, kwartałów czy miesięcy. Stworzenie wspomnianego modelu dla typowego przedsiębiorstwa nie stanowi dużego wyzwania w Power BI. Do jego budowy wystarczy prawidłowa architektura, tzn. podział tabel na fakty i wymiary oraz połączenie ich odpowiednimi relacjami.

 

DAX - Relacje między tabelami

Następnie według najlepszych praktyk należy stworzyć miarę, która zsumuje sprzedaż.

Finalny efekt zawiera Rodzaj Produktu w wierszach, Rok w kolumnach oraz miarę [Sprzedaż] jako wartość.

 

Dane uporządkowane za pomocą języka DAX

Liczba produktów oraz zakresów czasu jest w zasadzie nieograniczona. Jedyne na co musimy zwrócić uwagę, to czy widoczność wizualizacji będzie czytelna dla odbiorcy końcowego. Warto w takiej sytuacji stworzyć dodatkowe filtry i używać ich w razie potrzeby.

Źródła:

https://learn.microsoft.com/pl-pl/dax/dax-overview

Kompletny przewodnik po DAX. Analiza biznesowa przy użyciu Microsoft Power BI, SQL Server Analysis Services i Excel – wydanie 2 2019 – Russo Marco, Ferrari Alberto

https://en.wikipedia.org/

Baza danych – AdventureWorksDW2019

Autor wpisu: Magdalena Kluba