Blog JSystems - uwalniamy wiedzę!

Szukaj

Power Query w Excelu, Power BI i Fabric

Expression.Error: Nie możemy przekonwertować wartości typu List na typ Text

W skrócie

  • Komunikat „Nie możemy przekonwertować wartości typu List na typ Text” pojawia się w Power Query, gdy funkcja tekstowa, na przykład Text.Upper, dostaje listę zamiast pojedynczego tekstu.
  • Listy powstają po podziale tekstu funkcją Text.Split, w polach z plików JSON i w grupowaniu, które zbiera wartości do listy. Komórka z listą pokazuje w podglądzie napis List.
  • Rozwiń listę do nowych wierszy, wyodrębnij jej wartości z ogranicznikiem albo pobierz jeden element przez {0}, a dopiero potem używaj funkcji tekstowych.

Komunikat „Nie możemy przekonwertować wartości typu List na typ Text” widzi każdy, kto dzieli tekst funkcją Text.Split, wczytuje plik JSON z zagnieżdżonymi listami albo grupuje wiersze tak, że w komórce ląduje lista kodów. Funkcje tekstowe pracują na jednym tekście, a w komórce jest ich kilka. Pokazujemy, jak rozpoznać kolumnę z listami i jak zamienić listę na tekst albo na osobne wiersze.

Jak to wygląda w praktyce

Kolumna, na której liczy formuła, ma w komórkach napis List zamiast wartości. Formuła z funkcją tekstową, na przykład Text.Upper([Części]), daje Error w każdym wierszu, a kliknięcie w puste miejsce obok napisu pokazuje komunikat:

Expression.Error: Nie możemy przekonwertować wartości typu List na typ Text.

Angielski oryginał to Expression.Error: We cannot convert a value of type List to type Text. Zapytanie się nie zatrzymuje, błąd siedzi w komórkach nowej kolumny. Sprawdziliśmy w Excelu kilka pokrewnych komunikatów, które mają tę samą przyczynę:

  • Nie możemy przekonwertować wartości typu Table na typ Text. pojawia się, gdy w komórce jest tabela, na przykład po grupowaniu z operacją Wszystkie wiersze,
  • Nie możemy przekonwertować wartości typu Record na typ Text. pojawia się przy rekordzie, na przykład obiekcie z pliku JSON,
  • Nie możemy zastosować operatora & dla typów Text i List. pojawia się, gdy listę doklejasz do tekstu operatorem łączenia,
  • Nie możemy przekonwertować wartości 1 na typ Text. pojawia się, gdy Text.Combine dostaje listę liczb zamiast tekstów.

Dlaczego tak się dzieje

Oprócz wartości prostych, takich jak tekst czy liczba, Power Query ma wartości złożone: List, Record i Table. W siatce podglądu widać je jako klikalne napisy. Lista powstaje na przykład wtedy, gdy:

  • kolumna niestandardowa dzieli tekst: Text.Split([Nr paragonu], "-") zamienia WAW1-202601-00001 na listę trzech elementów,
  • plik JSON albo odpowiedź API ma tablicę, na przykład listę pozycji zamówienia albo listę kursów walut,
  • formuła kroku grupowania zbiera wartości kolumny, na przykład each [Kod produktu], zamiast je liczyć.

Funkcje z rodziny Text oczekują jednego tekstu. Power Query nie zamienia listy na tekst sam, bo nie wie, czy wziąć pierwszy element, wszystkie, ani jakim znakiem je rozdzielić. Tę decyzję musisz podjąć Ty, a od niej zależy liczba wierszy wyniku.

Rekord JSON z API NBP w Power Query z polami table, no, effectiveDate i rates, w którym pole rates ma wartość List
Rekord z odpowiedzi API NBP w podglądzie Power Query. Pole rates zawiera listę kursów, którą siatka pokazuje jako napis List.

