Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
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
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.
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ł.
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.
Zobacz też: Szkolenie Zaawansowany DAX w Power BI
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.
EVALUATE
ROW (
"Wiersze", COUNTROWS ( FaktSprzedaz ),
"Suma kolumny", SUM ( FaktSprzedaz[WartoscNetto] ),
"Miara", [Łączna sprzedaż]
)Sprzedaż zaokrąglana w wierszach = SUMX ( FaktSprzedaz, ROUND ( FaktSprzedaz[WartoscNetto], 0 ) ) Rabat 7% liczony w wierszach = SUMX ( FaktSprzedaz, ROUND ( FaktSprzedaz[WartoscNetto] * 0.07, 2 ) )
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.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ł.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.
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...