DAX bez pułapek: różnice, które zmieniają wyniki miar i działanie YTD/MTD

Dowiedz się, dlaczego miary DAX dają inne wyniki niż kolumny obliczeniowe i jak poprawnie zbudować calendar table, aby YTD oraz MTD działały bez błędów w Power BI.
23 sierpnia 2026
blog

Dlaczego miary DAX dają inne wyniki niż kolumny obliczeniowe i co wybrać?

Miary DAX i kolumny obliczeniowe często dają inne wyniki, ponieważ są liczone w innym momencie i w innym kontekście. Kolumna obliczeniowa jest wyliczana dla każdego wiersza danych podczas odświeżania modelu i zapisuje wynik na stałe w tabeli. Miara natomiast nie zapisuje wartości w danych źródłowych, tylko oblicza wynik dynamicznie w chwili użycia w wizualizacji, zależnie od filtrów, relacji, segmentów i układu raportu.

Najważniejsza różnica dotyczy kontekstu. Kolumna obliczeniowa działa przede wszystkim w kontekście wiersza, czyli „widzi” pojedynczy rekord i wylicza coś dla niego. Miara działa głównie w kontekście filtra, czyli liczy wynik dla aktualnie wybranego zbioru danych. To oznacza, że ta sama logika zapisana jako kolumna i jako miara może zwrócić inne liczby, bo odpowiada na inne pytanie analityczne. Kolumna mówi zwykle: „jaka jest wartość dla tego rekordu?”, a miara: „jaki jest wynik dla aktualnie przefiltrowanej grupy rekordów?”.

Różnice widać szczególnie wtedy, gdy ktoś najpierw tworzy kolumnę z obliczeniem po wierszach, a potem sumuje ją w raporcie, oczekując identycznego efektu jak z miary. To nie zawsze działa. Miara może przeliczać wynik na poziomie agregacji, a nie jako sumę wcześniej policzonych wartości wierszowych. W efekcie „suma z kolumny” i „wynik miary” bywają poprawne jednocześnie, ale znaczą co innego.

Wybór zależy od celu. Jeśli potrzebujesz cechy przypisanej do każdego rekordu, kategorii, flagi logicznej albo wartości, która ma być fizycznie przechowywana i używana dalej jak zwykłe pole, właściwa jest kolumna obliczeniowa. Jeśli potrzebujesz wyniku analitycznego, który ma reagować na filtry użytkownika, poziom agregacji i kontekst raportu, właściwa jest miara.

W praktyce w modelu raportowym najczęściej należy wybierać miary do obliczeń typu suma, udział, narastająco, średnia, ranking czy porównania okresów. Kolumny obliczeniowe stosuje się wtedy, gdy wynik ma istnieć na poziomie pojedynczego wiersza niezależnie od tego, jak później filtrowany jest raport. Dodatkowo kolumny zwiększają rozmiar modelu, bo przechowują dane, a miary tego nie robią.

Najkrótsza zasada jest taka: jeśli pytasz o wynik, który ma się zmieniać wraz z filtrowaniem raportu, użyj miary; jeśli tworzysz atrybut rekordu zapisany w modelu, użyj kolumny obliczeniowej. Różne wyniki nie są więc błędem same w sobie, tylko skutkiem tego, że te dwa elementy DAX działają według innej logiki obliczeń.

💡 Protip: Jeśli wynik ma reagować na filtry, segmenty i poziom agregacji w raporcie, wybierz miarę; jeśli ma być stałą cechą pojedynczego rekordu, użyj kolumny obliczeniowej. Gdy miara i kolumna dają inne liczby, zwykle nie oznacza to błędu, tylko różnicę między kontekstem filtra a kontekstem wiersza.

Jak zbudować calendar table w DAX, żeby poprawnie działały YTD i MTD?

Aby funkcje typu TOTALYTD, DATESYTD, TOTALMTD i DATESMTD działały poprawnie, tabela kalendarza musi być pełną, ciągłą tabelą dat, zawierającą każdy dzień bez luk w całym analizowanym zakresie. Nie może to być lista dat tylko z transakcji, bo brakujące dni zaburzają logikę inteligencji czasu. Taka tabela powinna być oznaczona jako tabela dat w modelu i mieć kolumnę typu data, bez duplikatów i bez wartości pustych.

Najbezpieczniej utworzyć ją jako osobną tabelę DAX, na przykład: Calendar = CALENDAR(DATE(2020,1,1), DATE(2030,12,31)). Jeśli zakres ma wynikać z danych, można użyć CALENDAR(MIN(Fact[Date]), MAX(Fact[Date])), ale w praktyce często lepiej dodać zapas przed i po faktycznym zakresie, aby uniknąć problemów przy raportach obejmujących przyszłe lub wcześniejsze okresy.

Sama kolumna daty nie wystarczy. W tabeli kalendarza warto dodać kolumny pomocnicze, takie jak rok, numer miesiąca, nazwa miesiąca, kwartał czy klucz sortowania roku i miesiąca. Dla działania YTD i MTD najważniejsze jest jednak to, aby relacja między tabelą kalendarza a tabelą faktów była oparta na kolumnie daty i prowadziła z kalendarza do faktów. W typowym modelu relacja powinna być aktywna i typu jeden-do-wielu, gdzie tabela kalendarza jest po stronie „jeden”.

Kluczowe jest też używanie w miarach kolumny daty właśnie z tabeli kalendarza, a nie bezpośrednio z tabeli faktów. Przykładowo poprawny wzorzec to Sprzedaż YTD = TOTALYTD([Sprzedaż], Calendar[Date]), a nie odwołanie do Fact[Date]. Funkcje time intelligence w DAX zakładają pracę na poprawnie zdefiniowanej tabeli dat, dlatego odwołanie do daty z faktów często daje niepełne albo mylące wyniki.

