encyklopedia.run.place

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:

  1. Raportowanie – definiowanie miar i wskaźników KPI w Power BI oraz w raportach SSAS.
  2. Modelowanie danych – tworzenie kolumn obliczeniowych i tabel wirtualnych, które wzbogacają model o dodatkowe informacje.
  3. Analiza czasu – wykorzystanie funkcji time intelligence do porównań rok‑do‑roku, kwartalnych i miesięcznych.

Najlepsze praktyki

  • Używaj CALCULATE jako centralnego punktu modyfikacji kontekstu filtru – to najważniejsza funkcja w DAX.
  • Stosuj VAR do definiowania zmiennych w wyrażeniu – zwiększa czytelność i wydajność.
  • Unikaj nadmiernego używania funkcji FILTER na 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 MEASURE zamiast 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 nie­pamię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.

Bibliografia i dalsza lektura