Kontekst w DAX (row context i filter context) wyjaśniony na prostych przykładach

Zrozum kontekst wiersza i filtrowania w DAX dzięki prostym przykładom. Artykuł idealny dla początkujących użytkowników Power BI i języka DAX.
31 stycznia 2026
blog
Poziom: Średnio zaawansowany

Artykuł przeznaczony dla osób uczących się DAX w Power BI/Power Pivot, w szczególności początkujących i średnio zaawansowanych analityków tworzących miary oraz modele danych.

Z tego artykułu dowiesz się

  • Czym jest kontekst wiersza i kiedy pojawia się w DAX?
  • Jak działa kontekst filtrowania w miarach i wizualizacjach Power BI?
  • Jakie są najczęstsze błędy wynikające z nieprawidłowego rozumienia kontekstu i jak ich unikać?

Wprowadzenie do języka DAX i roli kontekstu

DAX (Data Analysis Expressions) to język formuł używany w Power BI, Excel Power Pivot oraz Analysis Services Tabular do tworzenia wyrażeń obliczeniowych, takich jak miary, kolumny obliczeniowe i tabele. Dzięki DAX możliwe jest przekształcanie danych, tworzenie zaawansowanych analiz oraz modelowanie informacji w sposób dynamiczny i interaktywny.

Jednym z kluczowych aspektów pracy z DAX-em jest zrozumienie pojęcia kontekstu. To właśnie kontekst decyduje o tym, jak i kiedy dane zostaną uwzględnione w obliczeniach. Nawet prosta formuła może dawać różne wyniki w zależności od tego, w jakim kontekście jest używana.

W języku DAX wyróżniamy dwa główne typy kontekstu:

  • Kontekst wiersza – odnosi się do pojedynczego wiersza tabeli i jest zazwyczaj aktywowany podczas tworzenia kolumn obliczeniowych.
  • Kontekst filtrowania – dotyczy zbioru danych ograniczonego przez filtry i jest typowy dla miar oraz wyników zależnych od interakcji użytkownika z raportem.

Zrozumienie, jak działają te dwa typy kontekstu i w jaki sposób wpływają na obliczenia, ma kluczowe znaczenie dla poprawnego tworzenia analiz w DAX. To wiedza pozwalająca uniknąć błędów i w pełni wykorzystać potencjał narzędzi analitycznych takich jak Power BI.

Czym jest kontekst wiersza w DAX?

Kontekst wiersza (ang. row context) to jeden z podstawowych mechanizmów działania języka DAX, który odgrywa kluczową rolę przy obliczeniach wykonywanych na poziomie pojedynczych wierszy tabeli. Można go rozumieć jako sytuację, w której DAX ma dostęp do wartości kolumn konkretnego wiersza i może na ich podstawie wykonywać operacje.

Kontekst wiersza powstaje automatycznie podczas korzystania z funkcji iteracyjnych, takich jak SUMX, FILTER czy ADDCOLUMNS. W tych przypadkach DAX przechodzi przez każdy wiersz tabeli i wykonuje określone działanie z uwzględnieniem danych tylko z tego jednego wiersza. Dzięki temu możliwe jest tworzenie dynamicznych obliczeń zależnych od danych źródłowych w tabeli.

Podczas szkoleń Cognity ten temat wraca regularnie – dlatego zdecydowaliśmy się go omówić również tutaj.

Najczęściej kontekst wiersza pojawia się w kolumnach obliczeniowych, gdzie formuła jest przeliczana indywidualnie dla każdego wiersza. W przypadku miar, które agregują dane na poziomie całych tabel lub filtrowanych fragmentów danych, sam kontekst wiersza nie wystarcza — potrzebne jest również zrozumienie, jak działa kontekst filtrowania, aby uzyskać poprawne rezultaty.

