Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Model danych i relacje

Oznacz jako tabelę dat w Power BI - po co i co się zmienia w DAX

W skrócie

  • Opcja Oznacz jako tabelę dat w Power BI mówi silnikowi, która tabela jest kalendarzem i która jej kolumna jest datą. Bez tego klasyczne funkcje czasowe przy relacji po kluczu liczbowym liczą źle i nie zgłaszają błędu.
  • Po oznaczeniu filtr funkcji czasowej na kolumnie daty usuwa pozostałe filtry kalendarza, na przykład miesiąca z osi. Na kolumnie nieoznaczonej filtr miesiąca zostaje i YTD pokazuje sam bieżący miesiąc.
  • Oznacz tabelę na karcie Narzędzia tabel, wybierz kolumnę typu Data z unikatowymi, ciągłymi datami bez pustych wartości i poczekaj na komunikat Walidacja zakończona pomyślnie.

Opcja Oznacz jako tabelę dat w Power BI wygląda na formalność, dopóki sprzedaż narastająca od początku roku nie pokaże w marcu tej samej kwoty co sam marzec. Trafia na to autor modelu z własnym kalendarzem połączonym z faktami kluczem liczbowym, takim jak DataID w Nordvelli. Pokazujemy, co oznaczenie zmienia w obliczeniach DAX, jakie warunki musi spełnić kolumna daty i jakie komunikaty pokazuje okno, gdy ich nie spełnia.

Jak to wygląda w praktyce

Miara narastająca od początku roku zbudowana na TOTALYTD albo DATESYTD w macierzy z rokiem i miesiącem na wierszach pokazuje to samo co zwykła sprzedaż miesiąca. Silnik nie zgłasza błędu, a liczba wygląda wiarygodnie, dopóki nie porównasz jej z sumą kolejnych miesięcy.

Na modelu Nordvelli sprawdziliśmy to dwiema kolumnami tej samej tabeli DimKalendarz. Kolumna Data jest wskazana w oknie Oznacz jako tabelę dat. Kolumna PierwszyDzienMiesiaca też ma typ Data, ale wskazana nie jest. Dla marca 2025 funkcja DATESYTD na kolumnie Data daje 26 830 769,96 zł, czyli sprzedaż od stycznia do marca. Ta sama funkcja na kolumnie PierwszyDzienMiesiaca daje 8 698 690,25 zł, czyli sam marzec. W czerwcu 2025 rozjazd jest większy: 54 313 408,92 zł wobec 8 658 638,97 zł.

Dlaczego tak się dzieje

Funkcje inteligencji czasowej, czyli funkcje DAX rozszerzające albo przesuwające okres (TOTALYTD, DATESYTD, SAMEPERIODLASTYEAR), zmieniają filtr na kolumnie daty. Macierz z rokiem i miesiącem filtruje jednak inne kolumny kalendarza: Rok i Miesiac. Gdy tabela jest oznaczona, filtr funkcji czasowej na wskazanej kolumnie zdejmuje pozostałe filtry tej tabeli, więc warunek Miesiac = 3 przestaje działać i zostaje okres od 1 stycznia. Na kolumnie nieoznaczonej warunek miesiąca zostaje, a część wspólna okresu styczeń-marzec z samym marcem to marzec.

Według dokumentacji Microsoft oznaczenie jest obowiązkowe przy klasycznych funkcjach czasowych oraz wtedy, gdy relacja kalendarza z faktami opiera się na kolumnie innego typu niż data, na przykład na kluczu liczbowym w postaci 20241231. Tak jest w Nordvelli: FaktSprzedaz[DataID] łączy się z DimKalendarz[DataID], a kolumna Data służy funkcjom czasowym, co opisujemy w lekcji o modelu danych i relacjach. Dokumentacja wymienia jeszcze jeden powód: zaawansowane filtry dat w tabelach przestawnych Excela opartych na modelu Power BI.

