Blog JSystems - uwalniamy wiedzę!

Szukaj

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

Średnia w Power BI - AVERAGE, AVERAGEX i średnia z miesięcy dają różne wyniki

W skrócie

  • AVERAGE i AVERAGEX dają inny wynik niż średnia z miesięcy, bo uśredniają inne obiekty: na modelu Nordvelli średnia transakcja to 4 304,35 zł, a średnia sprzedaż miesięczna 8 825 943,57 zł.
  • Różnica między AVERAGE i AVERAGEX polega na tym, że AVERAGEX iteruje po dowolnej tabeli i w każdym wierszu liczy wyrażenie, więc tabela w pierwszym argumencie decyduje, czy uśredniasz transakcje, miesiące czy sklepy.
  • Średnią miesięczną licz przez AVERAGEX po VALUES z kolumną miesiąca, zdecyduj, czy miesiące bez sprzedaży mają się liczyć, i nie dziel sumy przez stałe 12, bo w niepełnym roku zaniżysz wynik o ponad połowę.

Pytanie o średnią sprzedaż ma w Power BI kilka poprawnych odpowiedzi i każda dotyczy czego innego. Na różnicę między AVERAGE, AVERAGEX i średnią z miesięcy trafia autor raportu, który pokazuje zarządowi kartę ze średnią, a liczba nie zgadza się z tym, co wychodzi w Excelu z dwunastu sum miesięcznych. Pokazujemy na modelu Nordvelli, co liczy każda z tych miar, na które pytanie odpowiada i jak zbudować średnią z miesięcy, która działa także w niepełnym roku.

Jak to wygląda w praktyce

Karta z miarą [Średnia wartość transakcji], czyli AVERAGE(FaktSprzedaz[WartoscNetto]), pokazuje na modelu Nordvelli 4 304,35 zł. Miara [Średnia transakcja przez AVERAGEX] daje dokładnie to samo, w sumie i w każdym mieście. Tymczasem dyrektor pytał o średnią miesięczną sprzedaż sieci i spodziewał się kwoty w milionach złotych: sprzedaż 2025 roku podzielona w Excelu przez 12 to 10 561 189,21 zł. Podsumowanie Średnia, wybrane w menu pola WartoscNetto w wizualizacji, to według dokumentacji Microsoft średnia arytmetyczna wartości pola, czyli też średnia z wierszy tabeli faktów, a nie z miesięcy.

Drugi objaw pojawia się, gdy ktoś liczy średnią z miesięcy sam. Miara dzieląca sprzedaż roku przez 12 daje dla 2026 roku 4 199 458,58 zł, choć dane kończą się w maju, a średni miesiąc tego roku przyniósł 10 078 700,58 zł.

Dlaczego tak się dzieje

AVERAGE uśrednia wartości jednej kolumny, czyli wiersze tabeli. W FaktSprzedaz jeden wiersz to jedna transakcja, więc 467 775 009,17 zł dzielone jest przez 108 675 transakcji. AVERAGEX przyjmuje tabelę i wyrażenie, liczy wyrażenie w każdym wierszu tej tabeli i dopiero z wyników bierze średnią. Według dokumentacji Microsoft w pozostałych sprawach AVERAGEX działa jak AVERAGE, więc AVERAGEX(FaktSprzedaz, FaktSprzedaz[WartoscNetto]) to ta sama średnia transakcji. Inny wynik daje dopiero inna tabela w pierwszym argumencie: po miesiącach 8 825 943,57 zł, po sklepach 31 185 000,61 zł, po dniach 290 183,01 zł.

Drugi mechanizm to puste wartości. Według dokumentacji Microsoft AVERAGE i AVERAGEX pomijają puste komórki, a zera wliczają do mianownika. Kalendarz Nordvelli ma 60 miesięcy, sprzedaż jest w 53 z nich, więc średnia miesięczna całego okresu dzieli przez 53. Z dopiskiem + 0 miesiące bez sprzedaży stają się zerami i średnia spada do 7 796 250,15 zł. Dzielenie przez stałe 12 robi to samo z niepełnym rokiem. Kiedy pusta wartość jest lepsza od zera, opisujemy w poście o pustej wartości zamiast zera w tabeli.