Podsumowując, kontekst wiersza to mechanizm, który pozwala DAX-owi "znaleźć się" w konkretnym wierszu tabeli i używać jego wartości w obliczeniach. Jest to fundament wielu operacji w modelu danych, szczególnie przy tworzeniu kolumn obliczeniowych oraz przy stosowaniu funkcji przetwarzających po jednym wierszu na raz.

Czym jest kontekst filtrowania w DAX?

Kontekst filtrowania (filter context) to jedno z kluczowych pojęć w DAX, które decyduje o tym, które dane są brane pod uwagę podczas wykonywania obliczeń. Mówiąc najprościej, kontekst filtrowania określa zestaw widocznych danych, dla których wykonywana jest dana formuła – np. miara lub wyrażenie. Jest on tworzony automatycznie przez takie elementy raportu jak tabele przestawne, segmentatory (slicery), filtry oraz kolumny i wiersze w tabelach wizualizacji.

Gdy tworzysz miarę lub używasz funkcji agregujących takich jak SUM, AVERAGE czy COUNT, DAX oblicza wynik wyłącznie w kontekście danych, które są „widoczne” w danym momencie – i to właśnie ten widoczny zestaw danych określa kontekst filtrowania.

Przykład prostego zapytania, które korzysta z kontekstu filtrowania:

SalesAmount := SUM(Sales[Amount])

Miara SalesAmount zsumuje tylko te wartości z kolumny Sales[Amount], które są aktualnie „przepuszczone” przez filtry – np. tylko z wybranego roku lub kategorii produktu.

Jak powstaje kontekst filtrowania?

  • Wizualizacje raportów: wybór konkretnych wartości w tabeli lub wykresie tworzy dynamiczne filtry.
  • Segmentatory i filtry: użytkownik wybierając np. konkretny rok zawęża dane do wybranego zakresu.
  • Relacje między tabelami: kontekst filtrowania może „przepływać” przez relacje – np. wybór klienta może filtrować sprzedaż tylko dla tego klienta.
  • Funkcje DAX: takie jak CALCULATE czy FILTER pozwalają programistycznie modyfikować lub nadpisywać istniejący kontekst filtrowania.

Porównanie: kontekst filtrowania a brak kontekstu

Sytuacja Kontekst filtrowania Brak kontekstu filtrowania
Miara w tabeli z kategoriami produktów Miara działa osobno dla każdej kategorii Miara zwraca sumę dla wszystkich danych
Użycie segmentatora (slicer) z wybranym rokiem Dane ograniczone do tego roku Zobaczysz dane ze wszystkich lat

Kontekst filtrowania jest fundamentem działania DAX w środowisku analitycznym – dzięki niemu można dynamicznie reagować na wybory użytkownika w raporcie i wyświetlać wyniki dopasowane do bieżącego widoku danych. Jeśli chcesz pogłębić swoją wiedzę na temat DAX-a i nauczyć się wykorzystywać kontekst w praktyce, sprawdź Kurs DAX - praca w języku DAX i użyteczne funkcje, wizualizacja danych w Power BI.

Różnice między kontekstem wiersza a kontekstem filtrowania

W języku DAX kontekst odgrywa kluczową rolę w sposobie obliczania wartości. Istnieją dwa główne typy kontekstu: kontekst wiersza oraz kontekst filtrowania. Choć oba wpływają na sposób działania formuł, różnią się znacząco swoim zastosowaniem i momentem działania.

Zespół trenerski Cognity zauważa, że właśnie ten aspekt sprawia uczestnikom najwięcej trudności.

