Dodawanie i dzielenie null, zera i tekstu w Power Query (M) i Power Pivot (DAX)

Języki M i DAX różnią się w wielu miejscach od standardowych kalkulacji znanych z programu Excel. Jeśli chcemy nimi operować, warto wiedzieć, jak zachowają się w ekstremalnych sytuacjach, np. takich, które podnoszą ciśnienie szkolnych matematyków, krzyczących: „Pamiętaj, cholero, nie dziel przez zero.” 😉

Jakie operacje będziemy testować w Power Query i Power Pivot?

Sprawdzimy w różnych kombinacjach operację dzielenia i dodawania z wykorzystaniem zera, null w Power Query / BLANK() w Power Pivot, tekstu.

Wyniki i wnioski dla użytkowników języka M w Power Query (Excel i Power BI)

Wnioski

  • Każda operacja z tekstem daje błąd,
  • Każda operacja z nullem (oprócz przypadków z punktu wyżej) daje null, np. 0/null, null/0, ale też 1+null i 0+null – to najbardziej praktyczny i najważniejszy wniosek, bo może doprowadzić do błędnych wyników przy kalkulacjach na kolumnach,
  • Dzielenie 0/0 nie daje liczby (NaN = Not a Number) – Pani od matematyki miała rację mówiąc, że się nie da,
  • Dzielenie 1/0 daje nieskończoność (Infinity) – tu Pani do matmy powiedziałaby: „Nieskończoność? Prędzej mi tu na ręku kaktus wyrośnie”.

Wyniki i wnioski dla użytkowników języka DAX w Excel Power Pivot i Power BI

Wnioski

  • Każda operacja z tekstem daje błąd,
  • 0/BLANK() i 1/BLANK() daje nieskończoność – inaczej niż w Power Query, natomiast BLANK()/0 daje, podobnie jak w PQ, pusty,
  • Dodawanie BLANK() działa bardziej intuicyjnie niż w Power Query, np. 1 + BLANK() = 1,
  • Dzielenie przez 0 będzie niebezpieczne dla naszych miar, więc rekomendowane jest użycie formuły DIVIDE.

Pobierz plik Excel z testem kalkulacji

Tu możesz pobrać nasz testowy plik Excel z zapytaniem w Power Query i miarami w Power Pivot.

Masz inne spostrzeżenia?

Podziel się w komentarzu.

Udostępnij ten wpis:

Brak komentarzy

  1. Bartosz, jak sobie poradzić z dzieleniem przez zero w języku M?
    Jak wygląda taka formuła, która jest odpowiednikiem JEŻELI.BŁĄD w xls lub DIVIDE w DAX?
    Chciałabym, aby w kolumnie wynikowej zamiast NaN pojawiło się 0, null lub określony tekst, np. „brak danych”.
    Dziękuje z góry za pomoc.

    • Hej Ula, do testowania błędów można użyć try, a do NaN lub infinity proponuję zmodyfikować lekko formuły dla kolumny warunkowej:
      = if [Dzielenie] = #infinity then „a” else if Number.IsNaN([Dzielenie]) then „b” else „c”)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *