Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - DAX liczy, ale nie to, czego oczekujesz

YTD w Power BI liczy od stycznia, a rok obrachunkowy zaczyna się w innym miesiącu

W skrócie

  • TOTALYTD i DATESYTD domyślnie kończą rok 31 grudnia, więc YTD w Power BI liczy od stycznia, nawet gdy rok obrachunkowy firmy zaczyna się w lipcu albo w kwietniu.
  • Datę końca roku podajesz jako tekst w ostatnim argumencie funkcji. Silnik czyta go według ustawień regionalnych modelu, a fragmentator roku kalendarzowego nie zatrzymuje narastania z poprzedniego roku.
  • Dopisz datę końca roku cyframi, na przykład „06-30”, dodaj do kalendarza kolumnę roku obrachunkowego i używaj jej w wierszach oraz fragmentatorach. Wersję bez tekstu daty daje DATESBETWEEN.

Kontroler oczekuje, że YTD zacznie narastać od nowa w lipcu, bo wtedy zaczyna się rok obrachunkowy firmy, a miara narastająca w Power BI zbudowana według podręcznika resetuje się w styczniu. W maju 2025 pokazuje więc 45 654 769,95 zł zamiast 109 587 914,94 zł sprzedaży od 1 lipca 2024. Pokazujemy na modelu Nordvelli, jak podać datę końca roku w TOTALYTD, jakie zapisy przyjmuje model z polskimi ustawieniami regionalnymi i dlaczego sam argument nie wystarczy.

Jak to wygląda w praktyce

Miara Sprzedaż YTD = TOTALYTD([Łączna sprzedaż], DimKalendarz[Data]) w maju 2025 pokazuje 45 654 769,95 zł, czyli sprzedaż od stycznia do maja. Narastająco od początku roku obrachunkowego, czyli od 1 lipca 2024 do 31 maja 2025, sprzedaż wynosi 109 587 914,94 zł. W macierzy miesięcy kolumna YTD zaczyna narastać od nowa w styczniu, a nie w lipcu.

Drugi objaw pojawia się po dopisaniu daty końca roku. Z fragmentatorem na roku kalendarzowym 2025 styczeń pokazuje 74 632 703,87 zł, czyli także lipiec-grudzień 2024, a wiersz Suma pokazuje 72 420 861,55 zł zamiast 126 734 270,47 zł sprzedaży roku 2025. Obie liczby wyglądają na błąd, a są poprawnym YTD obrachunkowym w źle dobranym układzie wierszy.

Macierz miesięcy 2025 z Łączną sprzedażą i Sprzedażą YTD rosnącą do 126 734 270 zł, fragmentator Rok na 2025
Kolumna Sprzedaż YTD rośnie z miesiąca na miesiąc od stycznia i w grudniu spotyka się z sumą roczną: 126 734 270 zł.

Dlaczego tak się dzieje

TOTALYTD i DATESYTD mają opcjonalny argument z datą końca roku. Według dokumentacji Microsoft domyślnie to 31 grudnia, część z rokiem jest ignorowana, a tekst daty jest czytany według ustawień regionalnych, w których powstał model. Model Nordvelli ma ustawienia pl-PL. Sprawdziliśmy na nim zapisy „06-30”, „30-06”, „6/30”, „30/6”, „30.06”, „2025-06-30” i „30 czerwca”: każdy daje początek roku 1 lipca 2024 i 109 587 914,94 zł w maju 2025. Zapisy z angielską nazwą miesiąca, „June 30” i „30 June”, kończą się komunikatem „Wystąpił następujący błąd systemu: Invalid procedure call or argument” (w angielskiej wersji: „The following system error occurred: Invalid procedure call or argument”).

Druga część mechanizmu to tabela dat. Funkcje analizy czasowej podmieniają filtr na oznaczonej tabeli dat, więc fragmentator z rokiem kalendarzowym nie zatrzymuje narastania: dla stycznia 2025 funkcja bierze daty od 1 lipca 2024. Wiersz Suma roku kalendarzowego liczy YTD na 31 grudnia 2025, czyli tylko lipiec-grudzień 2025. Jak oznaczenie tabeli dat zmienia działanie funkcji czasowych, opisujemy w poście o opcji Oznacz jako tabelę dat.

Co zrobić krok po kroku

  1. Sprawdź, czy w modelu nie ma już miary obrachunkowej. W pliku Nordvelli z kursu jest Sprzedaż YTD Fiskalny z końcem roku 31 marca: w maju 2025 daje 18 823 999,99 zł, czyli kwiecień i maj. Dla roku od lipca dodaj nową miarę: prawy przycisk na FaktSprzedaz, Nowa miara. W maju 2025 wynik to 109 587 914,94 zł.
    Sprzedaż YTD obrachunkowy =
    TOTALYTD ( [Łączna sprzedaż], DimKalendarz[Data], "06-30" )
  2. Datę końca roku zapisuj cyframi w kolejności miesiąc-dzień, jak zaleca dokumentacja, i nigdy angielską nazwą miesiąca. W modelu z polskimi ustawieniami regionalnymi kolejność cyfr nie zmieniła wyniku ani dla 30 czerwca, ani dla 31 marca, ale według dokumentacji tekst zależy od ustawień regionalnych modelu. Po każdej zmianie porównaj wynik jednego miesiąca z miarą kontrolną z kroku 5.
  3. Gdy narastanie ma mieć dodatkowe warunki, na przykład tylko kanał Online, użyj DATESYTD w CALCULATE z tym samym drugim argumentem: DATESYTD(DimKalendarz[Data], "06-30"). W maju 2025 zwraca daty od 1 lipca 2024 do 31 maja 2025.
  4. Dodaj do tabeli DimKalendarz kolumnę roku obrachunkowego (prawy przycisk na tabeli, Nowa kolumna) i używaj jej w wierszach macierzy oraz we fragmentatorze zamiast roku kalendarzowego. Nazywanie roku obrachunkowego rokiem, w którym się kończy, to tylko konwencja, więc ustal ją z działem finansów. Miesiące w kolejności od lipca wymagają jeszcze numeru miesiąca obrachunkowego i opcji opisanej w poście o Sortuj według kolumny.
    Rok obrachunkowy =
    IF ( DimKalendarz[Miesiac] >= 7, DimKalendarz[Rok] + 1, DimKalendarz[Rok] )
  5. Jeśli nie chcesz zależeć od tekstu daty, policz początek roku obrachunkowego w zmiennych i przekaż zakres do DATESBETWEEN. Na modelu Nordvelli ta miara daje w każdym miesiącu 2025 ten sam wynik co TOTALYTD z „06-30”.
    YTD obrachunkowy ręcznie =
    VAR KoniecOkresu = MAX ( DimKalendarz[Data] )
    VAR PoczatekRoku =
        IF (
            MONTH ( KoniecOkresu ) >= 7,
            DATE ( YEAR ( KoniecOkresu ), 7, 1 ),
            DATE ( YEAR ( KoniecOkresu ) - 1, 7, 1 )
        )
    RETURN
        CALCULATE (
            [Łączna sprzedaż],
            DATESBETWEEN ( DimKalendarz[Data], PoczatekRoku, KoniecOkresu )
        )
  6. Dokumentacja Microsoft opisuje też analizę czasową opartą na kalendarzach (w wersji zapoznawczej): kalendarz obrachunkowy definiujesz raz w modelu i podajesz go zamiast kolumny dat, na przykład TOTALYTD([Sales], 'Fiscal Calendar'). Z kalendarzem nie wolno już podawać daty końca roku, silnik zgłasza wtedy „Funkcja „TOTALYTD” nie może zaakceptować parametru końca roku po podaniu kalendarza.” (w angielskiej wersji: „The 'TOTALYTD' function cannot accept year end parameter when calendar is provided.”). Tej drogi nie sprawdzaliśmy na modelu Nordvelli.

Jak sprawdzić, że problem zniknął

Wiersz każdego roku obrachunkowego powinien równać się sumie jego dwunastu miesięcy. Na modelu Nordvelli z kolumną Rok obrachunkowy miara daje 88 347 909,33 zł dla roku 2023 (lipiec 2022 - czerwiec 2023), 101 950 291,40 zł dla 2024 i 118 246 553,91 zł dla 2025, tyle co Łączna sprzedaż w tych samych wierszach. Kwota roku 2025 to zarazem wartość czerwca 2025 w macierzy miesięcy. Styczeń 2025 to 63 933 144,99 zł za lipiec-grudzień 2024 plus 10 699 558,88 zł za styczeń.

Zwróć uwagę na lata brzegowe. Rok obrachunkowy 2022 ma tylko styczeń-czerwiec 2022, bo dane zaczynają się 1 stycznia 2022, a rok 2026 kończy się na maju 2026. Takich lat nie porównuj wprost z pełnymi, o czym piszemy w poście o porównaniu przy niepełnym roku.

Źródła i sposób sprawdzenia

  • Microsoft Learn: TOTALYTD function (DAX), argument year_end_date (źródło)
  • Microsoft Learn: DATESYTD function (DAX) (źródło)
  • Microsoft Learn: Implement time-based calculations in Power BI (analiza czasowa oparta na kalendarzach) (źródło)
  • Microsoft Learn: DATESBETWEEN function (DAX) (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli (ustawienia pl-PL): różne zapisy daty końca roku, macierz miesięcy 2025, kolumna roku obrachunkowego i miara z DATESBETWEEN.

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

Jak policzyć YTD dla roku obrachunkowego w Power BI?
Dodaj do TOTALYTD albo DATESYTD ostatni argument z datą końca roku, na przykład tekst 06-30 dla roku od lipca do czerwca. Na modelu Nordvelli w maju 2025 taka miara daje 109 587 914,94 zł, sprzedaż od 1 lipca 2024. Do wierszy i fragmentatorów dodaj kolumnę roku obrachunkowego.
W jakim formacie wpisać datę końca roku w TOTALYTD?
Cyframi, w kolejności miesiąc-dzień, jak zaleca dokumentacja Microsoft, na przykład 06-30. Tekst jest czytany według ustawień regionalnych modelu. W modelu z ustawieniami pl-PL zapisy 06-30, 30-06, 30.06 i 30 czerwca dały ten sam wynik, a angielska nazwa miesiąca, na przykład June 30, skończyła się błędem systemu.
Dlaczego fragmentator roku nie ogranicza YTD obrachunkowego?
Funkcje analizy czasowej podmieniają filtr na oznaczonej tabeli dat. Dla stycznia 2025 TOTALYTD z końcem roku 30 czerwca bierze daty od 1 lipca 2024, mimo fragmentatora na roku 2025. Dlatego we fragmentatorach i wierszach używaj kolumny roku obrachunkowego, a nie roku kalendarzowego.
Czy da się policzyć YTD obrachunkowe bez tekstu z datą?
Tak. Policz w zmiennych ostatnią datę w kontekście i początek roku obrachunkowego, a zakres przekaż do CALCULATE przez DATESBETWEEN. Taka miara nie zależy od ustawień regionalnych. Na modelu Nordvelli dała w każdym miesiącu 2025 ten sam wynik co TOTALYTD z datą końca roku 06-30.

Komentarze (0)

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

Brak komentarzy...