Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power Query w Excelu, Power BI i Fabric
Expression.Error: Nie możemy przekonwertować wartości null na typ Logical
Komunikat „Nie możemy przekonwertować wartości null na typ Logical” pojawia się w kolumnach warunkowych zbudowanych na danych z pustymi komórkami, na przykład przy segmencie cenowym, progu rabatu albo fladze przekroczenia budżetu. Większość wierszy dostaje wynik, a w wierszach z pustą wartością stoi Error. Pokazujemy, skąd w warunku bierze się null, jak poprawić regułę i kiedy zamiana pustych wartości na zero ma sens.
Krok kolumny warunkowej albo niestandardowej działa, ale w części wierszy nowej kolumny stoi Error. Błąd dostają wiersze, w których kolumna użyta w warunku jest pusta. Kliknięcie w puste miejsce obok napisu Error pokazuje komunikat:
Expression.Error: Nie możemy przekonwertować wartości null na typ Logical.Angielski oryginał to Expression.Error: We cannot convert the value null to type Logical. W polu Szczegóły Power Query podaje dwa pola: Value, czyli wartość, której nie dało się zamienić, i Type, czyli typ docelowy. W naszym teście na trzech produktach, z których jeden nie miał ceny, segment cenowy dostały dwa wiersze (Premium i Średni), a trzeci zgłosił ten błąd.
W języku M porównanie z null nie daje fałszu, tylko null. Sprawdziliśmy w Excelu, że null >= 3000 zwraca null. Instrukcja if potrzebuje wartości logicznej, czyli prawdy albo fałszu, a null nie jest żadną z nich, więc silnik zgłasza błąd konwersji. Kolumna warunkowa zapisuje reguły z okna jako zagnieżdżone wyrażenie if:
each if [Cena netto] >= 3000 then "Premium"
else if [Cena netto] >= 1000 then "Średni"
else "Podstawowy"Dla pustej ceny już pierwsze porównanie daje null, więc ani druga reguła, ani W przeciwnym razie nie mają szansy zadziałać. Inaczej działa sprawdzanie równości: null = 3000 zwraca fałsz, a null <> 3000 prawdę, więc warunki z równością albo nierównością tego błędu nie dają.
Ten sam warunek w filtrze wierszy zachowuje się jeszcze inaczej. Filtr [Cena netto] >= 3000 nie zgłasza błędu, tylko pomija wiersze z pustą ceną: w naszym teście z trzech wierszy został jeden. Brak komunikatu w filtrze nie znaczy więc, że puste wartości zostały obsłużone.

each if [Cena netto] = null then null else if [Cena netto] >= 3000 then "Premium", a dalszą część zostaw bez zmian. Zamiast pierwszego null możesz wstawić tekst, na przykład "Brak ceny". W naszym teście ta zmiana usunęła wszystkie błędy.[Cena netto] <> null and [Cena netto] >= 3000 dla pustej ceny dało fałsz, a nie błąd.??: each if ([Cena netto] ?? 0) >= 3000 then "Premium". Wiersz z pustą ceną trafi wtedy do segmentu Podstawowy. Zamianę w całej kolumnie zrobi krok = Table.ReplaceValue(#"Poprzedni krok", null, 0, Replacer.ReplaceValue, {"Cena netto"}), ale wtedy zero zobaczą też wszystkie dalsze obliczenia.Włącz na karcie Widok pole Jakość kolumn i przełącz profilowanie na cały zestaw danych: w nowej kolumnie Błąd ma pokazywać 0%. Udział pustych wartości w wyniku powinien odpowiadać udziałowi pustych wartości w kolumnie z warunku, bo to te same wiersze. Przefiltruj wynik po null albo po tekście w rodzaju „Brak ceny” i przejrzyj te wiersze, zanim przekażesz dane dalej.
Nawrotom zapobiegniesz, sprawdzając Jakość kolumn kolumny źródłowej przed zbudowaniem warunku: każdy procent przy słowie Puste oznacza, że reguła dla null jest potrzebna. Sprawdź też filtry na tych samych kolumnach. Tam błąd się nie pojawi, a wiersze z pustą wartością znikną bez ostrzeżenia.
Wróć do listy: 88 najczęstszych pytań i problemów związanych z Power Query
Szkolenie Microsoft Excel - Power Query --> Dwa dni warsztatów z Excela: pobieranie danych z plików, folderów, SharePointa i baz SQL, ich czyszczenie i łączenie w Power Query, praca w języku M, a na koniec model danych i oparta na nim tabela przestawna. Prowadzi Sebastian Stasiak.
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...