Co zrobić krok po kroku

  1. Sprawdź, czy model ma już oznaczoną tabelę. W menu tabeli w panelu Dane (prawy przycisk na nazwie) oznaczona tabela ma ptaszek przy pozycji Oznacz jako tabelę dat. To samo pokaże zapytanie w widoku zapytań w języku DAX. W Nordvelli zwraca jedną tabelę: DimKalendarz.
    EVALUATE
    SELECTCOLUMNS(
        FILTER(INFO.TABLES(), [DataCategory] = "Time"),
        "Tabela oznaczona jako tabela dat", [Name]
    )
  2. Zanim oznaczysz tabelę, sprawdź kolumnę daty. Według dokumentacji Microsoft musi mieć unikatowe wartości, nie może mieć pustych wartości ani brakujących dni, a przy typie Data/godzina każda wartość musi mieć tę samą godzinę. W Nordvelli zapytanie zwraca 1826 wierszy, 1826 unikatowych dat, zero pustych, zakres od 1.01.2022 do 31.12.2026 i 1826 dni w tym zakresie, czyli kalendarz jest ciągły i obejmuje pełne lata.
    EVALUATE
    ROW(
        "Wiersze", COUNTROWS(DimKalendarz),
        "Unikatowe daty", DISTINCTCOUNT(DimKalendarz[Data]),
        "Puste", COUNTBLANK(DimKalendarz[Data]),
        "Od", MIN(DimKalendarz[Data]),
        "Do", MAX(DimKalendarz[Data]),
        "Dni w zakresie", DATEDIFF(MIN(DimKalendarz[Data]), MAX(DimKalendarz[Data]), DAY) + 1
    )
  3. W widoku tabeli zaznacz tabelę kalendarza i na karcie Narzędzia tabel kliknij Oznacz jako tabelę dat. W oknie przestaw przełącznik Oznacz jako tabelę dat na Włączony, a z listy Wybierz kolumnę daty wybierz kolumnę z datą (w Nordvelli Data, typ Data, nie Data i godzina). Poczekaj na komunikat Walidacja zakończona pomyślnie i kliknij Zapisz.
  4. Gdy walidacja się nie uda, okno podaje złamany warunek: „Kolumna dat musi zawierać unikatowe wartości.”, „Kolumna dat nie może mieć luk w datach.”, „Kolumna dat nie może zawierać wartości null.” albo „Kolumna dat może mieć tylko jedną sygnaturę czasową na dzień.” Duplikaty i luki popraw w zapytaniu kalendarza, a kolumnę z godziną zmień na typ Data. Okno ostrzega też, że wbudowane tabele dat skojarzone z tą tabelą zostaną usunięte, a wizualizacje i wyrażenia DAX, które z nich korzystają, mogą przestać działać. Skąd się biorą te tabele, opisujemy w poście automatyczna data i godzina tworzy ukryte tabele dat.
  5. Sprawdź skutek na liczbach. Zapytanie liczy narastającą sprzedaż marca 2025 dwa razy: po oznaczonej kolumnie Data i po nieoznaczonej PierwszyDzienMiesiaca. Wynik to 26 830 769,96 zł i 8 698 690,25 zł. Pierwsza liczba jest równa sprzedaży od stycznia do marca 2025, druga sprzedaży samego marca.
    EVALUATE
    CALCULATETABLE(
        ROW(
            "YTD po kolumnie Data",
                CALCULATE([Łączna sprzedaż], DATESYTD(DimKalendarz[Data])),
            "YTD po kolumnie PierwszyDzienMiesiaca",
                CALCULATE([Łączna sprzedaż], DATESYTD(DimKalendarz[PierwszyDzienMiesiaca]))
        ),
        DimKalendarz[Rok] = 2025,
        DimKalendarz[Miesiac] = 3
    )
  6. Funkcje czasowe zawsze kieruj na oznaczoną kolumnę. Miara Sprzedaż YTD w Nordvelli ma postać TOTALYTD([Łączna sprzedaż], DimKalendarz[Data]). Gdy okres liczysz sam, filtrem na kluczu DataID, pozostałe filtry kalendarza zdejmij jawnie. Zakres od 20250101 do 20250331 przy filtrze marca daje 8 698 690,25 zł, a z dopisanym REMOVEFILTERS(DimKalendarz[Miesiac]) 26 830 769,96 zł.
Okno Oznacz jako tabelę dat w Power BI: przełącznik Włączony, kolumna Data i komunikat Walidacja zakończona pomyślnie
Okno Oznacz jako tabelę dat dla DimKalendarz: przełącznik Włączony, w polu Wybierz kolumnę daty wybrana kolumna Data, pod spodem zielony komunikat Walidacja zakończona pomyślnie i aktywny przycisk Zapisz.