Jak to rozwiązać krok po kroku

  1. Znajdź kolumnę z napisami List i ustal, co zawiera. Kliknięcie samego napisu List przechodzi do środka listy i pokazuje jej elementy jako nowy krok, który po obejrzeniu usuń krzyżykiem.
  2. Jeśli każdy element listy to osobny fakt, na przykład pozycja zamówienia, kliknij ikonę rozwijania w nagłówku kolumny i wybierz Rozwiń do nowych wierszy. Każdy wiersz zostanie powielony tyle razy, ile elementów ma jego lista. W naszym teście dwa zamówienia po dwie pozycje dały cztery wiersze.
  3. Jeśli potrzebujesz jednego tekstu, wybierz w tym samym menu Wyodrębnij wartości i w oknie Wyodrębnij wartości z listy wskaż ogranicznik, na przykład przecinek. Elementy każdej listy połączą się w jedną wartość tekstową. W formule ten sam efekt daje Text.Combine(List.Transform([Ilości], Text.From), ","), przy czym List.Transform z Text.From jest potrzebne, gdy lista zawiera liczby.
  4. Jeśli potrzebujesz jednego elementu, pobierz go numerem od zera: Text.Split([Nr paragonu], "-"){0} zwraca WAW1. Przy wycinaniu fragmentu tekstu prościej od razu użyć funkcji, która zwraca tekst, na przykład Text.BeforeDelimiter([Nr paragonu], "-"), bo lista w ogóle nie powstaje.
  5. Jeśli lista powstała w kroku grupowania, złącz ją w formule tego kroku: zamiast each [Kod produktu] wpisz each Text.Combine([Kod produktu], ", "). W naszym teście sklep dostał wtedy jeden tekst BEX-1021, KEL-1029.
  6. Gdy błąd mówi o typie Record albo Table, użyj ikony rozwijania w nagłówku kolumny i wybierz pola albo kolumny, które mają trafić do wyniku. Dopiero na rozwiniętych kolumnach stosuj funkcje tekstowe.

Jak sprawdzić, że zadziałało

W poprawionej kolumnie nie ma już napisów List ani Error, a ikona typu w nagłówku pokazuje tekst. Po rozwinięciu do nowych wierszy porównaj liczbę wierszy z oczekiwaną: zamówienia razy liczba ich pozycji. Liczbę wierszy pokaże profil kolumny po przełączeniu profilowania na cały zestaw danych.

Po rozwinięciu do nowych wierszy kolumny z poziomu zamówienia powtarzają się w każdym wierszu pozycji. Jeśli w tabeli jest wartość całego zamówienia, jej suma po rozwinięciu będzie zawyżona, więc sumuj wartości pozycji, a wartość zamówienia trzymaj w osobnym zapytaniu. Żeby błąd nie wrócił, decyzję o liście podejmuj od razu w kroku, w którym lista powstaje, a nie w formułach kilka kroków dalej.

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

Skąd w kolumnie biorą się wartości List?
Lista powstaje, gdy formuła zwraca kilka wartości naraz, na przykład Text.Split dzielący tekst ogranicznikiem. Listy przychodzą też z plików JSON i odpowiedzi API, które zawierają tablice, oraz z grupowania, które zbiera wartości kolumny. Komórka z listą pokazuje w podglądzie napis List.
Czym różni się Rozwiń do nowych wierszy od Wyodrębnij wartości?
Rozwiń do nowych wierszy tworzy osobny wiersz dla każdego elementu listy, więc tabela rośnie, a pozostałe kolumny się powtarzają. Wyodrębnij wartości łączy elementy listy w jeden tekst z wybranym ogranicznikiem, więc liczba wierszy się nie zmienia. Pierwsze wybierz dla pozycji zamówienia, drugie dla etykiet i opisów.
Dlaczego Text.Combine zgłasza błąd dla listy liczb?
Text.Combine łączy wyłącznie teksty, a liczba w liście daje komunikat Nie możemy przekonwertować wartości 1 na typ Text. Zamień najpierw każdy element na tekst funkcją List.Transform z Text.From, a dopiero potem złącz listę.
Co oznacza ten sam komunikat z typem Table albo Record?
W komórce jest tabela albo rekord, na przykład po grupowaniu z operacją Wszystkie wiersze albo po wczytaniu obiektu z pliku JSON. Funkcja tekstowa nie przyjmie takiej wartości. Rozwiń kolumnę ikoną w nagłówku i wybierz pola albo kolumny, których potrzebujesz.

Komentarze (0)

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

Brak komentarzy...