Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Komunikaty błędów DAX
Funkcje inteligencji czasowej dają błąd albo puste wyniki - wymagana ciągła tabela dat
Gdy time intelligence w Power BI nie działa, autor raportu widzi jedno z trzech: komunikat błędu w mierze YTD albo rok do roku, wynik narastający równy wartości z jednego miesiąca albo pustą kolumnę roku poprzedniego. Wszystkie trzy mają wspólne źródło w kolumnie daty, którą dostaje funkcja inteligencji czasowej, czyli funkcja DAX rozszerzająca albo przesuwająca okres, na przykład TOTALYTD czy SAMEPERIODLASTYEAR. Pokazujemy dosłowne komunikaty, ich mechanizm i poprawki sprawdzone na modelu Nordvelli.
Pierwszy objaw to błąd typu. Na modelu Nordvelli miara TOTALYTD([Łączna sprzedaż], FaktSprzedaz[DataID]) zgłosiła: „Kolumna określona w wywołaniu funkcji „TOTALYTD” nie jest typu DATE. Jest to nieobsługiwane.” (w angielskiej wersji: „A column specified in the call to function 'TOTALYTD' is not of type DATE. This is not supported.”). To samo dało DimKalendarz[DataID], data zapisana jako tekst i SAMEPERIODLASTYEAR na kluczu liczbowym.
Drugi objaw to błąd ciągłości: „Funkcja „DATEADD” oczekuje wyboru ciągłego, jeśli kolumna daty nie jest unikatowa, ma przerwy lub zawiera część będącą godziną.” (w angielskiej wersji: „Function 'DATEADD' expects a contiguous selection when the date column is not unique, has gaps or it contains time portion.”). Dostaliśmy go dla daty przeniesionej do FaktSprzedaz, gdy w filtrze były dwa dni, 1 i 15 października 2024, albo same dni robocze. SAMEPERIODLASTYEAR zgłosił to samo ze swoją nazwą.
Trzeci objaw jest cichy. Ta sama data z tabeli faktów przy filtrze października 2024 z kalendarza dała YTD 9 894 194,40 zł, czyli sprzedaż samego października, i pusty rok poprzedni. Poprawna miara na DimKalendarz[Data] daje 82 986 563,97 zł narastająco i 7 936 337,04 zł rok wcześniej.
Funkcja inteligencji czasowej bierze daty z kontekstu filtra, buduje z nich nowy zbiór dni, na przykład od 1 stycznia do ostatniego widocznego dnia, i nakłada go jako filtr na podaną kolumnę. Według dokumentacji Microsoft tabela dat musi mieć kolumnę typu Data albo Data/godzina, wartości unikatowe, bez pustych i bez brakujących dni, najlepiej w pełnych latach. Kolumna w tabeli faktów nie spełnia tego warunku, bo jeden dzień ma w Nordvelli od 21 do 289 wierszy sprzedaży, średnio 67. Gdy wybrane dni nie tworzą ciągłego przedziału, DATEADD i SAMEPERIODLASTYEAR na takiej kolumnie nie wiedzą, jak przesunąć zaznaczenie, i zgłaszają błąd. Na DimKalendarz[Data] te same dwa dni przeszły bez błędu: DATEADD o miesiąc wstecz dał 472 823,75 zł.
Zobacz też: Szkolenie Zaawansowany DAX w Power BI
Cichy objaw ma inny mechanizm. Filtr nowego zbioru dni trafia na kolumnę z tabeli faktów, a filtr z kalendarza, tu RokMiesiac = 2024-10, zostaje i dalej zawęża wynik do października. Na kalendarzu Nordvelli, oznaczonym jako tabela dat, filtr funkcji czasu na DimKalendarz[Data] zdejmuje przy tym filtry z pozostałych kolumn kalendarza. Na Nordvelli dopisanie ALL(DimKalendarz) do miary z datą z faktów przywróciło poprawne 82 986 563,97 zł i 7 936 337,04 zł. Według dokumentacji Microsoft oznaczenie jest obowiązkowe, gdy relacja z kalendarzem idzie po kolumnie innego typu niż data, a tak jest w Nordvelli: relacja łączy DataID w postaci 20241015. Szczegóły tego ustawienia opisujemy w poście o oznaczaniu tabeli dat.
DataID albo tekst, zamień ją na kolumnę daty z tabeli kalendarza.Sprzedaż YTD = TOTALYTD([Łączna sprzedaż], DimKalendarz[Data])
Sprzedaż rok temu =
CALCULATE(
[Łączna sprzedaż],
SAMEPERIODLASTYEAR(DimKalendarz[Data])
)EVALUATE
ROW(
"Od", MIN(DimKalendarz[Data]),
"Do", MAX(DimKalendarz[Data]),
"Wiersze", COUNTROWS(DimKalendarz),
"Różne daty", DISTINCTCOUNT(DimKalendarz[Data]),
"Dni w zakresie", INT(MAX(DimKalendarz[Data]) - MIN(DimKalendarz[Data])) + 1
)CzyRoboczy, a nie jako osobny kalendarz.
Po poprawce sprawdź jeden znany miesiąc. Na Nordvelli przy filtrze października 2024 miara YTD ma dać 82 986 563,97 zł, miesiąc 9 894 194,40 zł, a rok temu 7 936 337,04 zł. YTD równe sprzedaży miesiąca znaczy, że filtr miesiąca nie został zdjęty, na przykład gdy funkcja dostała kolumnę spoza kalendarza. Z filtrem samych dni roboczych YTD na oznaczonym kalendarzu dał te same 82 986 563,97 zł, bo funkcja czasu zdjęła filtr flagi razem z filtrem miesiąca. Jeśli flaga ma działać w YTD, dodaj ją jawnie w CALCULATE.
Każdą nową tabelę faktów łącz z kalendarzem relacją, a w miarach czasu używaj wyłącznie kolumny daty kalendarza. Puste wartości w porównaniu rok do roku przy niepełnym roku to osobna sprawa, opisana w poście o pustych wartościach rok do roku.
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
Komentarze (0)
Brak komentarzy...