Cecha Kontekst wiersza (Row Context) Kontekst filtrowania (Filter Context)
Definicja Odnosi się do pojedynczego wiersza tabeli, dla którego wykonywane jest obliczenie. Odnosi się do zestawu filtrów zastosowanych do danych przed wykonaniem obliczenia.
Źródło Tworzony automatycznie np. w kolumnach obliczeniowych lub w iteracyjnych funkcjach takich jak SUMX. Pochodzi z wizualizacji, slicerów, segmentów, lub jest tworzony explicite przez funkcje DAX jak CALCULATE.
Zakres działania Dotyczy jednego wiersza w danym kontekście. Dotyczy zbioru danych — może ograniczać wiele wierszy jednocześnie.
Typowe zastosowanie Kolumny obliczeniowe, funkcje iteracyjne (np. SUMX, FILTER). Miary (Measures), wizualizacje z filtrami, funkcje CALCULATE i ALL.
Dostępność w miarach Nie występuje automatycznie w miarach. Obecny domyślnie w miarach, pochodzi z kontekstu wizualizacji.

Aby lepiej zrozumieć te różnice, spójrzmy na prosty przykład:

-- Kontekst wiersza
Sales[Total] = Sales[Quantity] * Sales[Price]

-- Kontekst filtrowania
Total Sales := CALCULATE(SUM(Sales[Total]), Product[Category] = "Elektronika")

W pierwszym przypadku obliczenie wykonywane jest dla każdego wiersza tabeli Sales, uwzględniając wartości z tego konkretnego wiersza – to klasyczny kontekst wiersza. Natomiast w drugim przykładzie funkcja CALCULATE zmienia kontekst filtrowania tak, by uwzględnić tylko produkty z kategorii "Elektronika".

Zrozumienie, jak i kiedy działa każdy z typów kontekstu, jest kluczowe do tworzenia poprawnych i wydajnych formuł DAX.

Przykłady zastosowania kontekstu w praktyce

Aby lepiej zrozumieć, jak działa kontekst w DAX, warto przyjrzeć się kilku praktycznym przykładom. Kontekst — zarówno wiersza, jak i filtrowania — wpływa bezpośrednio na sposób obliczania wartości w miarach i kolumnach obliczeniowych. Ich poprawne zrozumienie pozwala tworzyć bardziej precyzyjne i dynamiczne obliczenia w modelu danych.

1. Kontekst wiersza – kolumny obliczeniowe

Kolumny obliczeniowe w DAX automatycznie działają w kontekście wiersza. Oznacza to, że każda formuła w kolumnie jest obliczana osobno dla każdego wiersza tabeli.

Sales[TotalPrice] = Sales[Quantity] * Sales[UnitPrice]

W tym przykładzie każda wartość w kolumnie TotalPrice jest liczona niezależnie na podstawie danych z danego wiersza tabeli Sales.

2. Kontekst filtrowania – miary

Miary są agregacjami, które działają w kontekście filtrowania — czyli biorą pod uwagę filtry zastosowane przez użytkownika (np. wybór daty, kategorii, regionu itp.).

Total Sales := SUM(Sales[TotalPrice])

Ta miara zwróci różne wartości w zależności od tego, w jakim kontekście filtrowania zostanie użyta — np. w wierszu tabeli przestawnej z filtrem na konkretny miesiąc lub produkt.

3. Zastosowanie obu kontekstów razem

Czasami DAX wykorzystuje oba rodzaje kontekstu jednocześnie. Przykładem może być sytuacja, gdy chcemy obliczyć udział sprzedaży danego produktu w całkowitej sprzedaży, zachowując filtr kontekstu tabeli przestawnej.


Sales Share := 
    DIVIDE(
        SUM(Sales[TotalPrice]),
        CALCULATE(SUM(Sales[TotalPrice]), ALL(Products))
    )

W tym przypadku funkcja CALCULATE zmienia kontekst filtrowania, usuwając filtr na konkretny produkt, co umożliwia porównanie sprzedaży pojedynczej pozycji do całkowitej sprzedaży.

4. Tabela porównawcza — przykład działania kontekstów

Typ kontekstu Zastosowanie Typ formuły
Kontekst wiersza Obliczenia na poziomie jednego wiersza Kolumny obliczeniowe
Kontekst filtrowania Obliczenia zależne od filtrów raportu Miary
Oba konteksty Zaawansowane porównania i obliczenia dynamiczne Miary z funkcjami CALCULATE, ALL itp.

