Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Komunikaty błędów DAX
Dzielenie przez zero w DAX - DIVIDE zamiast operatora / i wartość nieskończoności
Słowo Nieskończoność albo NaN w tabeli to jedyny ślad, że wskaźnik podzielił coś przez zero, bo Power BI nie pokazuje przy tym żadnego komunikatu. Tak działa dzielenie przez zero w DAX zapisane operatorem ukośnika, gdy w części wierszy mianownik jest zerem lub pustą wartością, na przykład w sprzedaży na zwrot, sprzedaży na metr kwadratowy albo udziale. Rozbieramy, co dokładnie zwraca ukośnik, dlaczego psuje sumy i ranking i jak zastąpić go funkcją DIVIDE.
W tabeli albo macierzy zamiast liczby pojawia się Nieskończoność, -Nieskończoność albo NaN. W kursie miara Sprzedaż na zwrot ukośnikiem pokazuje Nieskończoność dla sklepu Nordvella Warszawa Centrum w październiku 2024: sklep sprzedał wtedy za 705 941,71 zł i nie przyjął ani jednego zwrotu. Ta sama miara przez DIVIDE zostawia pustą komórkę.
Na modelu Nordvelli sprawdziliśmy wszystkie przypadki zapytaniem DAX. Liczba podzielona przez zero daje Infinity, liczba ujemna przez zero -Infinity, a zero przez zero NaN. Liczba podzielona przez pustą wartość też daje Infinity, zero przez pustą wartość NaN, a pusta przez pustą zostaje pusta. Żaden z tych przypadków nie kończy się komunikatem błędu.
Nieskończoność idzie dalej. W rankingu sklepów według sprzedaży na zwrot w październiku 2024 Warszawa Centrum wychodzi na pierwsze miejsce, przed Warszawą Ursynów z 479 033,53 zł. SUMX i AVERAGEX po sklepach dają Infinity, chociaż wiersz całej sieci liczy się poprawnie: 9 894 194,40 zł sprzedaży na 58 zwrotów, czyli 170 589,56 zł na zwrot.

Zobacz też: Szkolenie Zaawansowany DAX w Power BI
Operator ukośnika liczy jak zwykła arytmetyka liczb zmiennoprzecinkowych, w której dzielenie przez zero ma wynik nieskończony, a zero przez zero wynik nieokreślony (NaN). Pusta wartość w mianowniku działa przy tym jak zero, chyba że pusty jest też licznik. Tak działa ukośnik w każdym miejscu: w mierze, w kolumnie obliczeniowej i w iteratorze.
Pusty mianownik pojawia się częściej niż zerowy. Miara Liczba zwróconych pozycji to CALCULATE z COUNTROWS i warunkiem CzyZwrot = 1, a COUNTROWS bez wierszy zwraca pustą wartość, nie zero. Na Nordvelli 75 z 795 par sklep i miesiąc ze sprzedażą nie ma żadnego zwrotu, więc w każdej z nich ukośnik daje Nieskończoność. Zero bywa też zapisane w danych: Nordvella Online ma w DimSklepy powierzchnię 0 m2, więc jej sprzedaż na metr kwadratowy liczona ukośnikiem to Infinity. Dzielenie pustej wartości przez pustą, które nie kończy się błędem, pokazujemy w lekcji o podstawach DAX, na ocenach sklepu bez ankiet.
Kilka funkcji zachowuje się inaczej niż ukośnik. QUOTIENT i MOD przy zerowym dzielniku przerywają obliczenie komunikatem „Podczas obliczania funkcji „QUOTIENT” wystąpiło dzielenie przez zero.” (w angielskiej wersji: „Division by zero has occurred when evaluating function 'QUOTIENT'.”), a dla MOD z jej nazwą w cudzysłowie.
Sprzedaż na zwrot przez DIVIDE = DIVIDE([Łączna sprzedaż], [Liczba zwróconych pozycji])
Sprzedaż na zwrot lub zero = DIVIDE([Łączna sprzedaż], [Liczba zwróconych pozycji], 0)
DIVIDE(1, 0, [Łączna sprzedaż]) i nawet DIVIDE(1, 0, 2 + 3) skończyły się komunikatem „Alternatywny wynik, który ma być zwracany w przypadku dzielenia przez zero, musi być stałą wartością liczbową.” (w angielskiej wersji: „The alternate result to return on divide by zero cases must be a constant numeric value.”). Zmienna z liczbą przeszła: VAR alt = 5 i DIVIDE(1, 0, alt) dało 5.Sprzedaż na m2 = DIVIDE(DimSklepy[Sprzedaż sklepu], DimSklepy[Powierzchnia_m2])
= 0 łapie też pustą wartość. IFERROR też działa z ukośnikiem: IFERROR(1/0, -1) dało -1, ale według dokumentacji Microsoft DIVIDE jest krótsze i lepiej zoptymalizowane niż sprawdzanie mianownika warunkiem.Sprzedaż na m2 w pełnych złotych =
VAR Dzielnik = SUM(DimSklepy[Powierzchnia_m2])
RETURN
IF(Dzielnik = 0, BLANK(), QUOTIENT([Łączna sprzedaż], Dzielnik))FORMAT(1/0, "#,0.00") zwrócił tekst „inf”, a FORMAT(0/0, "#,0.00") tekst „-nan(ind)”. Poprawka musi być w formule, nie w wyglądzie liczby. Jak świadomie pokazać zero zamiast pustej komórki, opisujemy w poście o pustej wartości zamiast zera w tabeli.Po zmianie sprawdź trzy rzeczy na tym samym filtrze. W tabeli nie ma już słowa Nieskończoność ani NaN. Ranking nie zaczyna się od wiersza z pustym mianownikiem: na Nordvelli pierwsza jest Warszawa Ursynów z 479 033,53 zł. Sumy i średnie po wierszach są skończone: SUMX po sklepach z DIVIDE daje 2 941 534,99 zł, a AVERAGEX 210 109,64 zł z 14 sklepów, bo sklep z pustą wartością nie wchodzi do średniej. Dlaczego wiersz Suma nie musi być sumą wierszy, wyjaśniamy w poście o wierszu Suma, który nie zgadza się z sumą wierszy.
Dziel przez DIVIDE wszędzie tam, gdzie mianownik jest miarą albo kolumną. Ukośnik zostaw dla stałych różnych od zera, na przykład przy dzieleniu przez 1000. Takie zalecenie podaje także dokumentacja Microsoft.
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...