DAX (Data Analysis Expressions) to natywny język formuł Power BI, Analysis Services i Power Pivot — łączy składnię znaną z Excela z relacyjną logiką bazodanową. Każdy raport Power BI, który wykracza poza proste sumy i średnie opiera się na miarach i kolumnach DAX. Bez znajomości DAX analityk biznesowy traci około 70% potencjału Power BI.
W tym przewodniku znajdziesz fundamenty DAX w 2026: czym różni się od formuł Excel, składnię podstawowych funkcji (CALCULATE, FILTER, SUMX), kontekst filtru i wiersza, różnicę między miarami a kolumnami obliczeniowymi, typowe błędy początkujących oraz zestaw 15 formuł, które rozwiązują 80% rzeczywistych zadań analitycznych.
Czym jest DAX — definicja i architektura
DAX to funkcyjny język wyrażeń zaprojektowany przez Microsoft specjalnie do pracy z modelem tabelarycznym (VertiPaq — silnik kolumnowy, który kompresuje dane w pamięci RAM). W przeciwieństwie do SQL — który operuje na wierszach i tabelach tymczasowych — DAX operuje na całych kolumnach i tabelach, automatycznie korzystając z kompresji kolumnowej.
Kluczowe cechy DAX:
- Funkcyjny, nie imperatywny — nie piszesz "przejdź przez wiersz i zrób coś", tylko deklarujesz logikę obliczeń, a silnik VertiPaq sam wybiera optymalny plan wykonania
- Kontekstowy — wynik każdej formuły zależy od kontekstu filtru (co użytkownik zaznaczył w slicerach, wierszach, kolumnach)
- Dwukierunkowy — formuła automatycznie reaguje na filtry z dowolnej tabeli połączonej relacją
- Zagnieżdżalny — funkcje DAX zagnieżdża się w sobie; typowa miara analityczna to 3-5 poziomów zagnieżdżenia
DAX powstał w 2009 roku jako silnik Power Pivot (dodatek do Excela 2010), ewoluował przez SQL Server Analysis Services Tabular (2012), aż w 2015 trafił do Power BI jako domyślny język modelu. Wersja 2026 (Power BI Desktop February 2026 Update) obsługuje ponad 200 funkcji i integrację z Copilot — asystentem AI podpowiadającym formuły w edytorze miar.
DAX a formuły Excel — fundamentalne różnice
Największa pułapka dla początkujących to założenie, że DAX działa jak Excel. Mimo podobnej składni, różnice architektoniczne są ogromne:
| Cecha | Excel | DAX (Power BI) |
|---|---|---|
| Podstawowa jednostka | Komórka (B2, C15) | Kolumna (Sales[Amount]) |
| Adresowanie | Współrzędne (A1, VLOOKUP) | Relacje między tabelami |
| Kontekst | Brak — formuła widzi tylko wskazane komórki | Kontekst filtru + kontekst wiersza |
| Iteracja | Ręczna (przeciąganie formuły) | Automatyczna (SUMX, AVERAGEX iterują po tabeli) |
| Pamięć | Oblicza na żądanie | Pre-kalkuluje i przechowuje w RAM (VertiPaq) |
| Skalowalność | Setki tysięcy wierszy | Miliardy wierszy (kompresja 10x–100x) |
| Przeliczanie | Przy każdej zmianie arkusza | Przy zmianie filtrów w raporcie |
Przykład różnicy: w Excel aby obliczyć sumę sprzedaży dla kategorii "Elektronika" piszesz =SUMIF(A:A;"Elektronika";C:C). W DAX tworzysz jedną miarę: Sales Amount = SUM(Sales[Amount]), a kategoria zostanie odfiltrowana automatycznie ponieważ użytkownik kliknął ją w slicerze. Samo filtrowanie jest oddzielone od logiki agregacji.
Fundamenty DAX — 6 pojęć, które musisz znać
1. Miara (Measure)
Miara to formuła DAX obliczana w locie — nie przechowuje wartości w modelu, tylko oblicza wynik za każdym razem gdy zmienia się kontekst filtru. Miary są kluczowe dla wydajności: jedna miara jest wielokrotnie używana w różnych wizualizacjach, a silnik VertiPaq wielokrotnie wykorzystuje ten sam plan zapytania.
Total Sales = SUM(Sales[Amount])
Miara Total Sales pokaże inną wartość dla każdego wiersza tabeli, każdego słupka wykresu i każdej karty KPI — zawsze prawidłowo reagując na wszystkie filtry z modelu.
2. Kolumna obliczeniowa (Calculated Column)
Kolumna obliczeniowa jest materializowana — zapisywana w modelu razem z danymi, zajmuje RAM i spowalnia odświeżanie. Tworzy się ją gdy potrzebujesz wartości w osi X wykresu (np. kategoria wiekowa klienta) lub filtru na poziomie wiersza.
Age Group = IF(Customers[Age] < 30, "Młodzi", IF(Customers[Age] < 50, "Średni", "Starsze"))
Zasada: miary do agregacji, kolumny do filtrowania i osi. 80% logiki DAX powinno być w miarach.
3. Kontekst filtru (Filter Context)
Kontekst filtru to zbiór wszystkich aktywnych filtrów w momencie obliczania formuły: slicery, filtry wizualizacji, wiersze/kolumny tabeli, osie wykresów, filtry na poziomie strony i raportu. DAX nigdy nie ignoruje kontekstu filtru — chyba że jawnie użyjesz funkcji modyfikujących kontekst (CALCULATE, ALL, REMOVEFILTERS).
4. Kontekst wiersza (Row Context)
Kontekst wiersza istnieje tylko w trzech sytuacjach: wewnątrz kolumny obliczeniowej, wewnątrz iteratora (SUMX, AVERAGEX, FILTER) oraz w funkcjach okienkowych (WINDOW, OFFSET). Kontekst wiersza nie filtruje — daje dostęp do wartości w bieżącym wierszu. Aby zamienić kontekst wiersza na kontekst filtru, używa się CALCULATE.
5. Relacje i propagacja filtrów
Filtry w Power BI płyną z tabeli wymiaru (strona "jeden") do tabeli faktów (strona "wiele") — zawsze jednostronnie. Oznacza to, że zaznaczenie kategorii w tabeli wymiarów automatycznie filtruje transakcje. Relacje dwukierunkowe są możliwe, ale należy ich unikać — prowadzą do nieprzewidywalnych wyników i spadku wydajności.
6. CALCULATE — najważniejsza funkcja DAX
CALCULATE(<wyrażenie>, <filtr 1>, <filtr 2>, ...)
CALCULATE modyfikuje kontekst filtru dla podanego wyrażenia. To najczęściej używana funkcja w analityce — pozwala na obliczenia typu "sprzedaż w zeszłym roku", "udział procentowy kategorii we wszystkich kategoriach", "running total" i praktycznie każdą analizę porównawczą. CALCULATE zawiera w sobie semantykę ALL(), FILTER(), KEEPFILTERS() i USERELATIONSHIP() — każda z tych funkcji modyfikuje jeden aspekt kontekstu przekazanego do CALCULATE.
Początkujący często nadużywają FILTER w CALCULATE. Różnica między:
-- ŹLE — FILTER iteruje całą tabelę, skan 5 mln wierszy
CALCULATE([Sales], FILTER(Products, Products[Category] = "Elektronika"))
-- DOBRZE — prosty predykat kolumnowy, VertiPaq używa indeksu kolumnowego
CALCULATE([Sales], Products[Category] = "Elektronika")
Ten drugi zapis działa identycznie, ale jest 100-1000x szybszy na dużych modelach.
Najważniejsze funkcje DAX — podział kategoriami
Agregacje podstawowe (odpowiedniki SUM, COUNT, AVERAGE z Excela)
| Funkcja | Działanie | Typowe użycie |
|---|---|---|
SUM(Column) | Suma wartości w kolumnie | Sprzedaż całkowita |
AVERAGE(Column) | Średnia arytmetyczna | Średnia wartość koszyka |
MIN(Column) / MAX(Column) | Minimum / maksimum | Data pierwszego zamówienia |
COUNT(Column) | Liczba niepustych wartości | Liczba transakcji |
COUNTROWS(Table) | Liczba wierszy w tabeli | Liczba klientów |
DISTINCTCOUNT(Column) | Liczba unikalnych wartości | Liczba aktywnych produktów |
Iteratory (X-funkcje)
Iteratory to funkcje zakończone literą X: SUMX, AVERAGEX, MINX, MAXX, COUNTX, RANKX. Każda z nich przyjmuje tabelę i wyrażenie, iteruje po każdym wierszu tabeli i wykonuje wyrażenie w kontekście tego wiersza, po czym agreguje wyniki.
-- Oblicz marżę jako SUMX(ilość × (cena — koszt))
Total Margin = SUMX(Sales, Sales[Quantity] * (Sales[Price] - Sales[Cost]))
Bez iteratora powyższa formuła byłaby niemożliwa — SUM operuje tylko na jednej kolumnie. Iteratory są fundamentem analityki gdzie logika operuje na wielu kolumnach jednocześnie.
Inteligencja czasowa (Time Intelligence)
Funkcje czasu to drugi filar DAX obok CALCULATE. Power BI automatycznie wykrywa kolumnę dat i tworzy ukrytą tabelę kalendarza — bez niej funkcje czasu nie zadziałają.
-- Sprzedaż w analogicznym okresie poprzedniego roku
Sales PY = CALCULATE([Total Sales], SAMEPERIODLASTYEAR(Calendar[Date]))
-- Narastająco od początku roku
Sales YTD = TOTALYTD([Total Sales], Calendar[Date])
-- Porównanie miesiąc do miesiąca
Sales MoM% = DIVIDE([Total Sales] - [Sales PM], [Sales PM])
Od wersji 2023 Power BI obsługuje tabele kalendarza tworzone automatycznie (Auto Date/Time), ale profesjonalne modele zawsze używają własnej tabeli kalendarza oznaczonej jako tabela dat. Tabela kalendarza musi zawierać każdy dzień roku bez luk i być powiązana relacją z tabelą faktów.
Funkcje logiczne i warunkowe
-- SWITCH — czystsza alternatywa dla zagnieżdżonych IF
Customer Tier = SWITCH(
TRUE(),
[Total Sales] > 100000, "Premium",
[Total Sales] > 10000, "Standard",
"Basic"
)
-- IF + AND / OR
High Margin Flag = IF(AND([Margin%] > 0.3, [Total Sales] > 50000), "Kluczowy klient", "Standard")
SWITCH(TRUE(), ...) to idiom DAX na wielowarunkową logikę — każdy warunek jest sprawdzany po kolei, a pierwszy TRUE kończy ewaluację.
Funkcje relacyjne (RELATED, RELATEDTABLE, LOOKUPVALUE)
-- RELATED — z tabeli faktu do tabeli wymiaru (strona "wiele" → "jeden")
Product Category = RELATED(Products[Category])
-- RELATEDTABLE — z tabeli wymiaru do wszystkich powiązanych wierszy faktów
Customer Products Count = COUNTROWS(RELATEDTABLE(Sales))
-- LOOKUPVALUE — dynamiczne VLOOKUP bez relacji
Manager Name = LOOKUPVALUE(Employees[Name], Employees[ID], Sales[EmployeeID])
RELATED działa tylko w kierunku zgodnym z propagacją filtrów (wiele → jeden). RELATEDTABLE zwraca całą tabelę po stronie "wiele" — używa się go głównie w iteratorach i funkcjach agregujących.
Typowe błędy początkujących w DAX
Błąd 1: Próba zamiany kontekstu wiersza na kontekst filtru bez CALCULATE
-- ŹLE — [Total Sales] nie ma kontekstu filtru wewnątrz iteratora, zwróci tę samą wartość dla każdego wiersza
Wrong = SUMX(Products, [Total Sales])
-- DOBRZE — CALCULATE zamienia kontekst wiersza (Products) na kontekst filtru
Correct = SUMX(Products, CALCULATE([Total Sales]))
To najczęstszy błąd wśród osób przesiadających się z Excela — iterator nie filtruje automatycznie, daje tylko dostęp do wartości w bieżącym wierszu. Bez CALCULATE miara [Total Sales] obliczona wewnątrz SUMX nie widzi filtru na pojedynczy produkt.
Błąd 2: Nadmierne użycie kolumn obliczeniowych
Każda kolumna obliczeniowa zajmuje RAM (dla modelu 100 mln wierszy jedna kolumna 8-bajtowa to ~800 MB RAM). Jeśli kolumna ma tylko pośredniczyć w obliczeniach — zrób to w mierze. Kolumny tylko gdy potrzebne są do osi, filtrów lub relacji.
Błąd 3: Relacje dwukierunkowe
Dwukierunkowa propagacja filtrów (cross-filter = Both) działa jak przełącznik — włączona dla jednej relacji może niezamierzenie zmienić wynik wszystkich miar. Stosuj tylko w kontrolowanych przypadkach i tylko z CALCULATE + CROSSFILTER — nie jako domyślne ustawienie modelu.
Błąd 4: Ignorowanie tabeli kalendarza
Bez dedykowanej tabeli kalendarza funkcje czasu (SAMEPERIODLASTYEAR, TOTALYTD, DATESBETWEEN) nie działają. Ponadto Power BI traktuje kolumnę daty z tabeli faktów jako nieciągłą — dni bez transakcji nie istnieją, a YTD nie policzy się poprawnie.
Błąd 5: Nadmierne zagnieżdżanie FILTER
-- ŹLE — VERTIPAQ skanuje całą tabelę
CALCULATE([Sales], FILTER(Sales, Sales[Amount] > 1000))
-- DOBRZE — predykat kolumnowy korzysta z indeksu
CALCULATE([Sales], Sales[Amount] > 1000)
Proste predykaty kolumnowe (KEEPFILTERS nie jest potrzebny) są rozpoznawane przez optymalizator VertiPaq i zamieniane na skan indeksu. FILTER jest potrzebny tylko gdy warunek dotyczy miary (np. FILTER(Products, [Sales] > 1000)).
DAX a Copilot w Power BI 2026
Od 2024 roku Power BI Desktop i serwis Power BI integrują Microsoft Copilot — asystenta AI, który rozumie naturalny język i generuje formuły DAX. W edytorze miar wystarczy wpisać komentarz w języku polskim (lub angielskim), a Copilot zaproponuje kompletną miarę:
-- Oblicz średnią sprzedaż na klienta z ostatnich 12 miesięcy, tylko dla klientów którzy kupili produkty z kategorii premium
Copilot przeanalizuje model danych, wykryje tabele i relacje, a następnie wygeneruje formułę używającą CALCULATE + DATESINPERIOD + iteratorów. Narzędzie nie zastąpi znajomości kontekstu filtru i debugowania DAX, ale skraca czas pisania standardowych wzorców analitycznych o około 60%.
W wersji 2026 Copilot obsługuje też DAX Query View — możliwość zadawania pytań analitycznych w naturalnym języku i natychmiastowego podglądu wyników jako tabeli danych.
Gdzie i jak używać DAX poza Power BI
DAX nie jest ograniczony do Power BI Desktop. Te same formuły działają w:
- SQL Server Analysis Services (SSAS) Tabular — modele tabelaryczne na serwerze, kompatybilność 100%
- Azure Analysis Services — wersja chmurowa SSAS, ta sama semantyka DAX
- Power Pivot (Excel) — dodatek do Excela 2024 i Microsoft 365 obsługujący modele do 2 GB
- Microsoft Fabric — platforma analityczna łącząca Data Factory, Synapse i Power BI z natywnym DAX
Różnice między platformami: Power Pivot w Excelu 2024 nie obsługuje funkcji okienkowych (WINDOW, OFFSET) wprowadzonych w DAX 2022, ani niektórych funkcji z grupy INFO i EVALUATEANDLOG. SSAS Tabular 2022+ obsługuje pełen zakres funkcji DAX identyczny z Power BI.
Częste pytania
Czym różni się DAX od M (Power Query)?
DAX to język modelu danych — tworzy miary, kolumny obliczeniowe, tabele kalkulowane i steruje regułami bezpieczeństwa. M (język Power Query) to język ETL — służy tylko do importowania, czyszczenia i przekształcania danych przed załadowaniem do modelu. M czyści surowe dane, DAX analizuje już czysty model. Kolejność zawsze: M → DAX → wizualizacja.
Czy można używać DAX jako zapytań do bazy danych?
Tak. Narzędzia jak DAX Studio i Tabular Editor pozwalają pisać zapytania DAX bezpośrednio do modelu (podobnie jak SQL do bazy). Zapytanie DAX zwraca tabelę, którą można wyeksportować do CSV, Excela lub skopiować. Power BI Premium i Fabric obsługują też XMLA Endpoints — pełny dostęp do modelu jako bazy danych.
Czy DAX działa tylko z modelem gwiaździstym?
Nie tylko, ale model gwiaździsty (tabele faktów otoczone tabelami wymiarów) to optymalna architektura dla DAX. Modele płaskie (jedna szeroka tabela), modele śnieżynki (zdenormalizowane wymiary) i modele z wieloma tabelami faktów działają, ale DAX staje się trudniejszy do optymalizacji. VertiPaq najlepiej kompresuje i skanuje tabele w układzie gwiaździstym.
Jak debugować formuły DAX, które zwracają błędne wyniki?
Użyj trzech narzędzi: DAX Studio (darmowe, zewnętrzne IDE z podglądem planów wykonania i zapytań VertiPaq), Tabular Editor (edytor skryptowy, refaktoryzacja miar, autouzupełnianie), oraz Performance Analyzer wbudowany w Power BI Desktop (rejestruje czas każdej wizualizacji i odpowiadające zapytania DAX). Kopiuj zapytanie z Performance Analyzer do DAX Studio i analizuj krok po kroku z EVALUATE.
Jakie są wymagania sprzętowe do komfortowej pracy z DAX?
Power BI Desktop działa na Windows 10/11 i wymaga minimum 4 GB RAM, ale przy modelach powyżej 500 MB rekomendowane jest 16 GB RAM. DAX Studio i Tabular Editor działają równolegle, każdy zużywa dodatkowe 200-400 MB. Przy modelach 2-5 GB (Enterprise) rekomendowane jest 32 GB RAM i procesor 4-rdzeniowy.
Czy DAX jest case-sensitive?
Nie. SUM, sum i Sum są traktowane identycznie. Nazwy tabel i kolumn również ignorują wielkość liter, chyba że model pochodzi z bazy danych z ustawieniem case-sensitive collation (np. SQL Server z Latin1_General_CS_AS). Nazwy zmiennych (VAR) w DAX są case-insensitive w ramach jednej formuły.
Jak szybko sprawdzić, co zwraca formuła DAX wewnątrz innej formuły?
Od wersji Power BI Desktop 2023 dostępna jest funkcja EVALUATEANDLOG — zwraca wartość pośrednią do panelu diagnostycznego bez przerywania obliczeń. W DAX Studio używa się EVALUATE { wyrażenie } do natychmiastowego podglądu wyniku miary lub zapytania w kontekście zdefiniowanym przez CUBE.
Czy mogę kupić Power BI Pro jako osobny produkt?
Tak. Power BI Pro to licencja na użytkownika (~40 PLN/mc brutto) umożliwiająca publikację raportów, współdzielenie dashboardów i odświeżanie danych do 8 razy dziennie. W KluczeSoft oferujemy również licencje Microsoft 365 E5 i Fabric SKU dla firm, które potrzebują wdrożenia Power BI z zaawansowaną analityką i pojemnościami Premium.
Czy DAX działa z chmurą — czy dane muszą być lokalne?
DAX działa w trybie Import (dane w RAM po stronie Power BI Desktop), DirectQuery (zapytanie DAX tłumaczone na SQL wykonywane na serwerze źródłowym) i Composite (hybryda — część tabel w RAM, część DirectQuery). W wersji 2026 Microsoft rekomenduje tryb Composite z Direct Lake (Fabric) jako optymalny dla wydajności i aktualności danych.
Ile czasu zajmuje nauka DAX na poziomie produktywnym?
Przy codziennej praktyce: 2 tygodnie do podstawowych miar (SUM, CALCULATE, prosta inteligencja czasowa), 3 miesiące do samodzielnego tworzenia złożonych analiz (iteratory, konteksty, optymalizacja), 12 miesięcy do poziomu eksperckiego (zapytania, wydajność, debugowanie). Warto zacząć od książki "The Definitive Guide to DAX" (Russo, Ferrari) i codziennych ćwiczeń na własnym modelu sprzedażowym — nie na tutorialach.
Jeśli wdrażasz Power BI w swojej organizacji i potrzebujesz legalnych licencji Microsoft 365 lub Power BI Pro — sprawdź ofertę KluczeSoft.pl. Oryginalne klucze, Faktura VAT 23% z KSeF, dostawa e-mailem w 1–3 minuty.