Macierz miast Nordvelli: Średnia wartość transakcji i Średnia transakcja przez AVERAGEX z tymi samymi liczbami
Lublin ma najwyższą średnią transakcję: 4 415,51 zł. Obie kolumny dają te same liczby, bo średnia z kolumny to to samo co suma podzielona przez liczbę wierszy.

Co zrobić krok po kroku

  1. Zapisz pytanie, na które ma odpowiedzieć średnia, i nazwij obiekt, po którym uśredniasz: transakcję, dzień, miesiąc albo sklep. Ten obiekt to tabela w pierwszym argumencie AVERAGEX. Na modelu Nordvelli te same dane dają cztery różne średnie: 4 304,35 zł na transakcję, 290 183,01 zł na dzień ze sprzedażą (1612 dni), 8 825 943,57 zł na miesiąc i 31 185 000,61 zł na sklep.
  2. W panelu Dane kliknij prawym przyciskiem tabelę FaktSprzedaz, wybierz Nowa miara i wpisz formułę obok. VALUES zwraca miesiące widoczne w bieżącym kontekście filtra, czyli w zestawie warunków z fragmentatorów i wierszy wizualizacji, a [Łączna sprzedaż] liczy w każdym z nich sprzedaż tego miesiąca. Dla roku 2025 miara daje 10 561 189,21 zł, dla 2026 roku 10 078 700,58 zł (pięć miesięcy z danymi), a dla całego okresu 8 825 943,57 zł.
    Średnia sprzedaż miesięczna =
    AVERAGEX (
        VALUES ( DimKalendarz[RokMiesiac] ),
        [Łączna sprzedaż]
    )
  3. Zdecyduj, czy miesiąc bez sprzedaży ma się liczyć. Do pytania o średni miesiąc, w którym sieć sprzedawała, zostaw wersję z kroku 2. Gdy miesiąc bez sprzedaży to realne zero, na przykład dla sklepu zamkniętego na czas remontu, dopisz + 0. Dla roku 2026 wersja z zerami daje 4 199 458,58 zł, bo dzieli przez 12 miesięcy kalendarza, w tym siedem, które jeszcze nie nadeszły. W niepełnym roku to wynik mylący.
    Średnia miesięczna z zerami =
    AVERAGEX (
        VALUES ( DimKalendarz[RokMiesiac] ),
        [Łączna sprzedaż] + 0
    )
  4. Sprawdź, jak miara zachowuje się w macierzy. W wierszu miesiąca VALUES zwraca jeden miesiąc, więc średnia miesięczna równa się sprzedaży tego miesiąca: w styczniu 2025 obie kolumny pokazują 10 699 558,88 zł. Średnią z kilku miesięcy widać dopiero w wierszach lat, regionów albo sklepów i w wierszu Suma. Średnia sklepu Nordvella Online w 2025 roku to na przykład 3 165 496,44 zł miesięcznie.
  5. Uważaj na średnią ze średnich. AVERAGEX(VALUES(DimSklepy[Nazwa]), [Średnia wartość transakcji]) daje dla sieci 4 301,66 zł zamiast 4 304,35 zł, bo każdy sklep waży tyle samo, niezależnie od liczby transakcji. W regionie Północ różnica wynosi 19,18 zł (4 246,56 zł wobec 4 265,74 zł). Gdy pytanie dotyczy średniej transakcji, licz ją z wierszy faktów, a średnią ze średnich pokazuj tylko wtedy, gdy celowo porównujesz sklepy jako równe jednostki.
  6. Nie iteruj po całej tabeli faktów z miarą w wyrażeniu. AVERAGEX(FaktSprzedaz, [Łączna sprzedaż]) daje na modelu Nordvelli te same 4 304,35 zł, ale w każdym ze 108 675 wierszy wykonuje przejście kontekstu, czyli zamienia wiersz na filtr, więc niepotrzebnie komplikuje obliczenie. Do średniej transakcji wystarczy AVERAGE po kolumnie. Przejście kontekstu wyjaśniamy w lekcji o CALCULATE i kontekście filtrów.

