Blog JSystems - uwalniamy wiedzę!

Szukaj

Power Query w Excelu, Power BI i Fabric

Kolumna ma typ Dowolny (ABC123) - dlaczego to problem po załadowaniu

W skrócie

  • Nowa kolumna niestandardowa w Power Query ma w nagłówku ikonę ABC123, czyli typ Dowolny. W edytorze wartości wyglądają poprawnie, a kłopot wychodzi dopiero w modelu danych, w Power BI i w miejscu docelowym Fabric.
  • Formuła kolumny nie mówi Power Query, jaki typ zwraca, więc kolumna dostaje typ Any. W modelu danych Excela taka kolumna z liczbami staje się tekstem, a Dataflow Gen2 nie zapisze typu Dowolny w Lakehouse.
  • Ustaw typ zaraz po dodaniu kolumny ikoną w nagłówku albo dopisz go jako czwarty argument Table.AddColumn, gdy formuła na pewno zwraca liczby. Przed załadowaniem sprawdź ikony wszystkich kolumn.

Kolumna niestandardowa kończy się w Power Query ikoną ABC123 w nagłówku, czyli typem Dowolny. W podglądzie liczby wyglądają dobrze, więc łatwo to przeoczyć, a skutki wychodzą dopiero po załadowaniu. Pokazujemy, co dzieje się z taką kolumną w arkuszu, w modelu danych, w Power BI i w Fabric oraz jak ustawić typ, żeby nie wracać do tematu.

Jak to wygląda w praktyce

Po kliknięciu OK w oknie Kolumna niestandardowa nowa kolumna ma w nagłówku ikonę ABC123. To typ Dowolny, w języku M Any.Type, a nie mieszanka tekstu z liczbami. W kursie widać to na kolumnie Wartość brutto: wartości są wyliczone poprawnie, a kolumna nie ma typu.

Skutki zależą od miejsca, do którego ładujesz dane, i sprawdziliśmy je w polskim Excelu. W tabeli w arkuszu każda komórka zachowuje typ swojej wartości: liczby z kolumny Dowolny dały poprawną sumę, ale tekst, który tylko wygląda jak liczba, trafił do arkusza jako tekst i SUMA zwróciła 0. W modelu danych Excela ta sama kolumna z liczbami dostała typ tekstowy. W Dataflow Gen2 typ Dowolny nie jest obsługiwany w miejscach docelowych, takich jak Lakehouse czy Warehouse.

Osobny przypadek to wartości złożone, na przykład rekordy, w kolumnie Dowolny. Dokumentacja Microsoft opisuje je jako błędy zgłaszane przy ładowaniu, z komunikatem Expression.Error: W tym kontekście nie możemy zwrócić wartości o typie Record. (ang. We cannot return a value of type Record in this context.), gdzie w miejscu Record stoi typ wartości. Takich błędów nie widać w edytorze, bo powstają dopiero przy ładowaniu. W naszym teście tabela w arkuszu pokazała w tej kolumnie tekst [Record] zamiast danych.

Kolumna Wartość brutto z ikoną ABC123 w nagłówku, czyli typem Dowolny, obok kolumny Stawka VAT w edytorze Power Query
Nowa kolumna Wartość brutto wyliczona z wartości netto i stawki VAT. Ikona ABC123 w nagłówku oznacza typ Dowolny, choć widoczne wartości są liczbami.

Dlaczego tak się dzieje

Typ kolumny nie wynika z wartości, które policzy formuła. Okno Kolumna niestandardowa w Excelu tworzy krok Table.AddColumn bez czwartego argumentu, więc kolumna dostaje typ Any.Type, nawet gdy każda wartość jest liczbą. Sprawdziliśmy to funkcją Table.Schema: kolumna dodana bez typu ma w polu TypeName wartość Any.Type, choć wartość w pierwszym wierszu to liczba 123.

Typ kolumny i typ wartości to dwie różne rzeczy. Tabela w arkuszu zapisuje każdą wartość osobno, dlatego liczby przechodzą tam bez kłopotu. Model danych potrzebuje jednego typu dla całej kolumny i z typu Dowolny robi tekst, a miejsca docelowe w Fabric typu Dowolny nie przyjmują. Dlatego dokumentacja Microsoft zaleca, żeby w wyniku zapytania nie zostawiać kolumn typu Dowolny.

