Wprowadzenie do języka DAX – pierwsze średniozaawansowane formuły i obliczenia
Poznaj średniozaawansowane formuły i obliczenia w języku DAX. Naucz się tworzyć miary, pracować z kontekstem i wykorzystywać funkcje czasowe w Power BI.
Artykuł przeznaczony dla analityków danych oraz użytkowników Power BI na poziomie podstawowym i średnio zaawansowanym, którzy chcą zrozumieć DAX i stosować go w praktycznych analizach.
Z tego artykułu dowiesz się
- Czym jest język DAX i jaką rolę pełni w Power BI?
- Jakie są kluczowe różnice między miarami a kolumnami obliczeniowymi i kiedy je stosować?
- Jak działa kontekst wiersza i kontekst filtru oraz jak wpływają na wyniki formuł DAX?
Wprowadzenie do języka DAX i jego roli w Power BI
DAX, czyli Data Analysis Expressions, to język formuł stworzony przez firmę Microsoft, wykorzystywany w narzędziach analitycznych takich jak Power BI, Excel Power Pivot oraz Analysis Services Tabular. Jego głównym celem jest umożliwienie użytkownikom tworzenia zaawansowanych obliczeń i analiz danych w modelu tabelarycznym.
W kontekście Power BI, DAX odgrywa kluczową rolę w procesie przekształcania surowych danych w użyteczne informacje biznesowe. Dzięki niemu użytkownicy mogą definiować własne miary analityczne, tworzyć kolumny obliczeniowe oraz budować złożone modele analityczne wspierające podejmowanie decyzji. DAX zapewnia elastyczność i precyzję, umożliwiając np. obliczanie wartości dynamicznych zależnych od kontekstu filtrów, dat czy relacji pomiędzy tabelami.
Choć składnia DAX przypomina znane z Excela formuły, jego możliwości znacznie wykraczają poza arkusz kalkulacyjny. Język ten został zaprojektowany z myślą o pracy z dużymi zbiorami danych i wielowymiarowych relacjach, co czyni go nieodzownym narzędziem w rękach analityków pracujących z Power BI.
Rola DAX w Power BI nie ogranicza się wyłącznie do tworzenia obliczeń – pozwala on także na optymalizowanie wydajności modelu danych, dostosowywanie sposobu wizualizacji informacji oraz budowanie logiki biznesowej w raportach i dashboardach. Dzięki temu umożliwia przekształcenie danych na poziomie semantycznym, bez konieczności ingerowania w źródłowe bazy danych.
Podsumowując, znajomość języka DAX stanowi jeden z fundamentów efektywnej pracy z Power BI, otwierając drogę do tworzenia elastycznych, dynamicznych i w pełni dostosowanych do potrzeb organizacji analiz danych.
Podstawowe zasady składni i struktury formuł DAX
Data Analysis Expressions (DAX) to język formuł wykorzystywany głównie w Power BI, a także w innych narzędziach Microsoft, takich jak Power Pivot czy Analysis Services. Choć przypomina tradycyjne formuły znane z Excela, DAX posiada własną strukturę i zasady, które pozwalają na budowę dynamicznych miar i zaawansowanych obliczeń w modelach danych. W Cognity często spotykamy się z pytaniami na ten temat podczas szkoleń, dlatego postanowiliśmy przybliżyć go również na blogu.
Formuły DAX są zawsze przypisane do kontekstu – mogą być stosowane do obliczeń kolumn obliczeniowych, miar lub tabel zwracanych dynamicznie w zależności od filtrów i interakcji w raporcie. Kluczowe składniki każdej formuły DAX to funkcje (np. agregujące, logiczne, matematyczne), operatory (takie jak +, -, *, /, &&, ||) oraz odwołania do kolumn lub tabel danych.
Najważniejsze cechy składni DAX obejmują:
- Użycie nazw kolumn i tabel: Kolumny zawsze znajdują się w nawiasach kwadratowych i są poprzedzone nazwą tabeli, jeśli kontekst tego wymaga.
- Nawiasy: Funkcje DAX używają klasycznej notacji z nawiasami okrągłymi do przekazywania argumentów.
- Separatory: W zależności od ustawień regionalnych, lista argumentów może być oddzielana przecinkiem lub średnikiem.
- Typ danych: DAX rozpoznaje typy, takie jak liczby całkowite, zmiennoprzecinkowe, tekst czy daty, co ma wpływ na sposób działania funkcji i operatorów.
- Funkcje wbudowane: DAX oferuje szeroki wachlarz funkcji umożliwiających filtrowanie, przekształcanie oraz analizę danych w czasie.
W DAX-ie szczególną rolę odgrywa sposób, w jaki formuła jest interpretowana w kontekście danych – dlatego poprawna struktura i zrozumienie składni to fundament skutecznego korzystania z języka. Nawet proste formuły mogą działać inaczej w zależności od tego, czy są używane jako miary, kolumny czy w filtrze wizualizacji.
Najczęściej używane funkcje DAX i ich zastosowanie
Język DAX (Data Analysis Expressions) oferuje szeroki wachlarz funkcji, które umożliwiają tworzenie zaawansowanych obliczeń oraz analizowanie danych w Power BI. W tej sekcji omówimy najczęściej wykorzystywane grupy funkcji DAX, ich ogólne zastosowanie oraz różnice pomiędzy nimi.
1. Funkcje agregujące
Funkcje agregujące pozwalają na podsumowanie danych, takie jak sumowanie, liczenie czy obliczanie średniej. Są to jedne z najczęściej stosowanych funkcji w raportach i miarach.
- SUM() – sumuje wartości w kolumnie
- AVERAGE() – oblicza średnią arytmetyczną
- COUNT() – liczy ilość wartości niepustych
- MAX(), MIN() – zwracają odpowiednio największą lub najmniejszą wartość
SUM('Sprzedaż'[Kwota])
2. Funkcje logiczne
Pozwalają na tworzenie warunków i logiki decyzyjnej w formułach, co czyni je bardzo przydatnymi przy tworzeniu dynamicznych obliczeń.
- IF() – wykonuje warunkowe sprawdzenia
- SWITCH() – zwraca różne wyniki w zależności od wartości wejściowej
- AND(), OR(), NOT() – operatory logiczne
IF('Produkty'[Marża] > 0.2, "Wysoka", "Niska")
3. Funkcje tekstowe
Umożliwiają manipulację ciągami znaków – przydatne podczas formatowania lub przygotowania danych do wizualizacji.
- CONCATENATE(), CONCATENATEX() – łączenie tekstu
- LEFT(), RIGHT(), MID() – ekstrakcja fragmentów tekstu
- SEARCH(), FIND() – wyszukiwanie tekstu w ciągach
CONCATENATE('Klienci'[Imię], " ", 'Klienci'[Nazwisko])
4. Funkcje związane z datami
Pozwalają na analizę danych w kontekście czasu. Choć wiele z nich będzie szczegółowo omawianych później, warto znać podstawowe:
- TODAY(), NOW() – zwracają aktualną datę lub datę i czas
- YEAR(), MONTH(), DAY() – ekstrakcja części daty
YEAR('Zamówienia'[Data Zamówienia])
5. Funkcje tabelaryczne vs funkcje skalarne
W DAX funkcje mogą zwracać pojedyncze wartości (funkcje skalarne) lub całe tabele (funkcje tabelaryczne). To, jaką funkcję wybierzemy, zależy od kontekstu i rodzaju tworzonych formuł.
| Typ funkcji | Przykłady | Zwracana wartość |
|---|---|---|
| Skalarne | SUM(), AVERAGE(), IF() | Pojedyncza wartość (liczba, tekst, data) |
| Tabelaryczne | FILTER(), VALUES(), ALL() | Tabela danych |
6. Funkcje filtrowania i kontekstu
Są kluczowe dla bardziej zaawansowanych analiz – pozwalają na kontrolę nad tym, jakie dane są brane pod uwagę w obliczeniach.
- CALCULATE() – przelicza wyrażenie w zmodyfikowanym kontekście
- FILTER() – zwraca podzbiór danych spełniających warunek
- ALL() – usuwa filtry z tabeli lub kolumny
CALCULATE(SUM('Sprzedaż'[Kwota]), 'Sprzedaż'[Region] = "Zachód")
Znajomość tych funkcji stanowi fundament efektywnej pracy z DAX w Power BI. Ich właściwe użycie pozwala tworzyć zarówno proste miary, jak i złożone modele analityczne. Jeśli chcesz pogłębić swoją wiedzę i nauczyć się wykorzystywać te funkcje w praktyce, sprawdź nasz Kurs Język DAX i język M - wykorzystanie funkcji języka DAX i analiza danych przy użyciu języka M.
Tworzenie miar i kolumn obliczeniowych – różnice i przykłady
DAX (Data Analysis Expressions) umożliwia tworzenie zaawansowanych obliczeń i analiz w Power BI, głównie poprzez zastosowanie dwóch kluczowych elementów: miar oraz kolumn obliczeniowych. Choć oba typy wykorzystują formuły DAX, różnią się znacząco pod względem przeznaczenia, kontekstu działania i wpływu na model danych. W Cognity omawiamy to zagadnienie zarówno od strony technicznej, jak i praktycznej – zgodnie z realiami pracy uczestników.
Podstawowe różnice między miarami a kolumnami obliczeniowymi
| Cecha | Miara | Kolumna obliczeniowa |
|---|---|---|
| Miejsce przechowywania | Nie jest przechowywana fizycznie w modelu – obliczana dynamicznie | Przechowywana w tabeli jako nowa kolumna |
| Kontekst działania | Obliczenia zależne od kontekstu filtru i raportu | Obliczenia wykonywane dla każdego wiersza tabeli |
| Wydajność | Bardziej wydajne przy dużych zbiorach danych | Zużywają więcej pamięci – zwiększają rozmiar modelu |
| Zastosowanie | Tworzenie agregacji (np. sum, średnich, wskaźników KPI) | Dodawanie informacji do danych źródłowych (np. kategorie, etykiety) |
Przykłady zastosowań
Poniżej przedstawiono proste przykłady użycia miary i kolumny obliczeniowej w praktyce.
Miara – obliczanie całkowitej sprzedaży
Total Sales = SUM(Sales[Amount])
Miara Total Sales sumuje wartości w kolumnie Amount w zależności od kontekstu filtru w raporcie – np. dla wybranego roku lub regionu.
Kolumna obliczeniowa – klasyfikacja wartości sprzedaży
Sales Category = IF(Sales[Amount] > 1000, "Wysoka", "Niska")
Kolumna Sales Category przypisuje każdemu wierszowi etykietę na podstawie wartości sprzedaży. Jest tworzona dla każdego rekordu osobno i przechowywana w tabeli.
Podsumowanie
Zrozumienie różnicy między miarami a kolumnami obliczeniowymi jest kluczowe dla efektywnego projektowania modeli danych w Power BI. Wybór między nimi powinien zależeć od charakteru obliczenia oraz kontekstu, w jakim wynik ma być używany. Miary są niezastąpione w analizie dynamicznej, natomiast kolumny obliczeniowe ułatwiają wzbogacenie danych o dodatkowe atrybuty.
Praca z kontekstem wiersza i kontekstem filtru
Jednym z kluczowych elementów zrozumienia języka DAX (Data Analysis Expressions) jest pojęcie kontekstu. To właśnie kontekst determinuje, jak formuły są interpretowane i jakie wartości są wykorzystywane podczas obliczeń. DAX operuje głównie w dwóch typach kontekstu: kontekst wiersza oraz kontekst filtru.
Kontekst wiersza
Kontekst wiersza odnosi się do konkretnego wiersza tabeli, w którym wykonywana jest formuła. Najczęściej występuje podczas tworzenia kolumn obliczeniowych, gdzie każda formuła działa niezależnie dla każdego rekordu. W takim przypadku mamy dostęp do wartości z innych kolumn tego samego wiersza.
Przykład użycia kontekstu wiersza:
NowaKolumna = 'Sprzedaż'[CenaJednostkowa] * 'Sprzedaż'[Ilość]
W tym przykładzie formuła oblicza wartość tylko dla konkretnego wiersza – mnoży cenę jednostkową przez ilość.
Kontekst filtru
Kontekst filtru powstaje, gdy filtrujemy dane w modelu – na przykład przez użycie filtrów w wizualizacji, segmentatorów, czy funkcji DAX takich jak CALCULATE(). Ten kontekst wpływa na to, które wiersze są brane pod uwagę przy obliczaniu wartości agregowanych.
Przykład użycia kontekstu filtru:
CałkowitaSprzedaż = CALCULATE(SUM('Sprzedaż'[Wartość]), 'Sprzedaż'[Kraj] = "Polska")
W tym przypadku CALCULATE zmienia kontekst filtru tak, aby suma dotyczyła jedynie wierszy, w których kraj to „Polska”.
Podstawowe różnice
| Cecha | Kontekst wiersza | Kontekst filtru |
|---|---|---|
| Zakres działania | Pojedynczy wiersz tabeli | Wybrany podzbiór danych w tabeli |
| Typ obliczeń | Kolumny obliczeniowe | Miary i agregacje |
| Źródło kontekstu | Wiersz przetwarzany przez formułę | Filtry z raportu, relacji i funkcji DAX |
| Możliwość zmiany | Trudniejsza do modyfikacji | Łatwa do zmiany przez CALCULATE() |
Zrozumienie tych dwóch kontekstów jest niezbędne do poprawnego tworzenia formuł w DAX i unikania nieoczekiwanych wyników. Najczęściej obliczenia w bardziej złożonych analizach wymagają świadomego zarządzania kontekstem filtru i jego interakcją z kontekstem wiersza. Jeśli chcesz zgłębić tę tematykę jeszcze bardziej i poznać praktyczne zastosowania, sprawdź nasz Kurs DAX – praca w języku DAX i użyteczne funkcje, wizualizacja danych w Power BI.
Zastosowanie funkcji czasowych w analizie danych
Funkcje czasowe w języku DAX (Data Analysis Expressions) umożliwiają analizę danych w ujęciu czasowym, co jest kluczowe w raportowaniu biznesowym i tworzeniu wizualizacji trendów. Dzięki nim można z łatwością porównywać wartości z różnych okresów, obliczać skumulowane sumy czy generować wskaźniki dynamiki.
Podstawowym celem tych funkcji jest ułatwienie pracy z datami i kalendarzami, a także umożliwienie analiz takich jak:
- Porównania rok do roku (Year-over-Year, YoY)
- Porównania kwartał do kwartału lub miesiąc do miesiąca
- Kumulacja wartości w czasie (np. od początku roku)
- Obliczenia dla przesuniętych okresów (np. sprzedaż z poprzedniego miesiąca)
W DAX dostępnych jest wiele funkcji czasowych, z których najczęściej wykorzystywane obejmują:
| Funkcja | Opis | Typowe zastosowanie |
|---|---|---|
SAMEPERIODLASTYEAR() |
Zwraca zestaw dat odpowiadających temu samemu okresowi w poprzednim roku. | Porównania rok do roku |
DATESYTD() |
Zwraca zestaw dat od początku roku do bieżącej daty w kontekście. | Kumulacja danych od stycznia do chwili obecnej |
PREVIOUSMONTH() |
Zwraca zestaw dat z poprzedniego miesiąca. | Porównania miesiąc do miesiąca |
PARALLELPERIOD() |
Pozwala uzyskać dane z równoległych okresów o określonym przesunięciu (np. 1 rok, 3 miesiące). | Elastyczne analizy porównawcze |
DATEADD() |
Przesuwa daty o określoną jednostkę czasu. | Zaawansowane przesunięcia czasowe |
Aby funkcje czasowe działały poprawnie, niezbędne jest posiadanie w modelu danych spójnej tabeli kalendarza (data table), najlepiej oznaczonej jako tabela dat w Power BI. Tabela ta powinna zawierać ciągły zakres dat oraz kolumny pomocnicze, takie jak rok, miesiąc, kwartał czy nazwa dnia tygodnia.
Poniżej przykład wykorzystania funkcji SAMEPERIODLASTYEAR() do porównania sprzedaży rok do roku:
Sales YoY =
CALCULATE(
SUM(Sales[Amount]),
SAMEPERIODLASTYEAR('Date'[Date])
)
Dzięki tym funkcjom użytkownicy Power BI mogą tworzyć bardziej dynamiczne i porównawcze raporty, które pozwalają lepiej zrozumieć zmiany w danych na przestrzeni czasu.
Przykłady praktyczne – budowa formuł krok po kroku
W tej części przyjrzymy się, jak tworzyć pierwsze formuły w języku DAX w sposób praktyczny. Celem jest pokazanie, jak krok po kroku zbudować użyteczne obliczenia, które można zastosować w modelu danych Power BI. Na tym etapie skupimy się na prostych, ale reprezentatywnych przykładach, które ilustrują podstawowe podejście do rozwiązywania typowych problemów analitycznych przy użyciu DAX.
Wyobraźmy sobie, że mamy model danych zawierający sprzedaż, produkty i klientów. Na jego podstawie chcemy przygotować kilka podstawowych analiz:
- Obliczenie łącznej sprzedaży: Użyjemy funkcji agregującej, aby zsumować wartości kolumny, np. sprzedaży brutto. To jedna z najprostszych formuł, ale bardzo często wykorzystywana.
- Średnia wartość sprzedaży na klienta: Tutaj wykorzystamy kombinację sumowania i liczenia unikalnych klientów, by uzyskać średnią per klient. To przykład bardziej złożonego obliczenia, wymagającego przemyślenia kontekstu, w jakim działa formuła.
- Porównanie sprzedaży miesiąc do miesiąca: Zastosujemy funkcję zwracającą sprzedaż z poprzedniego okresu i odejmiemy ją od bieżącej wartości, aby pokazać zmianę. To przykład użycia funkcji czasowych i prostych obliczeń różnicowych.
- Liczba sprzedanych produktów określonej kategorii: Użyjemy filtru wewnątrz formuły, aby ograniczyć analizę do wybranej kategorii i policzyć sprzedane jednostki. To pokazuje, jak działa filtrowanie na poziomie formuły.
Tworząc każdą z tych formuł, warto zwrócić uwagę na to, czy zapisujemy je jako miary, czy jako kolumny obliczeniowe. Miary obliczają się dynamicznie w zależności od kontekstu (np. wybranych filtrów czy dat), natomiast kolumny są obliczane raz i przechowywane w danych. Wybór między nimi zależy od tego, co chcemy osiągnąć i jak chcemy zaprezentować wynik.
Praktyczna budowa formuł polega najczęściej na testowaniu, iteracyjnym udoskonalaniu logiki oraz sprawdzaniu działania obliczeń w różnych kontekstach raportu. Warto korzystać z edytora DAX w Power BI oraz narzędzi takich jak okienko „Wartości szybkiego pomiaru”, które pomagają w eksploracji dostępnych funkcji i składni.
Podejście krok po kroku pozwala dokładnie zrozumieć, jak działa każda część formuły i jak wpływa na wynik końcowy. Dzięki temu łatwiej będzie budować coraz bardziej zaawansowane obliczenia i unikać typowych błędów w analizie danych.
Najczęstsze błędy i dobre praktyki przy pracy z DAX
Praca z językiem DAX może początkowo wydawać się intuicyjna, szczególnie dla osób mających doświadczenie w Excelu czy SQL. Jednak DAX rządzi się swoimi unikalnymi zasadami, których nieprzestrzeganie może prowadzić do trudnych do wykrycia błędów i nieprawidłowych wyników analiz. Poniżej przedstawiamy najczęstsze pułapki, w które wpadają użytkownicy, oraz dobre praktyki, które warto stosować od samego początku pracy z DAX. Podczas szkoleń Cognity pogłębiamy te zagadnienia w oparciu o konkretne przykłady z pracy uczestników.
Typowe błędy popełniane przez użytkowników
- Brak zrozumienia kontekstu: Jednym z najczęściej występujących problemów jest nieświadome ignorowanie kontekstu wiersza i kontekstu filtru, co prowadzi do błędnych wyników obliczeń.
- Mylenie kolumn obliczeniowych z miarami: Początkujący często stosują kolumny obliczeniowe tam, gdzie bardziej odpowiednie byłoby użycie miar, przez co niepotrzebnie zwiększają rozmiar modelu danych.
- Używanie zagnieżdżonych IF-ów zamiast SWITCH: Rozbudowane instrukcje warunkowe w formie zagnieżdżonych IF-ów mogą być trudne do utrzymania i prowadzić do błędów logicznych.
- Nadmierne użycie funkcji CALCULATE bez zrozumienia: CALCULATE to potężne narzędzie, ale jego niewłaściwe użycie może całkowicie zmienić kontekst obliczeń i prowadzić do błędnych danych.
- Nieoptymalne modelowanie danych: Próby kompensowania złej struktury modelu za pomocą skomplikowanych formuł DAX często kończą się nieczytelnym kodem i problemami z wydajnością.
Dobre praktyki w pracy z DAX
- Rozumienie kontekstu: Zanim zaczniesz pisać formuły, upewnij się, że rozumiesz, w jakim kontekście (wiersza lub filtru) zostaną one wykonane.
- Używanie czytelnych nazw i komentarzy: Nadawanie sensownych nazw miarom i dodawanie krótkich komentarzy znacznie ułatwia pracę z kodem, zwłaszcza w większych projektach.
- Minimalizowanie złożoności formuł: Złożone obliczenia lepiej rozbić na kilka prostszych miar, co poprawia czytelność i ułatwia debugowanie.
- Stosowanie standardów nazewnictwa: Ujednolicone nazwy miar i kolumn pomagają w nawigacji po modelu i ułatwiają współpracę w zespole.
- Testowanie i walidacja wyników: Zawsze porównuj wyniki działania formuł z oczekiwaniami lub danymi źródłowymi, aby szybko wykryć potencjalne błędy logiczne.
Unikanie typowych błędów i stosowanie się do dobrych praktyk pozwala nie tylko tworzyć bardziej przejrzyste i wydajne formuły, ale także zwiększa niezawodność analiz biznesowych wykonywanych w Power BI.