Jak sprawdzić, że problem zniknął

Po zapisaniu kolumna daty w panelu Dane dostaje ikonę kalendarza. Wstaw do macierzy rok i miesiąc z DimKalendarz, a obok miary Łączna sprzedaż i Sprzedaż YTD. W styczniu obie liczby są równe (w 2025 roku 10 699 558,88 zł), w marcu 2025 YTD pokazuje 26 830 769,96 zł, tyle co suma trzech pierwszych miesięcy. Gdy YTD jest równe sprzedaży miesiąca, funkcja liczy na kolumnie, która nie jest oznaczona. Puste wyniki i błędy funkcji czasowych przy brakujących dniach opisujemy w poście o funkcjach inteligencji czasowej i ciągłej tabeli dat.

Według dokumentacji Microsoft nowsza analiza czasowa oparta na kalendarzach, na razie w wersji zapoznawczej, nie wymaga oznaczania tabeli poza szczególnymi przypadkami. W tym trybie polski Power BI Desktop pokazuje opcję z dopiskiem „(nierekomendowane)”. Klasyczne funkcje, takie jak TOTALYTD na kolumnie daty, nadal wymagają oznaczonej tabeli.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Set and use date tables in Power BI Desktop (źródło)
  • Microsoft Learn: Design guidance for date tables in Power BI Desktop (źródło)
  • Microsoft Learn: Implement time-based calculations in Power BI (źródło)
  • Microsoft Learn: Time intelligence functions (DAX) (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: oznaczona tabela DimKalendarz, warunki kolumny Data, DATESYTD na kolumnie oznaczonej i nieoznaczonej, zakres DataID z REMOVEFILTERS i bez.

Zachowanie programu sprawdziliśmy w Power BI Desktop 2.157 (wydanie z sierpnia 2026 r.) z polskim interfejsem, a przykłady na modelu sieci Nordvella z bezpłatnego kursu Power BI. Microsoft wydaje nową wersję Power BI Desktop co miesiąc, więc nazwy przycisków i limity usługi mogą się zmieniać. Aktualne wartości podaje dokumentacja Microsoft Learn.

Wróć do listy: 131 najczęstszych pytań i problemów związanych z Power BI

Najczęściej zadawane pytania

Po co oznaczać tabelę dat w Power BI?
Oznaczenie mówi silnikowi, która kolumna jest datą kalendarza. Filtr funkcji czasowej na tej kolumnie zdejmuje wtedy pozostałe filtry kalendarza, na przykład miesiąca z osi wykresu. Bez tego YTD przy relacji po kluczu liczbowym pokazuje sam bieżący miesiąc zamiast okresu od początku roku.
Jakie warunki musi spełnić kolumna przy oznaczaniu tabeli dat?
Kolumna ma typ Data albo Data/godzina, unikatowe wartości, żadnych pustych wartości i żadnych brakujących dni między pierwszą a ostatnią datą. Przy typie Data/godzina każda wartość musi mieć tę samą godzinę. Gdy warunek nie jest spełniony, okno pokazuje komunikat, na przykład „Kolumna dat nie może mieć luk w datach.”
Dlaczego YTD w Power BI pokazuje tylko sprzedaż bieżącego miesiąca?
Taki wynik daje funkcja czasowa liczona na kolumnie, która nie jest wskazana w oknie Oznacz jako tabelę dat, bo filtr miesiąca z macierzy wtedy zostaje. Na modelu Nordvelli DATESYTD dla marca 2025 daje 26 830 769,96 zł na kolumnie oznaczonej i 8 698 690,25 zł, czyli sam marzec, na kolumnie nieoznaczonej.
Kiedy trzeba oznaczyć tabelę dat w Power BI?
Według dokumentacji Microsoft zawsze, gdy korzystasz z klasycznych funkcji czasowych, a także gdy kalendarz łączy się z faktami kolumną innego typu niż data, na przykład kluczem liczbowym 20241231. Oznaczenie jest też potrzebne do zaawansowanych filtrów dat w tabelach przestawnych Excela opartych na modelu.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...