Blog JSystems - uwalniamy wiedzę!

Szukaj

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

Wynik w Power BI różni się od Excela - zaokrąglenia, typy liczb i kolejność sumowania

W skrócie

  • Power BI pokazuje inny wynik niż Excel na tych samych danych, gdy arkusz zaokrągla każdy wiersz przed sumą, gdy raport albo miara ma filtr, którego nie widać na karcie, albo gdy różnią się typy liczb.
  • Arkusz z ZAOKR w każdym wierszu zaokrągla wartości przed sumą, a Power BI sumuje pełne wartości i zaokrągla dopiero wyświetlanie. Liczby dziesiętne mają ograniczoną dokładność, więc wynik dodawania zależy od kolejności.
  • Porównaj liczbę wierszy i sumę surowej kolumny, przejrzyj filtry i definicję miary, a potem odtwórz w DAX regułę zaokrągleń z Excela. Różnice ułamków porównuj z tolerancją, nie znakiem równości.

Karta w raporcie Power BI pokazuje 467 775 009 zł, a ta sama suma liczona regułą arkusza, z ZAOKR w każdym wierszu, daje 467 775 782 zł. Inny wynik niż w Excelu, o kilka złotych albo kilka milionów, nie musi być błędem: obie liczby bywają poprawne, tylko odpowiadają na różne pytania. Pokazujemy, jak w kilku krokach ustalić, skąd bierze się różnica: z zaokrągleń, z filtrów, z definicji miary czy z typu liczb. Wszystkie kwoty pochodzą z zapytań na modelu Nordvelli, w którym tabela FaktSprzedaz ma 108 675 wierszy.

Jak to wygląda w praktyce

Miara Łączna sprzedaż to SUM(FaktSprzedaz[WartoscNetto]) i daje 467 775 009,17 zł, a karta z formatem #,0 "zł" pokazuje 467 775 009 zł. Ta sama suma z każdym wierszem zaokrąglonym do pełnych złotych przed sumowaniem, czyli reguła arkusza z ZAOKR w każdym wierszu odtworzona w DAX, daje 467 775 782 zł, o 773 zł więcej. Rabat 7% liczony w każdym wierszu i zaokrąglony do grosza to 32 744 258,84 zł, a 7% od sumy to 32 744 250,64 zł. W samym sierpniu 2025 (1 981 wierszy) różnica z zaokrąglenia wierszy do złotych wynosi 4,21 zł.

Różnica rzędu milionów ma inną przyczynę. Bez 2 109 wierszy oznaczonych jako anomalie sprzedaż wynosi 410 359 446,94 zł, a bez 2 714 wierszy zwrotów 456 203 988,98 zł. Tyle samo zwraca miara Sprzedaż bez zwrotów, która ma warunek FaktSprzedaz[CzyZwrot] = 0 wbudowany w CALCULATE. Trzeci rodzaj różnic dotyczy kwot brutto: suma kolumny WartoscBrutto to 566 064 984,87 zł, miara Sprzedaż brutto liczona z netto i stawki VAT daje 566 064 985,73 zł, a ta sama formuła z zaokrągleniem każdego wiersza do grosza 566 064 993,66 zł.

Dlaczego tak się dzieje

Pierwsza przyczyna to kolejność działań. Excel z formułą ZAOKR w każdym wierszu najpierw zaokrągla, potem sumuje. Power BI sumuje pełne wartości, a format miary zmienia tylko wyświetlanie: karta pokazuje 467 775 009 zł, choć miara ma 467 775 009,17 zł. Sama funkcja ROUND w DAX według dokumentacji Microsoft zaokrągla połówki od zera i dla przykładów z dokumentacji ZAOKR daje te same wyniki: 2,15 do 2,2, 2,149 do 2,1 i -1,475 do -1,48. Inaczej zaokrągla Power Query, co opisujemy w poście o zaokrąglaniu w Power Query i liczbie 2,5.

