dax_(data_analysis_expressions)
DAX (ang. Data Analysis Expressions) jest językiem formuł i wyrażeń wykorzystywanym do tworzenia obliczeń w modelach danych opartych na technologiach firmy Microsoft. Jego główne zastosowania obejmują Power BI, SQL Server Analysis Services (SSAS) – tryb modelu tabelarycznego oraz Power Pivot w programie Microsoft Excel. Dzięki DAX użytkownicy mogą definiować miary, kolumny obliczeniowe oraz tabele wirtualne, które służą do zaawansowanej analizy danych.
Historia
Język DAX został wprowadzony w 2009 roku wraz z premierą SQL Server 2008 R2 w roli języka wyrażeń dla modelu tabelarycznego w SSAS. Kolejne wersje Power Pivot (dostępny w Excel 2010) i Power BI rozszerzyły możliwości DAX, wprowadzając nowe funkcje i optymalizacje pod kątem dużych zbiorów danych.
Podstawowe pojęcia
- Miara (measure) – wyrażenie DAX, które jest obliczane w kontekście raportu (np.
SUM(Sales[Amount])). - Kolumna obliczeniowa (calculated column) – stała wartość wyliczana wiersz po wierszu podczas przetwarzania modelu.
- Kontekst wiersza (row context) – odniesienie do bieżącego wiersza w tabeli, w którym wyrażenie jest oceniane.
- Kontekst filtru (filter context) – zestaw filtrów zastosowanych do danych w momencie wyliczania miary.
- Funkcja agregująca – np.
SUM,AVERAGE,MIN,MAX. - Funkcja czasu (time intelligence) – umożliwiająca operacje na danych kalendarzowych, np.
TOTALYTD,PARALLELPERIOD.
Składnia i opis najważniejszych funkcji
DAX opiera się na wyrażeniach, które mogą łączyć funkcje, operatory i odwołania do kolumn. Przykładowa miara obliczająca sumę przychodów:
Revenue = SUM(Sales[Revenue])
Poniżej zestawienie najczęściej używanych grup funkcji:
Funkcje agregujące
SUM(column)– suma wartości w kolumnie.AVERAGE(column)– średnia arytmetyczna.COUNT(column)– liczba niepustych wierszy.DISTINCTCOUNT(column)– liczba unikalnych wartości.
Funkcje filtrujące
FILTER(table, expression)– tworzy tabelę spełniającą podany warunek.CALCULATE(expression, filter1, …)– modyfikuje kontekst filtru dla podanej miary.ALL(column)– usuwa filtry z podanej kolumny.
Funkcje czasu (time intelligence)
TOTALYTD(expression, dates, [year_end_date])– suma kumulatywna od początku roku do daty.PREVIOUSMONTH(dates)– zwraca zestaw dat z poprzedniego miesiąca.DATEADD(dates, number_of_intervals, interval)– przesuwa daty o określoną liczbę jednostek.
Funkcje logiczne i warunkowe
IF(logical_test, result_true, [result_false])SWITCH(expression, value1, result1, …, [else_result])AND(),OR(),NOT()
Zastosowania DAX w praktyce
DAX znajduje zastosowanie w trzech głównych obszarach:
- Raportowanie – definiowanie miar i wskaźników KPI w Power BI oraz w raportach SSAS.
- Modelowanie danych – tworzenie kolumn obliczeniowych i tabel wirtualnych, które wzbogacają model o dodatkowe informacje.
- Analiza czasu – wykorzystanie funkcji time intelligence do porównań rok‑do‑roku, kwartalnych i miesięcznych.
Najlepsze praktyki
- Używaj
CALCULATEjako centralnego punktu modyfikacji kontekstu filtru – to najważniejsza funkcja w DAX. - Stosuj
VARdo definiowania zmiennych w wyrażeniu – zwiększa czytelność i wydajność. - Unikaj nadmiernego używania funkcji
FILTERna dużych tabelach – zamiast tego korzystaj z funkcji optymalizowanych, np.ALLSELECTED. - Dbaj o poprawną modelację relacji – nieprawidłowe relacje prowadzą do błędnych kontekstów w miarach.
- Wykorzystuj
MEASUREzamiast kolumn obliczeniowych, gdy potrzebny jest dynamiczny kontekst filtru.
Wydajność i optymalizacja
Wydajność DAX zależy od kilku czynników:
- Rozmiar modelu – im mniejsze, tym szybciej przetwarzane są zapytania.
- Kardynalność kolumn – kolumny o niskiej kardynalności (np. flagi, kategorie) są przetwarzane szybciej.
- Użycie kolumn typu „calculated” vs. miar – miary są liczone na żądanie i zazwyczaj bardziej efektywne.
- Indeksy i grupowanie – model tabelaryczny korzysta z wewnętrznych indeksów, które przyspieszają operacje filtrujące.
Monitorowanie wydajności odbywa się w narzędziu DAX Studio lub wbudowanym w Power BI podglądzie Performance Analyzer.
Ograniczenia
Mimo silnych możliwości, DAX posiada pewne ograniczenia:
- Brak pełnej obsługi pętli i struktury proceduralnej – język opiera się na wyrażeniach funkcyjnych.
- Nieobsługiwane operacje na danych niepamięciowych (np. bezpośrednie zapytania SQL).
- Ograniczenia w rozmiarze modelu w wersji Power BI Service (np. maksymalny rozmiar datasetu).
Powiązane pojęcia
Osoby zainteresowane DAX mogą również zagłębić się w następujące tematy:
- Power Query – język M, używany do przygotowywania danych przed ich załadowaniem do modelu.
- MDX – alternatywny język zapytań dla modeli wielowymiarowych w SSAS.
- Zarządzanie modelami danych – projektowanie i optymalizacja modeli w Power BI i SSAS.
- KPI – wskaźniki kluczowej wydajności, które często definiuje się przy użyciu DAX.
Przykładowa definicja miary z użyciem zmiennych
Sales Growth YoY =
VAR CurrentSales = CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR('Date'[Date]))
VAR PreviousSales = CALCULATE(SUM(Sales[Amount]), 'Date'[Date])
RETURN
DIVIDE(CurrentSales - PreviousSales, PreviousSales)
Powyższy przykład ilustruje, jak przy pomocy VAR definiuje się zmienne przechowujące wartości sprzedaży w bieżącym i poprzednim roku, a następnie oblicza się procentowy wzrost.