Zastosowanie kontekstu w praktyce pozwala tworzyć elastyczne, responsywne raporty, które reagują na wybory użytkownika i prezentują dane w odpowiednim ujęciu analitycznym. Jeśli chcesz jeszcze lepiej opanować tworzenie miar i modeli w DAX, sprawdź Kurs DAX zaawansowany: tworzenie skutecznych modeli danych.

Typowe błędy wynikające z nieprawidłowego zrozumienia kontekstu

Praca z językiem DAX wymaga nie tylko znajomości funkcji, ale także zrozumienia, w jakim kontekście są one wykonywane. Nieuwzględnienie kontekstu wiersza lub kontekstu filtrowania może prowadzić do błędnych wyników, które trudno zdiagnozować. Poniżej przedstawiamy najczęściej spotykane problemy wynikające z nieprawidłowego stosowania kontekstu.

  • Użycie funkcji agregujących bez właściwego kontekstu filtrowania

    Jednym z częstych błędów jest stosowanie funkcji takich jak SUM() lub AVERAGE() bez zrozumienia, że działają one w kontekście filtrowania. Może to prowadzić do tego, że miara zlicza dane z całej tabeli, a nie tylko z aktualnie filtrowanego zestawu danych.

  • Niewłaściwe stosowanie funkcji iteratorów, np. SUMX()

    Funkcje iterujące, takie jak SUMX(), działają w kontekście wiersza. Błąd pojawia się, gdy użytkownik nie uwzględnia, że dla każdego wiersza kontekst jest inny, a wynik nie zawsze będzie taki sam jak przy użyciu klasycznych funkcji agregujących.

  • Brak użycia funkcji CALCULATE() do zmiany kontekstu

    Wielu użytkowników zapomina, że tylko niektóre funkcje pozwalają modyfikować lub rozszerzać kontekst filtrowania, a CALCULATE() jest jedną z kluczowych w tym zakresie. Nieumiejętne posługiwanie się tą funkcją skutkuje błędnymi wynikami miar.

  • Zakładanie, że kontekst działa tak samo jak w Excelu

    Osoby przyzwyczajone do Excela często oczekują, że działania w DAX będą analogiczne. Tymczasem DAX, mimo podobieństw składniowych, działa na innych zasadach, szczególnie jeśli chodzi o sposób filtrowania danych.

  • Nieświadome tworzenie miar, które nie uwzględniają hierarchii modelu danych

    Tworzenie miar bez sprawdzenia, jak działa kontekst w hierarchicznym modelu danych (np. w relacjach między tabelami), może prowadzić do błędnych wyników lub pustych wartości.

W poniższej tabeli zestawiono kilka typowych pomyłek i ich przyczyny:

Objaw błędu Możliwa przyczyna Rozwiązanie
Miara zwraca zawsze tę samą wartość Brak zmiennego kontekstu filtrowania Użyj CALCULATE() z odpowiednimi filtrami
Miara nie zmienia się przy filtrowaniu tabeli Miara została napisana w kontekście wiersza Przepisz miarę, uwzględniając kontekst filtrowania
Zduplikowane lub niespójne wartości Nieprawidłowe iterowanie po tabeli Użyj funkcji takich jak SUMX() z ostrożnością

Aby unikać tych błędów, warto poświęcić czas na zrozumienie, w jakim kontekście działa każda funkcja i jak konteksty wpływają na wynik końcowy.

Jak poprawnie tworzyć miary przy użyciu kontekstu

Tworzenie skutecznych miar w języku DAX wymaga dobrego zrozumienia, jak działa kontekst w modelu danych. Miary są dynamicznymi obliczeniami, które reagują na sposób filtrowania i agregowania danych w wizualizacjach, dlatego właściwe wykorzystanie kontekstu jest kluczowe dla uzyskania poprawnych wyników.