Druga przyczyna to typ liczb. Według dokumentacji Microsoft typ Liczba dziesiętna przechowuje liczby tak jak Excel, z dokładnością do 15 cyfr, a Stałoprzecinkowa liczba dziesiętna ma zawsze cztery cyfry po przecinku. Liczby zmiennoprzecinkowe, czyli zapisane binarnie z ograniczoną dokładnością, dają drobne błędy: w DAX 0.1 + 0.2 = 0.3 zwraca FAŁSZ, a różnica to 5,55E-17. Z tego samego powodu kolejność dodawania zmienia wynik: (0.1 + 0.2) + 0.3 i 0.1 + (0.2 + 0.3) różnią się o 1,11E-16, choć obie wartości wyglądają jak 0,6. Przy kwotach z dwoma miejscami po przecinku takie różnice nie są widoczne na karcie, ale psują porównania znakiem równości.

Trzecia przyczyna to filtry. Raport może mieć filtr na wizualizacji, stronie albo całym raporcie, a według dokumentacji Microsoft filtra oznaczonego jako ukryty odbiorca w ogóle nie widzi. Miara może też zawierać własny warunek, jak Sprzedaż bez zwrotów.

Co zrobić krok po kroku

  1. Zacznij od liczby wierszy i sumy surowej kolumny. Otwórz Widok zapytań w języku DAX, uruchom zapytanie poniżej i porównaj wynik z liczbą wierszy i sumą w arkuszu. Na Nordvelli to 108 675 wierszy i 467 775 009,17 zł, a miara daje tyle samo co suma kolumny. Inna liczba wierszy oznacza filtr albo inne dane, ta sama liczba wierszy kieruje uwagę na zaokrąglenia.
    EVALUATE
    ROW (
        "Wiersze", COUNTROWS ( FaktSprzedaz ),
        "Suma kolumny", SUM ( FaktSprzedaz[WartoscNetto] ),
        "Miara", [Łączna sprzedaż]
    )
  2. Przejrzyj filtry wizualizacji. Zaznacz kartę i otwórz panel Filtry: sprawdź sekcje Filtry dla tej wizualizacji, Filtry na tej stronie i Filtry na wszystkich stronach, także karty z ikoną Ukryj filtr albo Zablokuj filtr. Potem zaznacz miarę w panelu Dane i przeczytaj jej formułę w pasku formuły. Warunek w CALCULATE, jak w Sprzedaż bez zwrotów, przesuwa wynik o 11 571 020,19 zł wartości zwrotów.
  3. Gdy liczba wierszy się zgadza, odtwórz regułę zaokrągleń z arkusza. Jeśli Excel zaokrągla każdy wiersz, napisz miarę z SUMX i ROUND w środku. Na Nordvelli pierwsza miara daje 467 775 782 zł, a druga 32 744 258,84 zł. Gdy wynik miary zgadza się z arkuszem, różnicę robiła reguła zaokrągleń. Ustal z odbiorcą raportu, która reguła jest obowiązująca, bo obie liczby są poprawne, tylko liczone inaczej.
    Sprzedaż zaokrąglana w wierszach =
    SUMX ( FaktSprzedaz, ROUND ( FaktSprzedaz[WartoscNetto], 0 ) )
    
    Rabat 7% liczony w wierszach =
    SUMX ( FaktSprzedaz, ROUND ( FaktSprzedaz[WartoscNetto] * 0.07, 2 ) )
  4. Przy kwotach brutto porównuj tę samą definicję. Suma kolumny WartoscBrutto ze źródła (566 064 984,87 zł) nie jest tym samym co netto razy stawka VAT liczone w modelu (566 064 985,73 zł). W 879 wierszach kolumna brutto różni się od netto z VAT zaokrąglonego do grosza, więc arkusz liczony z netto i arkusz liczony z kolumny brutto dadzą różne sumy.
  5. Sprawdź typ kolumny: zaznacz ją w panelu Dane i na karcie Narzędzia kolumn zobacz pole Typ danych. Dla kwot z dwoma miejscami po przecinku zmiana na Stałoprzecinkowa liczba dziesiętna nie zmienia sumy: przeliczenie każdego wiersza WartoscNetto na ten typ funkcją CURRENCY dało dokładnie 467 775 009,17 zł. Różnica pojawia się przy wartościach z wieloma cyframi po przecinku, na przykład przy dzieleniu: suma WartoscNetto / 3 w obu typach różni się o 0,0018 zł.
  6. Wyniki z ułamkami porównuj z tolerancją. Zamiast warunku równości dwóch kwot sprawdzaj, czy wartość bezwzględna różnicy jest mniejsza niż pół grosza, albo porównuj kwoty po zaokrągleniu do dwóch miejsc. W Excelu ten sam cel ma opcja skoroszytu, która zrównuje zapisane wartości z wyświetlanymi (w angielskiej wersji Set precision as displayed), ale według dokumentacji Microsoft zmienia ona zapisane liczby na stałe.

