Jak filtrować dane w Power BI przy użyciu zapytań M i DAX?
Dowiedz się, jak skutecznie filtrować dane w Power BI za pomocą języków M i DAX, porównując ich zastosowania oraz różnice kontekstowe.
Artykuł przeznaczony dla użytkowników Power BI na poziomie podstawowym i średnio zaawansowanym, którzy przygotowują dane w Power Query oraz tworzą miary i analizy w DAX.
Z tego artykułu dowiesz się
- Jakie są kluczowe różnice między filtrowaniem danych w Power Query (język M) a filtrowaniem w modelu danych (język DAX)?
- Jak w praktyce filtrować dane w Power Query za pomocą języka M i kiedy takie filtrowanie ma sens?
- Jak działa kontekstowe, dynamiczne filtrowanie w DAX i jakie funkcje (np. CALCULATE, FILTER) są do tego najczęściej używane?
Wprowadzenie do filtrowania danych w Power BI
Filtrowanie danych jest jednym z kluczowych elementów pracy z Power BI, umożliwiającym oczyszczanie, przekształcanie i analizowanie informacji w sposób dostosowany do potrzeb użytkownika. W Power BI istnieją dwa główne środowiska, w których możemy stosować filtrowanie: Power Query z językiem M oraz Model danych z wykorzystaniem języka DAX (Data Analysis Expressions). Każde z tych podejść ma odmienną rolę, moment zastosowania i wpływ na wydajność oraz zakres analizy.
Power Query, oparte na języku M, jest wykorzystywane głównie na etapie pobierania, wstępnego przetwarzania i transformacji danych. Filtrowanie w tym środowisku odbywa się jeszcze przed załadowaniem danych do modelu, co pozwala ograniczyć ilość danych oraz dostosować ich strukturę. Przykładowo, można odfiltrować jedynie transakcje z ostatnich 12 miesięcy lub wykluczyć puste wartości w kolumnie.
Z kolei język DAX stosowany jest już wewnątrz modelu danych, co pozwala na dynamiczne filtrowanie i analizę danych kontekstowych w zależności od wybranych wymiarów i miar. Filtrowanie DAX-em umożliwia tworzenie zaawansowanych miar, wskaźników KPI i raportów interaktywnych, które reagują na działania użytkownika w czasie rzeczywistym, np. kliknięcia w segmentatory czy wybory w wykresach.
Rozróżnienie między filtrowaniem w Power Query a filtrowaniem przy użyciu DAX jest istotne nie tylko ze względu na funkcjonalność, ale również z punktu widzenia wydajności oraz logiki analitycznej. Właściwe zastosowanie obu podejść pozwala tworzyć bardziej efektywne i przejrzyste modele raportowe, które lepiej odpowiadają na potrzeby użytkowników biznesowych.
Zrozumienie, kiedy i jak stosować filtrowanie w Power BI, jest kluczowe dla tworzenia skutecznych i zoptymalizowanych raportów analitycznych.
Podstawy języka M w Power Query
Język M, znany również jako Power Query Formula Language, jest funkcjonalnym językiem programowania używanym w Power BI do transformacji i przygotowywania danych na etapie wczytywania. Działa w środowisku Power Query i umożliwia zaawansowane operacje na danych przed ich załadowaniem do modelu danych.
Charakterystyczną cechą języka M jest jego deklaratywność — użytkownik opisuje, co chce osiągnąć, a nie jak to zrobić krok po kroku. Każda operacja w Power Query, tak jak filtrowanie, sortowanie czy zmiana typu danych, jest zapisywana jako krok w skrypcie M, który tworzy łańcuch transformacji danych.
Język M jest silnie typowany i opiera się na strukturach takich jak listy, rekordy i tabele. Wszystkie działania na danych można wykonywać interaktywnie przez interfejs graficzny Power Query, jednak zrozumienie podstaw języka M pozwala na tworzenie bardziej elastycznych i dynamicznych zapytań.
Typowy skrypt M składa się z sekcji let i in, gdzie definiowane są kolejne kroki transformacji, a na końcu wskazywany jest wynik końcowy. Przykładowa struktura może wyglądać następująco:
let
Źródło = Excel.Workbook(File.Contents("Plik.xlsx")),
FiltrowaneDane = Table.SelectRows(Źródło, each [Kolumna1] = "Wartość")
in
FiltrowaneDane
Znajomość języka M pozwala na dostosowanie logiki przekształceń do złożonych scenariuszy biznesowych, automatyzację procesów oraz optymalizację ładowania danych. Dzięki temu użytkownicy mają większą kontrolę nad jakością i strukturalnym przygotowaniem danych jeszcze przed ich analizą.
Filtrowanie danych w Power Query przy użyciu języka M
Filtrowanie danych w Power Query odbywa się na etapie transformacji danych, jeszcze przed ich załadowaniem do modelu danych Power BI. Operacje te są wykonywane w języku M, który został zaprojektowany specjalnie do przekształcania i przygotowywania danych. Dzięki temu użytkownicy mogą znacząco ograniczyć ilość danych trafiających do modelu, co poprawia wydajność raportów oraz upraszcza dalszą analizę.
Podstawowe zastosowania filtrowania w Power Query obejmują m.in.:
- usuwanie niepotrzebnych wierszy (np. nulli, puste wartości lub dane sprzed określonej daty),
- wybieranie danych spełniających konkretne warunki (np. liczby większe niż 1000),
- filtrowanie na podstawie wartości tekstowych (np. tylko produkty zawierające słowo „Premium”),
- tworzenie warunków filtrowania zależnych od innych kolumn.
W Power Query filtrowanie można wykonać z poziomu interfejsu graficznego lub bezpośrednio edytując zapytania M. Oto prosty przykład kodu M filtrującego kolumnę Sales w tabeli, aby zawierała tylko wiersze z wartością większą niż 1000:
Table.SelectRows(Source, each [Sales] > 1000)
Powyższe wyrażenie korzysta z funkcji Table.SelectRows, która przyjmuje jako pierwszy argument źródło danych, a jako drugi – warunek logiczny. Tego typu filtrowanie jest wykonywane na etapie ekstrakcji i transformacji danych, co oznacza, że działa niezależnie od kontekstu analitycznego w raporcie.
Warto zauważyć, że filtrowanie przy użyciu języka M ma charakter statyczny – jego efekty są zapisane w przekształconym zestawie danych i nie zmieniają się dynamicznie w czasie interakcji użytkownika z raportem. To odróżnia je od filtrowania przy użyciu języka DAX, który operuje już na załadowanym modelu danych i pozwala na dynamiczne reagowanie na wybór użytkownika – ale o tym więcej w późniejszych częściach artykułu. Jeśli chcesz pogłębić swoją wiedzę w tym zakresie, zapoznaj się z Kurs Język DAX i język M - wykorzystanie funkcji języka DAX i analiza danych przy użyciu języka M.
Podstawy języka DAX w modelu danych
Język DAX (Data Analysis Expressions) to język formuł używany w Power BI do tworzenia miar, kolumn obliczeniowych oraz tabel obliczeniowych w modelu danych. Pozwala na analizę, agregację i filtrowanie danych już po ich załadowaniu do modelu, w przeciwieństwie do języka M, który działa w fazie przekształcania danych (ETL).
Podstawowe zastosowania DAX obejmują:
- Tworzenie miar (measures): Wartości obliczane dynamicznie w kontekście raportu, np. suma sprzedaży czy średnia marża.
- Kolumny obliczeniowe: Nowe kolumny tworzone na podstawie danych już załadowanych do modelu, np. klasyfikacja transakcji według wartości.
- Filtrowanie i konteksty: Praca na danych z uwzględnieniem kontekstu wiersza, filtra lub raportu.
Przykładowa miara DAX może wyglądać następująco:
Total Sales = SUM(Sales[Amount])
Natomiast prosta kolumna obliczeniowa mogłaby wyglądać tak:
Order Category = IF(Sales[Amount] > 1000, "Duże", "Małe")
DAX działa w modelu danych, co oznacza, że jego operacje są wykonywane w czasie rzeczywistym, w zależności od interakcji użytkownika z wizualizacjami. To czyni go niezwykle istotnym narzędziem przy budowaniu dynamicznych i interaktywnych raportów.
Porównanie podstawowych właściwości języka M i DAX:
| Cecha | Język M (Power Query) | Język DAX (Model danych) |
|---|---|---|
| Moment działania | Podczas ładowania danych | Podczas analizy danych w raporcie |
| Lokalizacja | Edytor Power Query | Model danych / widok danych |
| Typ danych | Źródłowe dane zewnętrzne | Dane przetworzone i załadowane |
Zrozumienie podstaw DAX jest kluczowe dla efektywnego filtrowania danych w gotowym modelu, zwłaszcza w kontekście interakcji użytkownika z raportami.
Filtrowanie danych w modelu danych za pomocą DAX
Po załadowaniu danych do modelu Power BI, dalsze filtrowanie odbywa się głównie przy użyciu języka DAX (Data Analysis Expressions). W przeciwieństwie do Power Query, który odpowiada za przekształcenia danych przed ich załadowaniem, DAX operuje na już zaimportowanych tabelach i służy do tworzenia dynamicznych miar, kolumn obliczeniowych oraz tabel, które reagują na interakcje użytkownika w raporcie.
DAX umożliwia filtrowanie danych w sposób kontekstowy – zależnie od wyboru użytkownika, hierarchii danych czy zastosowanych relacji między tabelami. Można go używać do:
- tworzenia miar, które uwzględniają konkretne warunki filtrowania,
- tworzenia kolumn obliczeniowych na podstawie reguł logicznych,
- tworzenia tabel tymczasowych z ograniczonym zakresem danych.
Przykładowe funkcje DAX do filtrowania danych to: CALCULATE(), FILTER(), ALL(), KEEPFILTERS() i REMOVEFILTERS().
SalesLastYear =
CALCULATE(
SUM('Sales'[Amount]),
'Sales'[Year] = 2023
)
Powyższy przykład tworzy miarę, która sumuje sprzedaż tylko dla roku 2023. Zastosowany filtr jest dynamiczny i może być zagnieżdżany z innymi warunkami.
Porównanie filtrowania w DAX w kontekście jego zastosowania w modelu danych:
| Obszar | Charakterystyka |
|---|---|
| Miejsce działania | Model danych po załadowaniu (z poziomu raportu) |
| Zakres działania | Działa na danych już wczytanych do modelu |
| Typ filtrowania | Kontekstowy, dynamiczny, zależny od interakcji użytkownika |
| Typowe zastosowania | Tworzenie miar, kolumn i tabel reaktywnych na filtry i slicery |
Dzięki filtrowaniu opartemu na DAX użytkownicy mogą tworzyć elastyczne raporty, które automatycznie dostosowują wyniki w zależności od kontekstu prezentowanych danych. Jeśli chcesz pogłębić swoje umiejętności w tym zakresie, sprawdź Kurs DAX – praca w języku DAX i użyteczne funkcje, wizualizacja danych w Power BI.
Różnice kontekstowe między filtrowaniem w M i DAX
Filtrowanie danych w Power BI można realizować za pomocą dwóch głównych mechanizmów: języka M w Power Query oraz języka DAX w modelu danych. Choć oba podejścia umożliwiają selekcję danych, różnią się one znacząco pod względem kontekstu działania, miejsca zastosowania oraz wpływu na model danych.
| Aspekt | Język M (Power Query) | Język DAX (Model danych) |
|---|---|---|
| Miejsce działania | Podczas ładowania danych (ETL) | Na załadowanych danych w modelu |
| Wpływ na dane | Trwale usuwa dane przed załadowaniem | Dynamicznie filtruje w raportach i miarach |
| Zależność od kontekstu | Niezależne od interakcji użytkownika | Silnie zależne od kontekstu raportu (filtrowania, slicerów) |
| Elastyczność | Dobre do wczesnej transformacji danych | Lepsze do obliczeń analitycznych w czasie rzeczywistym |
Przykład filtrowania w języku M (Power Query):
Table.SelectRows(Sales, each [Year] = 2023)
Przykład filtrowania w języku DAX:
CALCULATE(SUM(Sales[Amount]), Sales[Year] = 2023)
Jak widać, filtrowanie w M odbywa się jednorazowo podczas przetwarzania danych, natomiast filtrowanie w DAX może reagować na działania użytkownika i zmieniający się kontekst wizualizacji. Zrozumienie tych różnic jest kluczowe dla optymalnego projektowania raportów i modeli w Power BI.
Porównanie praktycznych zastosowań filtrowania w Power Query i modelu danych
Filtrowanie danych w Power BI może być realizowane na różnych etapach przetwarzania — zarówno podczas ładowania danych w Power Query przy użyciu języka M, jak i po ich zaimportowaniu do modelu danych za pomocą języka DAX. Wybór odpowiedniego podejścia zależy od kontekstu analizy, wydajności oraz celu raportu.
Power Query służy głównie do wstępnego przygotowania danych. Filtrowanie na tym etapie pozwala ograniczyć ilość danych importowanych do modelu, co może poprawić jego wydajność. To dobre rozwiązanie, gdy chcemy wykluczyć zbędne informacje już na samym początku, np. usunąć archiwalne wiersze lub pozostawić tylko dane z określonych źródeł.
Model danych i język DAX pozwalają na bardziej dynamiczne filtrowanie, zależne od interakcji użytkownika lub kontekstu wizualizacji. Jest to szczególnie przydatne w analizach ad-hoc, filtrowaniu zależnym od wyborów w slicerach oraz w tworzeniu obliczeń miar z uwzględnieniem kontekstu raportu.
W praktyce często łączy się oba podejścia — Power Query do oczyszczania i wstępnego filtrowania, a DAX do tworzenia elastycznych analiz. Na przykład można w Power Query zaimportować tylko dane z ostatnich 5 lat, a potem w modelu przy pomocy DAX tworzyć miary prezentujące wyniki tylko dla aktualnie wybranego roku.
Kluczowe jest zrozumienie, że język M działa na etapie pobierania danych, a DAX na etapie analizy — co wpływa zarówno na wydajność, jak i możliwości analityczne rozwiązania.
Wnioski i rekomendacje dotyczące wyboru podejścia
Filtrowanie danych w Power BI może być realizowane na dwóch głównych etapach: podczas pobierania i przekształcania danych w Power Query przy użyciu języka M oraz po załadowaniu danych do modelu, z wykorzystaniem języka DAX. Oba podejścia mają swoje unikalne cechy i zastosowania, które warto rozważyć w zależności od potrzeb analitycznych i wydajnościowych.
Power Query (język M) najlepiej sprawdza się w przypadku wstępnego oczyszczania i ograniczania danych przed ich załadowaniem do modelu. Pozwala to zmniejszyć rozmiar danych i poprawić ogólną wydajność raportów. Filtrowanie na tym etapie jest trwałe – raz zastosowane, eliminuje dane z dalszych etapów analizy.
Model danych (język DAX) oferuje znacznie większą elastyczność, jeśli chodzi o filtrowanie kontekstowe, dynamiczne i zależne od interakcji użytkownika. Pozwala to na tworzenie zaawansowanych miar i wizualizacji, które reagują na wybory w raportach, bez modyfikowania samego źródła danych.
W praktyce oba podejścia można i warto łączyć: Power Query do przygotowania danych, a DAX do analizy i wizualizacji. Wybór odpowiedniego narzędzia zależy więc przede wszystkim od celu filtrowania – czy ma ono na celu oczyszczenie i ograniczenie danych, czy też dynamiczną analizę w kontekście interaktywnych raportów.
Podejmując decyzję, warto również uwzględnić takie czynniki jak wydajność, potrzeba odtwarzalności danych źródłowych oraz stopień zaawansowania użytkowników tworzących model.