Jeżeli rok obrotowy nie kończy się 31 grudnia, trzeba to jawnie wskazać w funkcjach YTD, na przykład przez parametr końca roku. W przeciwnym razie DAX przyjmie standardowy rok kalendarzowy. MTD działa w obrębie miesiąca, więc wymaga tej samej jakości tabeli dat, ale nie potrzebuje dodatkowej definicji końca roku.

W skrócie: poprawna calendar table w DAX to osobna, pełna, ciągła tabela wszystkich dni, oznaczona jako tabela dat, połączona aktywną relacją z faktami i używana bezpośrednio w miarach YTD oraz MTD. To właśnie te warunki decydują, czy obliczenia narastające będą liczone zgodnie z oczekiwaniem.

💡 Protip: Zbuduj osobną, pełną i ciągłą tabelę dat obejmującą każdy dzień w analizowanym zakresie, oznacz ją jako Date Table i połącz aktywną relacją 1:* z faktami. W miarach YTD/MTD zawsze odwołuj się do Calendar[Date], a nie do daty z tabeli faktów, bo to najczęstsza przyczyna błędnych narastających wyników.

Najczęściej zadawane pytania i odpowiedzi odnośnie DAX bez pułapek: różnice, które zmieniają wyniki miar i działanie YTD/MTD

Dlaczego suma z kolumny obliczeniowej może różnić się od wyniku miary DAX?

Suma z kolumny obliczeniowej może dać inny wynik niż miara, bo oba obliczenia działają w innym kontekście. Kolumna liczy wartość dla każdego wiersza podczas odświeżania modelu, a miara przelicza wynik dynamicznie dla aktualnie filtrowanego zbioru danych. Dlatego różnica nie musi oznaczać błędu, tylko odmienną logikę obliczenia.

Kiedy lepiej użyć miary DAX zamiast kolumny obliczeniowej?

Miary DAX warto używać wtedy, gdy wynik ma reagować na filtry, segmenty i poziom agregacji w raporcie. To najlepszy wybór dla obliczeń analitycznych, takich jak sumy, średnie, udziały, rankingi czy wartości narastające. Miara nie zapisuje danych w tabeli, więc lepiej sprawdza się tam, gdzie wynik ma być liczony na bieżąco.

W jakich sytuacjach kolumna obliczeniowa jest lepsza od miary?

Kolumna obliczeniowa jest lepsza wtedy, gdy chcesz przypisać stałą cechę do każdego rekordu. Sprawdza się, gdy potrzebujesz pola używanego jak zwykły atrybut w modelu. Typowe zastosowania to:

  • flagi logiczne,
  • kategorie i klasyfikacje,
  • wartości wyliczane dla pojedynczego wiersza.

Taki wynik jest zapisywany w tabeli i nie zmienia się wraz z filtrowaniem raportu.

Dlaczego YTD i MTD nie działają poprawnie na dacie z tabeli faktów?

YTD i MTD często działają błędnie na dacie z tabeli faktów, bo funkcje time intelligence oczekują poprawnie zdefiniowanej tabeli dat. Data w faktach zwykle nie tworzy pełnego, ciągłego kalendarza bez luk. Dlatego w miarach narastających należy odwoływać się do kolumny daty z osobnej tabeli kalendarza, a nie bezpośrednio do dat transakcyjnych.

Jakie warunki musi spełniać tabela kalendarza, żeby TOTALYTD i TOTALMTD działały poprawnie?

Tabela kalendarza musi być pełna, ciągła i poprawnie połączona z faktami. Najważniejsze warunki to:

  • zawiera każdy dzień bez luk,
  • ma unikalną kolumnę typu data bez pustych wartości,
  • jest oznaczona jako tabela dat,
  • ma aktywną relację jeden-do-wielu z tabelą faktów.

Spełnienie tych warunków pozwala funkcjom YTD i MTD liczyć narastanie zgodnie z oczekiwaniem.

Czy calendar table w DAX powinna zawierać tylko daty z transakcji?

Calendar table nie powinna zawierać wyłącznie dat z transakcji. Taka lista bywa niepełna i może mieć luki, co psuje działanie funkcji inteligencji czasu. Bezpieczniej utworzyć osobną tabelę obejmującą cały analizowany zakres dni, a często także dodać zapas przed i po realnym zakresie danych.

Jakie są najczęstsze błędy przy budowie miar YTD i MTD w DAX?

Najczęstsze błędy dotyczą tabeli dat, relacji i użycia niewłaściwej kolumny w miarze. Problemy zwykle pojawiają się, gdy:

  • kalendarz nie jest ciągły,
  • tabela dat nie została oznaczona jako Date Table,
  • relacja z faktami jest nieaktywna lub źle ustawiona,
  • miara korzysta z daty z tabeli faktów zamiast z Calendar[Date].

Jak ustawić YTD w DAX, jeśli firma pracuje na roku obrotowym zamiast kalendarzowego?

YTD dla roku obrotowego wymaga jawnego wskazania końca roku w funkcji. Jeśli tego nie zrobisz, DAX przyjmie standardowy rok kończący się 31 grudnia. Oznacza to, że miara może być poprawna technicznie, ale niezgodna z logiką biznesową. MTD działa w obrębie miesiąca, więc nie wymaga takiego ustawienia końca roku.

icon

Formularz kontaktowyContact form

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