Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - DAX liczy, ale nie to, czego oczekujesz
Rok do roku w Power BI pokazuje puste wartości albo zawyżony wzrost
Największy „wzrost” w macierzy lat z miarą SAMEPERIODLASTYEAR ma rok 2022: 83 351 894,30 zł, choć nie ma go z czym porównać. Puste komórki porównania rok do roku w pierwszym roku są zrozumiałe, ale ta kwota to po prostu cała sprzedaż 2022, a wiersz Suma pokazuje do tego wzrost 12,07%, którego nikt nie liczył. Pokazujemy na modelu Nordvelli, skąd biorą się puste komórki i zawyżone liczby i jak napisać miary, które tego nie robią.
Macierz lat z czterema miarami z kursu: Łączna sprzedaż, Sprzedaż rok temu, Zmiana r/r i Zmiana r/r %. W wierszu 2022 sprzedaż rok temu i procent są puste, ale Zmiana r/r pokazuje 83 351 894,30 zł, czyli całą sprzedaż 2022 roku. Na wykresie słupkowym zmian byłby to najwyższy słupek, choć porównania nie było. Kolejne lata są poprawne: 2023 to +10 852 445,95 zł (13,02%), 2024 +18 886 660,99 zł (20,05%), 2025 +13 643 269,23 zł (12,06%).
Wiersz Suma pokazuje 50 393 502,91 zł i 12,07%, czyli „wzrost” wszystkich lat razem. Inna wersja miary, zbudowana na dacie z tabeli faktów, w każdym roku jest pusta. Wersja z kolumną DataID kończy się komunikatem „Kolumna określona w wywołaniu funkcji „SAMEPERIODLASTYEAR” nie jest typu DATE. Jest to nieobsługiwane.” (w angielskiej wersji: „A column specified in the call to function 'SAMEPERIODLASTYEAR' is not of type DATE. This is not supported.”).

Zobacz też: Szkolenie Zaawansowany DAX w Power BI
Według dokumentacji Microsoft SAMEPERIODLASTYEAR zwraca daty bieżącego kontekstu przesunięte o rok wstecz. W wierszu 2022 to daty 2021, których w modelu Nordvelli nie ma, bo dane i kalendarz zaczynają się 1 stycznia 2022. Miara zwraca pustą wartość. Zmiana r/r % = DIVIDE([Zmiana r/r], [Sprzedaż rok temu], BLANK()) przy pustym mianowniku daje pustą wartość, ale Zmiana r/r = [Łączna sprzedaż] - [Sprzedaż rok temu] odejmuje pustą wartość jak zero i zostaje cała sprzedaż roku. Tak samo styczeń 2022 ma zmianę 7 210 764,27 zł, równą całej sprzedaży miesiąca.
Wiersz Suma nie ma filtra roku, więc kontekst obejmuje daty 2022-2026, a przesunięte daty 2021-2025. Sprzedaż rok temu wynosi 417 381 506,26 zł, czyli sprzedaż lat 2022-2025, a procent 12,07% porównuje pięć lat z czterema. Dlaczego wiersz Suma liczy miarę od nowa, opisujemy w poście o sumie, która nie zgadza się z wierszami.
Data z tabeli faktów zawodzi z innego powodu. Funkcja przesuwa daty kolumny FaktSprzedaz, ale filtr roku z DimKalendarz zostaje. W wierszu 2023 przecięcie roku 2023 z datami 2022 jest puste. Dopiero kolumna dat z oznaczonej tabeli dat sprawia, że funkcja podmienia filtr całego kalendarza.
DimKalendarz[Data] typu Data z tabeli oznaczonej jako tabela dat, a nie DataID ani data z tabeli faktów. Według dokumentacji Microsoft oznaczenie jest obowiązkowe, gdy relacje kalendarza opierają się na kolumnach innego typu niż data, a w modelu Nordvelli relacje idą po liczbowym DataID w formacie RRRRMMDD, na przykład 20220101. Co dokładnie zmienia to ustawienie, opisujemy w poście o opcji Oznacz jako tabelę dat.FaktSprzedaz przez RELATED dała pustą wartość w latach 2023-2026, a na karcie bez filtra 336 302 005,74 zł, czyli liczbę, która nic nie znaczy. Wersja z DimKalendarz[Data] dla 2023 daje 83 351 894,30 zł, sprzedaż 2022.Zmiana r/r porównywalna =
VAR RokTemu = [Sprzedaż rok temu]
RETURN
IF (
HASONEVALUE ( DimKalendarz[Rok] ) && NOT ISBLANK ( RokTemu ),
[Łączna sprzedaż] - RokTemu
)Zmiana r/r % porównywalna =
VAR RokTemu = [Sprzedaż rok temu]
RETURN
IF (
HASONEVALUE ( DimKalendarz[Rok] ),
DIVIDE ( [Łączna sprzedaż] - RokTemu, RokTemu )
)DATEADD(DimKalendarz[Data], -1, YEAR). Na modelu Nordvelli miara Sprzedaż rok temu DateAdd daje w każdym roku i miesiącu tę samą kwotę co SAMEPERIODLASTYEAR. Według dokumentacji Microsoft wynik DATEADD zawiera tylko daty istniejące w kolumnie dat, a gdy daty w bieżącym kontekście nie tworzą ciągłego przedziału, funkcja zwraca błąd. Takie błędy opisujemy w poście o funkcjach analizy czasowej i ciągłej tabeli dat.Sprawdź trzy miejsca macierzy. Pierwszy rok danych ma mieć puste porównanie w obu miarach, a nie kwotę równą sprzedaży. Drugi rok ma pokazywać jako sprzedaż rok temu dokładnie sprzedaż pierwszego roku: na modelu Nordvelli 83 351 894,30 zł w wierszu 2023. Wiersz Suma ma być pusty. Ten sam test zrób na poziomie miesięcy, bo tam pierwszy rok danych daje dwanaście pustych porównań, a nie jedno.
Każdą miarę porównawczą buduj na kolumnie dat z kalendarza i w tym samym wzorcu: zmienna z wartością okresu poprzedniego, warunek na brak tej wartości i na wiersz Suma. Na wykresach zmian sprawdzaj, czy pierwszy słupek nie jest po prostu sprzedażą pierwszego okresu.
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...