Jak sprawdzić, że problem zniknął

Gdy suma całości nadal się nie zgadza, porównuj miesiącami. Tabela z DimKalendarz[RokMiesiac] i miarą obok tabeli przestawnej w Excelu pokaże, w którym miesiącu zaczyna się różnica. Na Nordvelli sierpień 2025 to 1 981 wierszy i 8 345 750,79 zł, a po zaokrągleniu wierszy do złotych 8 345 755 zł. Różnica kilku złotych w każdym miesiącu wskazuje na zaokrąglenia, różnica w jednym miesiącu na brakujące albo dodatkowe wiersze. Wiersz Suma, który nie zgadza się z sumą wierszy tabeli, opisujemy w poście o wierszu Suma w tabeli.

Żeby różnice nie wracały, zapisz w opisie każdej miary, co liczy i jak zaokrągla, a do arkuszy kontrolnych pobieraj dane z tego samego modelu, o czym piszemy w poście o funkcji Analizuj w programie Excel.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Data types in Power BI (Decimal number, Fixed decimal number) (źródło)
  • Microsoft Learn: ROUND function (DAX) (źródło)
  • Microsoft Learn: Floating-point arithmetic may give inaccurate results in Excel (źródło)
  • Microsoft Support: Funkcja ZAOKR (źródło)
  • Microsoft Learn: Format filters in Power BI reports (Lock or hide filters) (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: sumy z zaokrągleniem w wierszach i od sumy, rabat 7%, kwoty brutto, CURRENCY, ROUND, porównania liczb zmiennoprzecinkowych i warunki zwrotów oraz anomalii.

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

Dlaczego suma w Power BI różni się od sumy w Excelu?
Sprawdź trzy przyczyny: arkusz zaokrągla wartości w każdym wierszu przed sumowaniem, raport ma filtr, którego nie widać od razu, albo miara liczy co innego niż suma kolumny. Na modelu Nordvelli zaokrąglenie każdego wiersza do złotych daje 467 775 782 zł zamiast 467 775 009 zł, a pominięcie anomalii daje 410 359 446,94 zł.
Czy Power BI zaokrągla inaczej niż Excel?
Funkcja ROUND w DAX zaokrągla połówki od zera i dla przykładów z dokumentacji funkcji ZAOKR w Excelu daje te same wyniki, na przykład 2,15 do 2,2 i -1,475 do -1,48. Inaczej zaokrągla Power Query, a format miary w raporcie zmienia tylko wyświetlanie, nie wartość.
Liczba dziesiętna czy stałoprzecinkowa liczba dziesiętna w Power BI?
Liczba dziesiętna przechowuje liczby tak jak Excel, z dokładnością do 15 cyfr. Stałoprzecinkowa liczba dziesiętna ma zawsze cztery cyfry po przecinku. Dla kwot z dwoma miejscami po przecinku suma wychodzi taka sama, co sprawdziliśmy na 108 675 wierszach sprzedaży w modelu Nordvelli.
Dlaczego 0,1 + 0,2 nie równa się 0,3 w DAX?
Liczby dziesiętne są zapisywane binarnie z ograniczoną dokładnością, więc wynik dodawania różni się od 0,3 o 5,55E-17. Z tego samego powodu wynik zależy od kolejności dodawania. Porównuj takie wartości po zaokrągleniu albo sprawdzaj, czy różnica jest mniejsza niż pół grosza.

Komentarze (0)

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

Brak komentarzy...