Jak sprawdzić, że problem zniknął

Sprawdź średnią miesięczną arytmetyką: 126 734 270,47 zł sprzedaży z 2025 roku podzielone przez 12 to 10 561 189,21 zł, tyle samo co miara. Dla całego okresu 467 775 009,17 zł przez 53 miesiące ze sprzedażą to 8 825 943,57 zł. Liczbę miesięcy w kontekście pokaże COUNTROWS(VALUES(DimKalendarz[RokMiesiac])): dla 2026 roku zwraca 12, choć sprzedaż jest w pięciu, i to sygnał, że trzeba zdecydować o pustych miesiącach.

Zapisuj w nazwie miary, po czym uśredniasz (średnia transakcja, średnia sprzedaż miesięczna, średnia sprzedaż sklepu), i nie używaj w raportach podsumowania Średnia z menu pola, bo uśrednia ono wartości pola z wierszy tabeli. Ten sam wybór obiektu dotyczy średniej kroczącej, w której liczbę miesięcy w oknie liczy DISTINCTCOUNT, co pokazujemy w poście o średniej kroczącej na początku danych.

Źródła i sposób sprawdzenia

  • Microsoft Learn: AVERAGE function (DAX) (źródło)
  • Microsoft Learn: AVERAGEX function (DAX) (źródło)
  • Microsoft Learn: VALUES function (DAX) (źródło)
  • Microsoft Learn: Work with aggregates (sum, average, and so on) in Power BI (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: średnie po transakcjach, dniach, miesiącach, sklepach i regionach, z pustymi miesiącami i z zerami.

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

Jaka jest różnica między AVERAGE a AVERAGEX w DAX?
AVERAGE uśrednia wartości jednej kolumny, a AVERAGEX liczy wyrażenie w każdym wierszu podanej tabeli i uśrednia wyniki. Dla tej samej kolumny tabeli faktów obie dają ten sam wynik, na modelu Nordvelli 4 304,35 zł średniej transakcji. Różnica pojawia się, gdy AVERAGEX iteruje po innej tabeli, na przykład po miesiącach albo sklepach.
Jak policzyć średnią miesięczną sprzedaż w Power BI?
Użyj AVERAGEX po VALUES z kolumną miesiąca kalendarza i z miarą sprzedaży w drugim argumencie. Miara liczy sprzedaż każdego miesiąca widocznego w kontekście i uśrednia te sumy. Na modelu Nordvelli daje to 10 561 189,21 zł dla 2025 roku i 8 825 943,57 zł dla całego okresu.
Czy AVERAGEX pomija puste wartości?
Tak, AVERAGE i AVERAGEX pomijają wartości puste, a zera wliczają do mianownika. Miesiące bez sprzedaży nie obniżają więc średniej, dopóki miara zwraca dla nich wartość pustą. Po dopisaniu + 0 średnia za 2026 rok na modelu Nordvelli spada z 10 078 700,58 zł do 4 199 458,58 zł, bo dzieli przez 12 miesięcy zamiast pięciu.
Dlaczego średnia miesięczna w tabeli pokazuje to samo co suma miesiąca?
W wierszu macierzy z miesiącem kontekst filtra zostawia jeden miesiąc, więc AVERAGEX uśrednia jedną wartość i zwraca sprzedaż tego miesiąca. Średnią z kilku miesięcy widać w wierszu roku, regionu albo sklepu i w wierszu Suma. Dlatego średnią miesięczną pokazuj w karcie albo w macierzy bez miesięcy w wierszach.

Komentarze (0)

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

Brak komentarzy...