Jak to rozwiązać krok po kroku

  1. Po każdej nowej kolumnie spójrz na ikonę w nagłówku. ABC123 oznacza typ Dowolny, ABC tekst, 123 liczbę całkowitą, 1.2 liczbę dziesiętną, a kalendarz datę.
  2. Kliknij ikonę ABC123 w nagłówku nowej kolumny i wybierz właściwy typ, dla kwot Liczba dziesiętna. Power Query doda krok Zmieniono typ z funkcją Table.TransformColumnTypes, która zamienia wartości na wskazany typ.
  3. Jeśli wolisz jeden krok zamiast dwóch, kliknij krok kolumny niestandardowej i dopisz typ w pasku formuły jako czwarty argument: = Table.AddColumn(Poprzedni, "Wartość brutto", each Number.Round([Wartość netto] * (1 + [Stawka VAT]), 2), type number). Dla liczb całkowitych użyj Int64.Type, dla tekstu type text.
  4. Pamiętaj, że czwarty argument tylko deklaruje typ, a nie zamienia wartości. W naszym teście kolumna z tekstem 100 i deklaracją type number miała w schemacie Number.Type, a wartość dalej była tekstem. Gdy formuła może zwrócić tekst, na przykład fragment wycięty z opisu, ustaw typ przez Zmień typ, który naprawdę konwertuje wartości.
  5. Przed załadowaniem sprawdź typy całej tabeli. Kliknij prawym przyciskiem ostatni krok, wybierz Wstaw krok po i w pasku formuły wpisz = Table.Schema(NazwaPoprzedniegoKroku). W kolumnie TypeName każda pozycja Any.Type to kolumna bez typu. Po sprawdzeniu usuń ten krok krzyżykiem.
  6. W Dataflow Gen2 ustaw typy w zapytaniu, zanim dodasz miejsce docelowe. Przy ustawieniach ręcznych miejsca docelowego dokumentacja Microsoft pozwala też zmienić typ źródłowy w mapowaniu kolumn albo wykluczyć zbędną kolumnę.

Jak sprawdzić, że zadziałało

Po poprawce nagłówek kolumny pokazuje ikonę 1.2 albo 123 zamiast ABC123. Krok Table.Schema pokazuje dla tej kolumny Number.Type zamiast Any.Type, tak samo po zmianie typu przyciskiem, jak po dopisaniu czwartego argumentu. Po odświeżeniu modelu danych kolumna ma typ liczbowy, a w Dataflow Gen2 typy z zapytania przechodzą do mapowania kolumn miejsca docelowego bez zmian, tak jak w kursie przy tabeli w Lakehouse.

Żeby problem nie wrócił, ustawiaj typ od razu po każdej kolumnie niestandardowej, a zapytanie, które trafia do modelu albo do Fabric, kończ przeglądem ikon we wszystkich nagłówkach. Kolumna z ikoną ABC123 na końcu zapytania to sygnał, że brakuje kroku zmiany typu.

Wróć do listy: 88 najczęstszych pytań i problemów związanych z Power Query

Baner szkolenia Microsoft Excel - Power Query w JSystems z edytorem Power Query na ekranie laptopa

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

Najczęściej zadawane pytania

Co oznacza ikona ABC123 w nagłówku kolumny Power Query?
To typ Dowolny (Any), czyli kolumna bez określonego typu. Power Query nadaje go między innymi nowej kolumnie niestandardowej, której formuła nie deklaruje typu wyniku. Wartości w środku mogą być liczbami, tekstem albo datami, ale kolumna jako całość nie ma typu.
Dlaczego kolumna Dowolny działa w arkuszu, a w modelu danych staje się tekstem?
Tabela w arkuszu zapisuje każdą wartość osobno, więc liczba zostaje liczbą. Model danych potrzebuje jednego typu dla całej kolumny i w naszym teście nadał kolumnie Dowolny typ tekstowy. Ustaw typ w Power Query, a model dostanie kolumnę liczbową.
Czy czwarty argument Table.AddColumn zamienia wartości na liczby?
Nie, tylko deklaruje typ kolumny. W naszym teście kolumna z tekstem 100 i deklaracją type number miała typ Number.Type, ale wartość nadal była tekstem. Używaj go, gdy formuła zawsze zwraca liczby, a w pozostałych przypadkach zmieniaj typ poleceniem Zmień typ.
Czy Dataflow Gen2 zapisze kolumnę typu Dowolny do Lakehouse?
Według dokumentacji Microsoft typ Any nie jest obsługiwany w miejscach docelowych Dataflow Gen2, w tym w tabelach Lakehouse i Warehouse. Ustaw typ w zapytaniu przed dodaniem miejsca docelowego. Przy ustawieniach ręcznych możesz też zmienić typ źródłowy w mapowaniu kolumn albo wykluczyć kolumnę.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...