Podstawową zasadą jest świadomość, że DAX interpretuje każdą miarę w określonym kontekście filtrowania – czyli zestawie aktywnych filtrów wynikających m.in. z interakcji użytkownika z raportem. Z kolei kontekst wiersza odgrywa istotną rolę w przypadku obliczeń wykonywanych na poziomie pojedynczych rekordów, np. w kolumnach obliczeniowych.

Aby tworzyć miary, które działają zgodnie z oczekiwaniami, warto kierować się kilkoma prostymi zasadami:

  • Używaj funkcji agregujących tam, gdzie chcesz uwzględnić kontekst filtrowania – np. SUM, AVERAGE, COUNTROWS.
  • Stosuj funkcje modyfikujące kontekst, takie jak CALCULATE, gdy chcesz zmienić lub rozszerzyć aktualny kontekst filtrowania dla konkretnego obliczenia.
  • Unikaj mieszania funkcji zależnych od różnych kontekstów bez pełnego zrozumienia ich działania – np. użycie EARLIER w miarach może prowadzić do nieoczekiwanych rezultatów, gdyż działa ono w kontekście wiersza.
  • Dobrze zaplanuj strukturę modelu danych – przejrzysta struktura tabel i relacji ułatwia przewidywanie, jak kontekst będzie wpływał na działanie miar.

Prawidłowe tworzenie miar sprowadza się do świadomego zarządzania kontekstem. Dzięki temu możemy tworzyć bardziej precyzyjne, wydajne i czytelne obliczenia, które poprawnie reagują na potrzeby użytkownika raportu.

Podsumowanie i wskazówki dla początkujących

Język DAX (Data Analysis Expressions) jest kluczowym narzędziem w modelowaniu danych i tworzeniu zaawansowanych analiz w Power BI, Power Pivot i Analysis Services. Jednym z najważniejszych konceptów, które należy zrozumieć podczas pracy z DAX, jest kontekst. To właśnie kontekst decyduje, jak DAX interpretuje formuły i jakie dane są uwzględniane podczas obliczeń.

Istnieją dwa główne typy kontekstu:

  • Kontekst wiersza – odnosi się do pojedynczego wiersza tabeli i jest tworzony, gdy formuła działa w obrębie tego konkretnego wiersza, na przykład w kolumnach obliczanych.
  • Kontekst filtrowania – odnosi się do zestawu filtrów zastosowanych do danych, np. przez przeciągnięcie pól do wizualizacji lub przez wykorzystanie funkcji DAX do filtrowania danych w formule.

Zrozumienie, kiedy i jak DAX stosuje te dwa rodzaje kontekstu, jest kluczowe dla tworzenia poprawnych miar i analiz. Początkującym użytkownikom DAX zaleca się zwracanie szczególnej uwagi na to, jak formuły reagują w różnych sytuacjach oraz eksperymentowanie z prostymi modelami danych, aby lepiej zrozumieć mechanizm działania kontekstu.

Wskazówki dla początkujących:

  • Ćwicz na małych, prostych zbiorach danych – łatwiej zauważysz, jakie dane są przetwarzane.
  • Obserwuj, jak zmieniają się wyniki formuł w zależności od użytej wizualizacji lub filtru.
  • Używaj narzędzi takich jak „Zobacz dane” w Power BI, aby analizować kontekst działania formuł.
  • Nie kopiuj formuł bez zrozumienia – nawet drobna zmiana może wpłynąć na kontekst i wynik.

Opanowanie podstaw kontekstu w DAX to pierwszy krok do tworzenia skutecznych, dynamicznych analiz i raportów. Z czasem zrozumienie kontekstu stanie się naturalne i pozwoli na budowanie coraz bardziej zaawansowanych rozwiązań analitycznych. Jeśli chcesz poznać więcej takich przykładów, zapraszamy na szkolenia Cognity, gdzie rozwijamy ten temat w praktyce.

icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments