Blog JSystems - uwalniamy wiedzę!

Szukaj
Infografika: trzy operacje inteligencji czasowej DAX na danych Nordvelli, narastanie YTD, rok do roku i średnia krocząca
Trzy filary inteligencji czasowej na jednym schemacie: narastanie YTD (od początku roku do teraz), przesunięcie rok do roku (to samo okno przesunięte o rok wstecz) i średnia krocząca (okno o stałej długości przesuwane po czasie). Każda z tych operacji sprowadza się do modyfikacji zbioru dat, po którym liczymy miarę.

W skrócieTime Intelligence to funkcje DAX, które same przesuwają okno czasu: liczą wartości narastająco od początku roku, rok do roku i jako średnią kroczącą. Na tabeli FaktSprzedaz Nordvelli budujemy miary z TOTALYTD, DATESYTD, SAMEPERIODLASTYEAR i DATEADD, a wyniki sprawdzamy na trendzie 2022-2026 i w macierzy rok do roku.

Lekcja 16 z 28 bezpłatnego kursu Power BI, od pierwszego raportu do Fabric i Copilota, na jednym zestawie danych sieci Nordvella.

<-- Spis wszystkich lekcji
<-- Lekcja 15: DAX: iteratory SUMX, AVERAGEX i miary z VARLekcja 17: Grupy obliczeniowe i Tabular Editor -->

Zarząd Nordvelli rzadko pyta o samą sprzedaż. Pyta o rzeczy w czasie: ile utargowaliśmy narastająco od początku roku, czy rośniemy rok do roku, czy grudniowy pik to siła sieci czy zwykła sezonowość. Time Intelligence, czyli funkcje inteligencji czasowej w języku DAX, są dokładnie po to. Zamiast ręcznie budować filtry dat wewnątrz CALCULATE, sięgasz po gotowe funkcje, które same przesuwają okno czasu. W tym rozdziale zbudujemy komplet miar czasowych na tabeli FaktSprzedaz (108 675 transakcji) i sprawdzimy, jak zachowują się na wykresie trendu 2022 do 2026 oraz w macierzy YoY procent per miesiąc.

Z tej lekcji dowiesz się:

Pliki do tej lekcji

Gotowy efekt: plik startowy uzupełniony o kroki tej lekcji: dwie nowe strony (Narastająco i Rok do roku) i czternaście miar czasowych w tabeli FaktSprzedaz, w stanie z ostatniego zrzutu lekcji.

Pobierz nordvella_16_time_intelligence.pbix

Plik startowy: stan z końca poprzedniej lekcji. Otwórz go, jeśli chcesz wykonywać kroki tej lekcji od razu, bez odtwarzania wcześniejszych.

Pobierz nordvella_15_iteratory.pbix

Dane źródłowe:
Nordvella_dane.xlsx - dziewięć tabel Nordvelli w arkuszu Excel.
Nordvella.bak.gz - te same dane jako baza MS SQL Server (odtwarzasz poleceniem RESTORE DATABASE), do ćwiczeń z połączeniem z bazą SQL.

Pobierz Nordvella_dane.xlsxPobierz Nordvella.bak.gz

Dedykowana tabela kalendarza: dlaczego jest konieczna

Co chcemy osiągnąć. Zarząd Nordvelli chce widzieć sprzedaż narastająco od początku roku i porównanie z rokiem poprzednim. Takie miary działają poprawnie tylko na pełnej tabeli kalendarza, więc chcemy najpierw zrozumieć, dlaczego kolumna daty z tabeli transakcji nie wystarczy.

Zacznijmy od najczęstszego błędu początkujących. Kusi, żeby liczyć narastająco po kolumnie daty z samej tabeli faktów, czyli po FaktSprzedaz[DataID]. To nie zadziała poprawnie i warto zrozumieć dlaczego, zanim napiszemy pierwszą miarę.

Funkcje inteligencji czasowej działają w ten sposób, że wewnątrz siebie generują pełny ciąg dat i po nim przesuwają filtr. TOTALYTD musi umieć powiedzieć: weź wszystkie dni od pierwszego stycznia bieżącego roku do dnia widocznego w kontekście, nawet te, w które nie było ani jednej transakcji. Tabela faktów tego nie zapewnia. W FaktSprzedaz daty są nieregularne (nie w każdym dniu była sprzedaż w każdym sklepie) i powtarzalne (jednego dnia setki transakcji). Silnik nie ma z czego zbudować ciągłej osi czasu.

Dlatego w modelu Nordvelli mamy osobną tabelę wymiaru czasu, czyli DimKalendarz z 1 826 wierszami, po jednym na każdy dzień od 1 stycznia 2022 do 31 grudnia 2026, bez ani jednej luki. Ta tabela jest połączona relacją jeden do wielu z FaktSprzedaz po kluczu DataID. Kolumny takie jak Rok, Kwartal, MiesiacNazwa, RokMiesiac oraz flagi CzyWeekend i CzyRoboczy dajemy raz w wymiarze i używamy ich potem wszędzie.

Okno Edytowanie relacji w Power BI: FaktSprzedaz DataID do DimKalendarz DataID, wiele do jednego, kierunek pojedynczy
Relacja, na której opiera się cała inteligencja czasowa. Otwierasz ją w widoku Model przyciskiem Zarządzanie relacjami, zaznaczasz wiersz FaktSprzedaz (DataID) i klikasz Edytuj: wiele do jednego, kierunek pojedynczy, relacja aktywna. Zamknij okno przyciskiem Anuluj, niczego nie zmieniamy.

Krok 1. Przejdź do widoku Dane i wybierz w panelu Dane tabelę DimKalendarz. Kliknij strzałkę przy nagłówku kolumny Data i wybierz Sortuj rosnąco: dni ułożą się jeden po drugim. Pasek stanu na dole pokazuje 1 826 wierszy i 1 826 różnych wartości w kolumnie Data, czyli żadnej luki ani powtórzenia.

Widok Dane tabeli DimKalendarz Nordvelli posortowanej po dacie: 1 826 wierszy od 1 stycznia 2022
Kalendarz Nordvelli ma jeden wiersz na każdy dzień, od 1 stycznia 2022 do 31 grudnia 2026. Ciągłość dat jest warunkiem, bez którego funkcje czasu liczą błędnie.
Schemat dedykowanej tabeli kalendarza w Power BI z ciągłymi datami i kolumnami pomocniczymi
Dedykowana tabela kalendarza. Ciągły zbiór dat (jeden wiersz na dzień, bez przerw) jest fundamentem całej inteligencji czasowej. Z niej biorą się osie wykresów, filtry po roku i miesiącu oraz wszystkie funkcje YTD i YoY.

Jeśli w Twoim modelu nie ma jeszcze tabeli dat, możesz ją wygenerować jedną miarą-tabelą. W Nordvelli DimKalendarz przyszła już z arkusza, ale dobrze wiedzieć, jak zrobić ją w DAX, gdyby zabrakło. Poniższa formuła tworzy nową tabelę obliczeniową (Modelowanie, Nowa tabela) z pełnym zakresem dat i kolumnami pomocniczymi:

Kalendarz =
VAR ZakresDat =
    CALENDAR ( DATE ( 2022, 1, 1 ), DATE ( 2026, 12, 31 ) )
RETURN
ADDCOLUMNS (
    ZakresDat,
    "Rok", YEAR ( [Date] ),
    "Kwartal", "K" & QUARTER ( [Date] ),
    "Miesiac", MONTH ( [Date] ),
    "MiesiacNazwa", FORMAT ( [Date], "mmm" ),
    "RokMiesiac", FORMAT ( [Date], "YYYY-MM" ),
    "CzyWeekend", WEEKDAY ( [Date], 2 ) > 5
)

Jeśli chcesz to wypróbować, na karcie Modelowanie kliknij Nowa tabela, wklej formułę i zatwierdź. W widoku Dane zobaczysz 1 826 wierszy, ale z dwiema różnicami wobec DimKalendarz: kwartały mają tu postać K1, a nie Q1, a kolumna Date ma typ Data/godzina. Po obejrzeniu usuń tę tabelę (prawy przycisk na tabeli w panelu Dane, Usuń z modelu), bo w Nordvelli kalendarzem jest DimKalendarz.

Widok Dane z tabelą Kalendarz zbudowaną formułą CALENDAR i ADDCOLUMNS: kwartały K1 i nazwy miesięcy sty
Tabela zbudowana tą formułą, posortowana po dacie. Pasek formuły pokazuje całą formułę, a pasek stanu 1 826 wierszy.

Wskazówka: tabela dat musi pokrywać cały zakres transakcji z FaktSprzedaz, a najlepiej pełne lata na obu końcach. Jeśli sprzedaż sięga grudnia 2026, a kalendarz kończy się we wrześniu, funkcje YTD dla ostatnich miesięcy policzą się na ucięty zbiór dat i wyniki będą cichym fałszem, bez żadnego błędu.

Oznacz jako tabelę dat: jeden klik, który naprawia YTD

Co chcemy osiągnąć. Chcemy, żeby miary czasowe Nordvelli liczyły się poprawnie także na przełomie roku. Do tego Power BI musi wiedzieć, która tabela jest kalendarzem i która kolumna jest datą.

Sama obecność tabeli kalendarza nie wystarczy. Power BI musi wiedzieć, która kolumna jest kluczem daty i że zbiór jest ciągły. Służy do tego opcja Oznacz jako tabelę dat. Bez niej wiele funkcji zwróci błędy albo, co gorsza, ciche pomyłki na granicach roku.

W Nordvelli zrobiliśmy to już w rozdziale o modelu danych, więc tu tylko sprawdzamy ustawienie. Krok 2. W widoku Dane, z wybraną tabelą DimKalendarz, kliknij na karcie Narzędzia tabel przycisk Oznacz jako tabelę dat. W oknie o tym samym tytule przełącznik Oznacz jako tabelę dat jest Włączony, a w polu Wybierz kolumnę daty jest kolumna Data (typ Data, nie Data i godzina). Zamknij okno przyciskiem Anuluj. W modelu bez oznaczonej tabeli ustawiasz te dwie rzeczy i klikasz Zapisz.

Okno Oznacz jako tabelę dat w Power BI dla DimKalendarz: przełącznik Włączony i kolumna Data
Jedno okno, dwie decyzje: przełącznik Oznacz jako tabelę dat ustawiony na Włączony i kolumna Data w polu Wybierz kolumnę daty. W pliku Nordvelli oba są ustawione od lekcji 06.

Co zobaczysz, gdy oznaczasz tabelę pierwszy raz. Power BI natychmiast waliduje kolumnę. Jeśli daty są ciągłe i unikalne, pod polem pojawia się zielony komunikat, że walidacja przebiegła pomyślnie. Jeśli w kalendarzu jest luka albo zdublowana data, dostaniesz czerwony komunikat o błędzie i dokładnie wtedy wracasz do poprawy tabeli, a nie po godzinie debugowania miar. Po zatwierdzeniu kolumna Data w panelu Dane dostaje ikonę kalendarza. To znak, że silnik traktuje DimKalendarz jako oficjalną tabelę dat.

Bez oznaczenia tabeli datPo oznaczeniu tabeli dat
TOTALYTD potrafi liczyć na ukrytej tabeli dat tworzonej przez opcję Automatyczna data/godzina, która ignoruje relacjeTOTALYTD liczy po Twojej DimKalendarz, spójnie z osiami wykresów
Wartość na końcu roku może przeskoczyć, bo silnik gubi granice okresuGranice roku i kwartału są jednoznaczne, narastanie resetuje się prawidłowo
SAMEPERIODLASTYEAR bywa niestabilny przy niestandardowym kalendarzuPrzesunięcia rok do roku są deterministyczne i powtarzalne

Krok 3. Sprawdź jeszcze jedną opcję: Plik, Opcje i ustawienia, Opcje, w sekcji Bieżący plik wybierz Ładowanie danych. W grupie Analiza czasowa ma być odznaczona opcja Automatyczna data/godzina. Power BI domyślnie dokleja do każdej kolumny daty ukrytą, wewnętrzną tabelę kalendarza. Przy własnej DimKalendarz jest ona zbędna, puchnie model i myli funkcje czasowe. Po wyłączeniu wszystko liczysz świadomie na jednej, kontrolowanej tabeli dat. W pliku Nordvelli opcja jest odznaczona, więc zamknij okno przyciskiem Anuluj.

Okno Opcje Power BI, Bieżący plik, Ładowanie danych: odznaczona opcja Automatyczna data/godzina
Ta jedna odznaczona opcja oszczędza megabajty modelu. Włączona, Power BI tworzy ukrytą tabelę dat dla każdej kolumny z datą w całym modelu.

TOTALYTD i DATESYTD: sprzedaż narastająco

Co chcemy osiągnąć. Zarząd Nordvelli pyta, ile sieć sprzedała od początku roku, kwartału i miesiąca. Chcemy zbudować miary narastające na bazowej mierze Łączna sprzedaż.

Mamy już bazową miarę z wcześniejszych rozdziałów o DAX, czyli Łączna sprzedaż. To ona będzie pod spodem każdej funkcji czasowej. Najprostsza droga do narastania od początku roku to TOTALYTD, która jest skrótem łączącym CALCULATE, sumę i zbiór dat od pierwszego stycznia.

Łączną sprzedaż masz od lekcji 07, a miarę Sprzedaż YTD zbudowaliśmy już w rozdziale o wizualizacjach zaawansowanych. Nie twórz jej drugi raz, tylko zaznacz ją w panelu Dane, żeby zobaczyć formułę:

Sprzedaż YTD =
TOTALYTD ( [Łączna sprzedaż], DimKalendarz[Data] )
Pasek formuł Power BI z miarą Sprzedaż YTD: TOTALYTD z Łączną sprzedażą i DimKalendarz[Data]
TOTALYTD potrzebuje dwóch rzeczy: miary do narastania i kolumny dat z oznaczonej tabeli kalendarza. Nic więcej.

Krok 4. Trzy pozostałe miary narastające utwórz sam, każdą osobno (prawy przycisk na FaktSprzedaz, Nowa miara, format #,0 "zł"). Od początku kwartału:

Sprzedaż QTD =
TOTALQTD ( [Łączna sprzedaż], DimKalendarz[Data] )

Od początku miesiąca:

Sprzedaż MTD =
TOTALMTD ( [Łączna sprzedaż], DimKalendarz[Data] )

Według roku obrotowego kończącego się 31 marca:

Sprzedaż YTD Fiskalny =
TOTALYTD ( [Łączna sprzedaż], DimKalendarz[Data], "03-31" )

Krok 5. Dodaj stronę i nazwij ją Narastająco (zielony plus na pasku stron, dwuklik na zakładce). Wstaw Fragmentator z polem DimKalendarz[Rok]. Rok jest liczbą, więc fragmentator startuje jako suwak: w Formatuj element wizualny, Ustawienia fragmentatora, Opcje, Styl wybierz Linia pionowa i zaznacz 2025. Przesuń go w prawy górny róg (karta Ogólne, Właściwości, u nas pozycja 1580 na 20).

Krok 6. Wstaw Macierz: do Wierszy przeciągnij DimKalendarz[MiesiacNazwa], do Wartości Łączną sprzedaż i Sprzedaż YTD. Czcionkę ustaw na 14 (Siatka, Opcje), a rozmiar na 900 na 560.

Co zobaczysz. Kolumna Łączna sprzedaż pokazuje sprzedaż w danym miesiącu, a kolumna Sprzedaż YTD te same liczby dodane od stycznia. W styczniu obie są równe. W lutym YTD to styczeń plus luty. W grudniu YTD osiąga poziom całego roku. Tak właśnie działa narastanie: w każdym wierszu funkcja bierze wszystkie dni od pierwszego stycznia do końca miesiąca z tego wiersza.

Macierz miesięcy 2025 z Łączną sprzedażą i Sprzedażą YTD rosnącą do 126 734 270 zł, fragmentator Rok na 2025
Kolumna YTD rośnie z miesiąca na miesiąc i w grudniu spotyka się z sumą roczną: 126 734 270 zł. Fragmentator ogranicza obliczenie do jednego roku.
Animacja miary Sprzedaż YTD w Power BI: słupki 2024 i 2025 rosną miesiąc po miesiącu i zerują się w styczniu 2025
Narastanie YTD w akcji, na liczbach Nordvelli z miary Sprzedaż YTD. Wartość rośnie miesiąc po miesiącu, w grudniu 2024 dochodzi do 113,1 mln zł i w styczniu 2025 zeruje się do sprzedaży samego stycznia. To dokładnie to, co robi TOTALYTD: bierze zbiór dat od 1 stycznia do końca bieżącego kontekstu i sumuje po nim miarę.

Kiedy TOTALYTD nie wystarczy: sięgnij po DATESYTD

TOTALYTD jest wygodny, ale sztywny. W momencie, gdy chcesz narastać tylko dla wybranego wycinka danych, na przykład tylko dla kanału sprzedaży Online albo tylko dla kategorii Telefony, potrzebujesz bardziej rozbieralnej wersji. Tu wchodzi DATESYTD, która sama nie liczy niczego, tylko zwraca zbiór dat od pierwszego stycznia do końca kontekstu. Ten zbiór podajesz do CALCULATE razem z własnymi filtrami.

Sprzedaż YTD ręcznie =
CALCULATE (
    [Łączna sprzedaż],
    DATESYTD ( DimKalendarz[Data] )
)

I wersja tylko dla kanału Online, z dodatkowym warunkiem obok dat:

Sprzedaż YTD Online =
CALCULATE (
    [Łączna sprzedaż],
    DATESYTD ( DimKalendarz[Data] ),
    FaktSprzedaz[KanalSprzedazy] = "Online"
)
Pasek formuł Power BI z miarą Sprzedaż YTD Online: CALCULATE z DATESYTD i warunkiem KanalSprzedazy Online
DATESYTD zwraca zbiór dat od 1 stycznia, a warunek na kanał siedzi obok niego w tym samym CALCULATE.

Krok 7. Utwórz obie miary (format #,0 "zł") i zaznacz Sprzedaż YTD Online, żeby trafiła do macierzy jako trzecia kolumna.

Macierz 2025 z kolumną Sprzedaż YTD Online: 37 985 957 zł na koniec roku wobec 126 734 270 zł całej sprzedaży
Do DATESYTD można dołożyć dowolny inny warunek. Tu kanał Online: 37 985 957 zł na koniec roku wobec 126 734 270 zł całej sprzedaży, czyli niemal dokładnie 30 procent (29,97).

Jak to zinterpretować. Miara Sprzedaż YTD Online odpowiada na pytanie zarządu, ile utargowały kanały internetowe od początku roku do danego miesiąca. Próbując to zbudować na TOTALYTD, trzeba owinąć całą funkcję w kolejne CALCULATE. DATESYTD trzyma to płasko w jednym CALCULATE i lepiej się czyta. Zapamiętaj zasadę: TOTALYTD do prostego narastania, DATESYTD wewnątrz CALCULATE, gdy dochodzą własne warunki.

SAMEPERIODLASTYEAR i DATEADD: rok do roku

Co chcemy osiągnąć. Chcemy porównać sprzedaż Nordvelli z tym samym okresem rok wcześniej, w złotych i w procentach, i umieć przesunąć porównanie o inny okres, na przykład o kwartał.

Narastanie odpowiada na pytanie ile mamy do tej pory. Porównanie rok do roku (year over year, w skrócie YoY) odpowiada na pytanie czy rośniemy. To najczęstsze pytanie na zarządzie Nordvelli. Rdzeniem jest funkcja SAMEPERIODLASTYEAR, która przesuwa aktualny kontekst dat dokładnie o rok wstecz.

Infografika JSystems o przesuwaniu okna dat w DAX: bieżący okres, rok wcześniej, przesunięcie o miesiąc, okno 12 miesięcy
Wszystkie funkcje czasowe robią jedno: podmieniają zbiór dat, po którym liczy się miarą. Rok do roku to to samo okno cofnięte o dwanaście miesięcy, średnia krocząca to okno o stałej długości przesuwane po osi.
Sprzedaż rok temu =
CALCULATE (
    [Łączna sprzedaż],
    SAMEPERIODLASTYEAR ( DimKalendarz[Data] )
)
Pasek formuł Power BI z miarą Sprzedaż rok temu: CALCULATE z SAMEPERIODLASTYEAR
SAMEPERIODLASTYEAR przesuwa bieżący zbiór dat o rok wstecz, a CALCULATE liczy na nim Łączną sprzedaż.

Różnica rok do roku w złotówkach:

Zmiana r/r =
[Łączna sprzedaż] - [Sprzedaż rok temu]

I zmiana w procentach, bezpiecznie przez DIVIDE:

Zmiana r/r % =
DIVIDE ( [Zmiana r/r], [Sprzedaż rok temu], BLANK () )

Krok 8. Utwórz trzy miary (format #,0 "zł", a dla Zmiana r/r % format 0.0%: zaznacz ją w panelu Dane i na karcie Narzędzia miar wpisz w polu Format 0.0%). Dodaj stronę Rok do roku i wstaw na niej macierz. DimKalendarz[Rok] przeciągnij do obszaru Wiersze: zaznaczenie pola wyboru wrzuciłoby rok do Wartości jako sumę, bo to liczba. Do Wartości daj Łączną sprzedaż, Sprzedaż rok temu, Zmianę r/r i Zmianę r/r %.

Pasek formuł Power BI z miarą Zmiana r/r % i formatem 0.0% w polu Format na karcie Narzędzia miar
Format procentowy ustawiasz raz na mierze. Zapis 0.0% oznacza jedno miejsce po przecinku i znak procenta doklejony przez Power BI.

Co zobaczysz. W wierszu roku 2022 miara Sprzedaż rok temu jest pusta, bo w modelu nie ma roku 2021, a więc nie ma z czym porównywać. Dlatego użyliśmy DIVIDE z BLANK() jako wynikiem awaryjnym, żeby nie wyskoczyło dzielenie przez zero. Od roku 2023 w górę widzisz realne różnice. To jest miejsce, w którym Nordvella odczytuje, czy sieć faktycznie rośnie, czy tylko obraca podobnymi liczbami.

Macierz lat Nordvelli: Łączna sprzedaż, Sprzedaż rok temu, Zmiana r/r i Zmiana r/r % od 13,0 do -60,2 procent
Rok 2022 nie ma z czym się porównać, więc komórki są puste. Rok 2026 pokazuje minus 60,2 procent, bo dane kończą się na maju: to nie spadek sprzedaży, tylko niepełny rok.

DATEADD: bardziej elastyczny brat

SAMEPERIODLASTYEAR umie tylko jedno: cofnąć o rok. Gdy chcesz cofnąć o miesiąc, o kwartał albo o dowolną liczbę okresów, sięgasz po DATEADD. Przyjmuje ona kolumnę dat, liczbę przesunięcia (ujemna wstecz, dodatnia w przód) oraz jednostkę czasu.

Sprzedaż miesiąc temu =
CALCULATE ( [Łączna sprzedaż], DATEADD ( DimKalendarz[Data], -1, MONTH ) )

W poprzednim kwartale:

Sprzedaż poprzedni kwartał =
CALCULATE ( [Łączna sprzedaż], DATEADD ( DimKalendarz[Data], -1, QUARTER ) )

Równoważnik SAMEPERIODLASTYEAR, przesunięcie o rok:

Sprzedaż rok temu DateAdd =
CALCULATE ( [Łączna sprzedaż], DATEADD ( DimKalendarz[Data], -1, YEAR ) )

I zmiana miesiąc do miesiąca (month over month) w procentach, format 0.0%:

Zmiana m/m % =
DIVIDE (
    [Łączna sprzedaż] - [Sprzedaż miesiąc temu],
    [Sprzedaż miesiąc temu],
    BLANK ()
)
Pasek formuł Power BI z miarą Zmiana m/m % opartą na Sprzedaży miesiąc temu z DATEADD
Zmiana m/m % korzysta z miary Sprzedaż miesiąc temu, czyli z DATEADD przesuniętego o jeden miesiąc.

Wskazówka: DATEADD potrzebuje ciągłych dat i właśnie dlatego oznaczyliśmy DimKalendarz jako tabelę dat. Jeśli w zbiorze pojawi się luka, przesunięcie o miesiąc trafi w pustkę i miara zwróci puste zamiast wartości. To najczęstsza przyczyna zjawiska, w którym poprzedni miesiąc znika bez żadnego komunikatu o błędzie.

Średnia krocząca: wygładzanie sezonowości

Co chcemy osiągnąć. Chcemy pokazać trend sprzedaży Nordvelli bez sezonowych skoków między grudniem a lutym, żeby było widać, czy sieć naprawdę rośnie.

W Nordvelli grudzień zawsze wystrzeliwuje, a luty zawsze siada. Na surowym wykresie miesiąc po miesiącu trudno powiedzieć, czy sieć rośnie, bo wzrok gubi się w zębach sezonu. Rozwiązaniem jest średnia krocząca (rolling average), czyli średnia z okna o stałej długości, które przesuwa się po czasie. Średnia z trzech miesięcy łagodzi krótkie skoki, średnia z dwunastu miesięcy niemal całkowicie zdejmuje sezonowość i pokazuje sam trend.

Średnia z trzech miesięcy wygładza krótkie wahania:

Średnia krocząca 3M =
VAR Okno =
    DATESINPERIOD (
        DimKalendarz[Data],
        LASTDATE ( DimKalendarz[Data] ),
        -3,
        MONTH
    )
VAR SumaOkna = CALCULATE ( [Łączna sprzedaż], Okno )
VAR LiczbaMiesiecy =
    CALCULATE ( DISTINCTCOUNT ( DimKalendarz[RokMiesiac] ), Okno )
RETURN
    DIVIDE ( SumaOkna, LiczbaMiesiecy )

Średnia z dwunastu miesięcy eliminuje sezonowość i pokazuje trend. Obie miary mają format #,0 "zł":

Średnia krocząca 12M =
VAR Okno =
    DATESINPERIOD (
        DimKalendarz[Data],
        LASTDATE ( DimKalendarz[Data] ),
        -12,
        MONTH
    )
VAR SumaOkna = CALCULATE ( [Łączna sprzedaż], Okno )
VAR LiczbaMiesiecy =
    CALCULATE ( DISTINCTCOUNT ( DimKalendarz[RokMiesiac] ), Okno )
RETURN
    DIVIDE ( SumaOkna, LiczbaMiesiecy )
Pasek formuł Power BI z miarą Średnia krocząca 12M: DATESINPERIOD, SumaOkna i LiczbaMiesiecy w zmiennych VAR
DATESINPERIOD buduje okno dwunastu miesięcy wstecz od ostatniej daty w kontekście, a suma z tego okna podzielona przez liczbę miesięcy daje wygładzoną średnią.

Rozłóżmy to na czynniki. DATESINPERIOD buduje okno dat: bierze punkt końcowy (ostatnią datę bieżącego kontekstu), cofa się o zadaną liczbę jednostek i zwraca ten zakres. CALCULATE liczy w tym oknie łączną sprzedaż, a DISTINCTCOUNT po kolumnie RokMiesiac mówi, z ilu miesięcy to okno naprawdę się składa. Iloraz jednego przez drugie to średnia miesięczna z okna, czyli dokładnie to, co chcemy zobaczyć obok sum miesięcznych. Pierwszy odruch bywa inny: napisać tu AVERAGEX po zbiorze dat. To pułapka, bo AVERAGEX uśrednia wtedy po dniach, nie po miesiącach, i obok słupków liczonych w milionach dostajesz płaską linię przy zerze. Liczenie miesięcy przez DISTINCTCOUNT zamiast sztywnej dwunastki ma jeszcze jedną zaletę: na początku danych, gdzie okno jest krótsze niż pełny rok, średnia nadal wychodzi poprawnie.

Krok 9. Na stronie Rok do roku wstaw Wykres liniowy: Oś X DimKalendarz[RokMiesiac], Oś Y Łączna sprzedaż i Średnia krocząca 12M. Power BI posortuje oś po wartości sprzedaży, więc w Więcej opcji (trzy kropki nad wykresem) wybierz Sortuj: przez, RokMiesiac, a potem Sortuj rosnąco. Wykres poszerz na karcie Ogólne do 1300 (u nas pozycja 600 na 320, wysokość 740): sześćdziesiąt miesięcy w węższym wykresie się nie zmieści i suwak schowa dużą część osi. Przy szerokości 1300 pod osią zostaje wąski pasek przewijania, ale oś jest widoczna od stycznia 2022 do listopada 2026, a z nią cały okres sprzedaży.

Linia łącznej sprzedaży skacze w górę i w dół wraz z sezonem, z wyraźnymi grudniowymi szczytami: 14,0 mln zł w grudniu 2022, 21,2 mln zł w grudniu 2025. Linia średniej kroczącej jest gładka i rośnie z 6 do 11 mln zł. Ta gładka linia to odpowiedź na pytanie, czy Nordvella rośnie strukturalnie. Rośnie, tylko sezon to zasłania. Za majem 2026 czarna linia opada, bo dane sprzedaży kończą się w maju, a średnia dzieli sumę okna przez liczbę miesięcy kalendarza, także tych bez sprzedaży. To ten sam koniec danych, który w macierzy rok do roku da minus 100 procent.

Wykres liniowy Nordvelli: Łączna sprzedaż z grudniowymi szczytami i Średnia krocząca 12M rosnąca z 6 do 11 mln zł
Czerwona linia to sprzedaż miesiąc po miesiącu, z grudniowymi szczytami do 21 mln zł. Czarna to średnia krocząca z dwunastu miesięcy: rośnie z ok. 6 do 11 mln zł i opada dopiero za majem 2026, gdzie kończą się dane.

Macierz YoY procent per miesiąc

Co chcemy osiągnąć. Na cotygodniowym przeglądzie zarząd Nordvelli chce jednym spojrzeniem zobaczyć, w których miesiącach sieć rośnie, a w których traci wobec roku poprzedniego. Chcemy zbudować pokolorowaną macierz zmian rok do roku.

Na koniec złożymy wszystko w jeden widok, który faktycznie trafia na cotygodniowy przegląd w Nordvelli. Chodzi o macierz, w której wiersze to miesiące, kolumny to lata, a wartości to zmiana procentowa rok do roku, dodatkowo pokolorowana: zieleń tam, gdzie rośniemy, czerwień tam, gdzie spadamy. To pozwala jednym rzutem oka wychwycić słabe miesiące.

Krok 10. Wstaw obok macierz: do Wierszy przeciągnij DimKalendarz[MiesiacNazwa], do Kolumn DimKalendarz[Rok], do Wartości Zmianę r/r %. Następnie rozwiń strzałkę przy tej mierze w obszarze Wartości i wybierz Formatowanie warunkowe, a potem Kolor tła. W oknie Kolor tła - Zmiana r/r % zostaw Styl formatowania Gradient. Domyślnie minimum jest zielone, a maksimum czerwone, więc zmień kolory: Minimum czerwone (z palety Kolory motywu), Maksimum zielone (Więcej kolorów, szesnastkowo #2E9E4F). Zaznacz Dodaj kolor środkowy i ustaw Środek na Niestandardowe z wartością 0 i kolorem białym. Zatwierdź przyciskiem OK.

Okno Kolor tła - Zmiana r/r %: gradient od czerwonego minimum przez biały środek 0 do zielonego maksimum
Trzy pola decydują o wszystkim: kolor minimum, kolor maksimum i środek ustawiony na sztywno na zero (Niestandardowe, 0). Bez tego środek wypadłby na średniej z danych.

Miesiące układają się chronologicznie, bo w rozdziale o wizualizacjach podstawowych posortowaliśmy MiesiacNazwa według kolumny Miesiac. Bez tego Kwiecień wylądowałby na górze listy, przed Styczniem.

Krok 11. Wyłącz jeszcze kolumnę Suma po prawej stronie macierzy: Formatuj element wizualny, przełącznik Sumy częściowe kolumn. Suma zmian procentowych z kilku lat nie ma sensu biznesowego. Wiersz Suma na dole zostaje, bo pokazuje wynik każdego roku. Czcionkę ustaw na 14, rozmiar na 560 na 700.

Jak to czytać. W Nordvelli taka macierz od razu pokazuje, że rok 2024 był najmocniejszy (dwadzieścia procent wzrostu wobec 2023), a 2025 wyhamował do dwunastu procent. Czerwień w kolumnie 2026 nie jest zaś sygnałem alarmowym, tylko skutkiem tego, że dane kończą się na maju - i to jest pierwsza rzecz, którą trzeba sprawdzić, zanim ktoś zaniesie taki raport na zarząd. Macierz rok do roku nie mówi, dlaczego tak jest, ale nieomylnie wskazuje, gdzie szukać. To właśnie różnica między raportem, który pokazuje liczby, a raportem, który prowadzi decyzje.

Strona Rok do roku: pokolorowana macierz Zmiana r/r % miesiącami i latami, czerwone minus 100 procent od czerwca 2026
Cała dynamika sieci na jednym ekranie. Czerwone minus sto procent od czerwca 2026 to nie załamanie sprzedaży, tylko koniec danych. Dokładnie to trzeba sprawdzić, zanim taki raport pojedzie na zarząd.

Wskazówka: te same miary czasowe napiszesz raz i działają wszędzie. Wrzucone na wykres słupkowy per sklep pokażą wzrost rok do roku dla każdego z piętnastu sklepów Nordvelli. Wrzucone na kartę z wybranym rokiem pokażą jedną liczbę na slajd zarządu. Siła DAX polega na tym, że poprawna miara nie zna kontekstu i sama dopasowuje się do wizualizacji, w której ją umieścisz.

✕

Najczęściej zadawane pytania

Dlaczego Time Intelligence wymaga osobnej tabeli kalendarza?
Funkcje takie jak TOTALYTD czy SAMEPERIODLASTYEAR buduja wewnetrznie ciag dat i przesuwaja filtr po czasie. Potrzebuja ciaglej tabeli z jednym wierszem na kazdy dzien, bez luk, oznaczonej jako tabela dat. Kolumna daty w tabeli faktow tego nie zapewnia, bo tam daty sa nieregularne i sie powtarzaja.
Czym rozni sie TOTALYTD od DATESYTD?
TOTALYTD to skrot, ktory od razu liczy miare narastajaco od poczatku roku. DATESYTD zwraca tylko zbior dat od 1 stycznia do konca kontekstu i uzywasz go wewnatrz CALCULATE, gdy chcesz dodac wlasne warunki, na przyklad narastajaco tylko dla jednego kanalu sprzedazy.
Jak policzyc zmiane procentowa rok do roku w Power BI?
Policz sprzedaz biezaca, policz sprzedaz sprzed roku przez CALCULATE z SAMEPERIODLASTYEAR, a nastepnie roznice podziel przez wartosc sprzed roku funkcja DIVIDE z zerem jako wynikiem awaryjnym. Wynik sformatuj jako procent.
Do czego sluzy srednia kroczaca w analizie sprzedaży?
Średnia krocząca wygładza wahania i sezonowość, dzięki czemu widać rzeczywisty trend zamiast miesiecznych skokow. W Nordvelli średnia z dwunastu miesięcy prostuje piki końcoworoczne i pokazuje, czy sieć rośnie strukturalnie.

Komentarze (0)

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

Brak komentarzy...