Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power Query w Excelu, Power BI i Fabric
Power Query obcina zera wiodące w kodach i numerach - jak je zachować
Gdy w Power Query zera wiodące znikają z kodów produktów, numerów klientów albo kodów pocztowych, problem wychodzi zwykle dopiero przy scalaniu ze słownikiem albo przy porównaniu z systemem źródłowym. Kolumna wygląda porządnie, tylko kod 00123 stał się liczbą 123. Pokazujemy, który krok usuwa zera, jak ustawić typ, żeby przetrwały, i jak je odtworzyć, gdy już przepadły.
Po imporcie pliku CSV albo arkusza kolumna z kodami ma w nagłówku ikonę 123, czyli typ Liczba całkowita, a wartości są wyrównane do prawej. Kod 00123 wyświetla się jako 123, a 04567 jako 4567. Na liście Zastosowane kroki, zaraz po kroku Nagłówki o podwyższonym poziomie, stoi krok Zmieniono typ, którego nikt świadomie nie dodawał.
Skutki wychodzą w kolejnych krokach. Scalenie z katalogiem, w którym kody są tekstem z zerami, nie znajduje par: w naszym teście tekst 123 nie pasuje do 00123 i kolumny dociągnięte ze słownika zostają puste. Długie numery, na przykład 26-cyfrowy numer rachunku, w typie Liczba całkowita w ogóle się nie mieszczą i kończą się błędem Expression.Error: Liczba znajduje się poza zakresem wartości typu 64-bitowa liczba całkowita. (ang. The number is out of range of a 64 bit integer value.).
Dla źródeł bez struktury, czyli plików CSV, tekstowych i arkuszy Excela, Power Query domyślnie sam wykrywa typy kolumn. Według dokumentacji Microsoft przegląda w tym celu pierwsze 200 wierszy i dodaje dwa kroki: promowanie nagłówków i zmianę typu. Kolumna złożona z samych cyfr dostaje typ liczbowy, a liczba nie przechowuje zer na początku. W polskim Excelu Number.From("00123") zwraca 123, tak samo jak krok z Int64.Type dla tej kolumny.
Zera przepadają w chwili konwersji, dlatego późniejsza zmiana typu na Tekst ich nie przywraca. Sprawdziliśmy to: dwa kroki po sobie, najpierw Int64.Type, potem type text, dają tekst 123, a nie 00123. Bywa też, że zer nie ma już w źródle. Gdy w arkuszu widzisz 00123, ale komórka zawiera liczbę 123 z formatem niestandardowym 00000, Power Query odczyta 123, bo pobiera wartość komórki, a nie jej wygląd. Komórka z tekstem 00123 przychodzi jako tekst razem z zerami.
{"Kod klienta", Int64.Type} na {"Kod klienta", type text}. Zatwierdź klawiszem Enter. Kod przejdzie z pliku jako 00123, bo konwersja na tekst nie rusza znaków.Text.PadStart(Text.From([Kod klienta]), 5, "0"), gdzie 5 to długość kodu. Kolumnę możesz też przekształcić w miejscu jednym krokiem: = Table.TransformColumns(Źródło, {{"Kod klienta", each Text.PadStart(Text.From(_), 5, "0"), type text}}). Liczby 123 i 4567 zamienią się w tekst 00123 i 04567.
Po poprawce nagłówek kolumny z kodami ma ikonę ABC, czyli typ Tekst, a wartości zaczynają się od zer. Sprawdź długość kodów tymczasową kolumną niestandardową Text.Length([Kod klienta]): przy kodach pięcioznakowych każdy wiersz powinien mieć 5. Ponów scalanie ze słownikiem i upewnij się, że kolumny dociągnięte z katalogu nie mają pustych wartości. W naszym teście ten sam klucz 00123 po obu stronach daje dopasowanie, a 123 i 00123 nie dają go wcale. Po załadowaniu do arkusza kod z typem Tekst zostaje tekstem razem z zerami: komórka pokazała 00123.
Żeby problem nie wrócił, typ Tekst ustawiaj wszystkim identyfikatorom, na których nie wykonujesz obliczeń: kodom produktów i klientów, kodom pocztowym, NIP-om, numerom kont i dokumentów. Gdy dodajesz nowe źródło albo importujesz plik od nowa, sprawdź, czy na liście kroków nie pojawił się kolejny automatyczny krok Zmieniono typ.
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...