Blog JSystems - uwalniamy wiedzę!

Szukaj

Power Query w Excelu, Power BI i Fabric

Oczekiwano tokenu ',' - błędy składni w Edytorze zaawansowanym Power Query

W skrócie

  • Komunikat Oczekiwano tokenu w Power Query oznacza błąd składni kodu M w Edytorze zaawansowanym, na pasku formuły albo w kolumnie niestandardowej. W wersji z przecinkiem silnik czeka na przecinek, na przykład między krokami.
  • Silnik czyta kod po kolei i zgłasza błąd przy pierwszym fragmencie, którego się nie spodziewał. Brakujący przecinek z końca kroku wychodzi więc dopiero na początku następnego wiersza.
  • Sprawdź wskazane miejsce i wiersz nad nim: przecinek po każdym kroku poza ostatnim, przecinek zamiast średnika, domknięte nawiasy i cudzysłowy, nazwy ze spacją w zapisie ze znakiem #.

Na komunikat Oczekiwano tokenu w Power Query trafiasz, gdy poprawiasz kod M ręcznie: dopisujesz krok w Edytorze zaawansowanym, wklejasz formułę z forum albo przenosisz nawyki z formuł Excela. Pokazujemy, jak czytać ten komunikat i jego odmiany, dlaczego wskazuje miejsce za błędem i jak szybko znaleźć brakujący przecinek, nawias albo cudzysłów. Każdy przykład uruchomiliśmy w polskim Excelu.

Jak to wygląda w praktyce

W Edytorze zaawansowanym pod kodem zamiast komunikatu Nie wykryto błędów składniowych pojawia się opis błędu i odnośnik Pokaż błąd. Gdy zapytanie z takim kodem trafi do podglądu, zobaczysz błąd kroku Expression.SyntaxError: Oczekiwano tokenu ','. (ang. Token ',' expected.). Ten sam mechanizm daje kilka pokrewnych komunikatów:

  • Znak ","nie może występować przed 'in'. (ang. A ',' cannot precede a 'in'.) - przecinek po ostatnim kroku,
  • Oczekiwano tokenu 'in'. - brak słowa in na końcu kodu,
  • Oczekiwano tokenu '='. - nazwa kroku ze spacją zapisana bez znaku # i cudzysłowów,
  • Oczekiwano tokenu Identifier. - przecinek dziesiętny w liczbie, po którym silnik czeka na nazwę kolejnego kroku,
  • Nieprawidłowy literał. (ang. Invalid literal.) - tekst bez cudzysłowu zamykającego.

Gdy kod wykonuje funkcja Expression.Evaluate, komunikat dostaje współrzędne, na przykład Expression.Error: [3,5-3,10] Oczekiwano tokenu ','., czyli wiersz 3, kolumny od 5 do 10.

Dlaczego tak się dzieje

Kod zapytania ma stały układ. Po let stoją kroki w postaci nazwa = wyrażenie oddzielone przecinkami, po ostatnim kroku przecinka nie ma, a po in stoi nazwa kroku, którego wynik zwraca zapytanie. Silnik dzieli kod na tokeny (nazwy, liczby, teksty, symbole) i po każdym pełnym wyrażeniu czeka na przecinek albo słowo in. Gdy przecinka brakuje, trafia na nazwę następnego kroku i dopiero tam zgłasza błąd:

let
    Źródło = Sprzedaz_miesieczna
    #"Przefiltrowano wiersze" = Table.SelectRows(Źródło, each [Sklep] = "Gdańsk")
in
    #"Przefiltrowano wiersze"

Przecinka brakuje na końcu wiersza 2, a komunikat wskazuje [3,5-3,30], czyli wiersz 3 od kolumny 5: nazwę następnego kroku. Z tego samego powodu niedomknięty nawias w let a = Text.Upper("abc" in a daje Oczekiwano tokenu ','. przy słowie in: silnik wciąż czyta argumenty funkcji i czeka na przecinek albo nawias.

Okno Edytor zaawansowany w Power Query z kodem M zapytania Sprzedaz_wg_sklepu_i_miesiaca: let, kroki oddzielone przecinkami i in
Poprawny kod w Edytorze zaawansowanym. Każdy krok poza ostatnim kończy się przecinkiem, a po in stoi nazwa kroku, którego wynik zwraca zapytanie.

Jak to rozwiązać krok po kroku

  1. Otwórz kod: na karcie Strona główna albo Widok kliknij Edytor zaawansowany, a w menu Opcje wyświetlania zaznacz Wyświetl numery wierszy. Numery pozwolą dopasować współrzędne z komunikatu do linii kodu.
  2. Przeczytaj komunikat pod kodem i znajdź wskazany fragment. To pierwszy token, którego silnik się nie spodziewał, więc przyczyny szukaj tuż przed nim, na przykład na końcu poprzedniego wiersza.
  3. Sprawdź przecinki między krokami: każdy krok poza ostatnim kończy się przecinkiem. Gdy dopisujesz krok na końcu, dodaj przecinek po dotychczasowym ostatnim kroku, a po in wpisz nazwę nowego kroku. Przecinek zostawiony przed in daje komunikat Znak ","nie może występować przed 'in'., który wskazuje sam przecinek.
  4. Zamień średniki na przecinki. W komórkach polskiego Excela argumenty oddziela średnik, w języku M zawsze przecinek: Text.Start("Nordvella"; 4) kończy się komunikatem Oczekiwano tokenu ','., a Text.Start("Nordvella", 4) zwraca Nord. Liczby w kodzie zapisuj z kropką dziesiętną: let Brutto = 100 * 1,23 in Brutto daje Oczekiwano tokenu Identifier., bo po przecinku silnik czeka na nazwę kolejnego kroku, a 100 * 1.23 zwraca 123.
  5. Policz nawiasy i cudzysłowy. Każdy nawias okrągły, kwadratowy i klamrowy musi mieć parę, a każdy tekst cudzysłów zamykający. Tekst bez cudzysłowu zamykającego daje komunikat Nieprawidłowy literał., a brak nawiasu zamykającego może wyjść dopiero przy następnym słowie jako Oczekiwano tokenu ','.
  6. Sprawdź nazwy kroków. Nazwa ze spacją wymaga zapisu #"Zmieniono typ", bez niego silnik zgłasza komunikat Oczekiwano tokenu '='. Nazwa bez spacji, także z polskimi literami, jak Źródło, działa bez dodatkowego zapisu.
  7. Poprawiaj po jednej zmianie i po każdej patrz na komunikat pod kodem. Gdy pojawi się Nie wykryto błędów składniowych, kliknij Gotowe.

Jak sprawdzić, że zadziałało

Po kliknięciu Gotowe zaznacz ostatni krok na liście Zastosowane kroki: podgląd ma pokazać dane, a nie żółty pasek z błędem. Sprawdź też, czy po in stoi nazwa nowego kroku. Jeśli została tam nazwa poprzedniego, kod przejdzie kontrolę składni, ale zapytanie zwróci stary wynik: let a = 1, b = a + 1 in a zwraca 1, a nie 2, bo krok, z którego nic nie korzysta, w ogóle się nie wykonuje.

Żeby błąd nie wracał, dodawaj kroki przyciskami na wstążce, bo każdy z nich dopisuje kod z poprawnymi przecinkami. Nazwy kroków zmieniaj na liście Zastosowane kroki (prawy przycisk albo klawisz F2), wtedy Power Query zmienia je także w kodzie. Większe przeróbki w Edytorze zaawansowanym rób na kopii zapytania: prawy przycisk na zapytaniu w panelu zapytań i Duplikuj.

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 znaczą liczby w nawiasie, na przykład [3,5-3,10]?
To współrzędne fragmentu, który silnik uznał za błędny: wiersz 3, kolumny od 5 do 10. Taki zapis pojawia się między innymi w błędach funkcji Expression.Evaluate. Wskazany fragment to pierwszy nieoczekiwany token, więc brakującego przecinka szukaj tuż przed nim, na przykład na końcu poprzedniego wiersza.
Dlaczego średnik między argumentami daje błąd Oczekiwano tokenu?
W komórkach polskiego Excela argumenty funkcji oddziela średnik, ale język M także w polskim Excelu używa przecinka. Średnik w miejscu przecinka kończy się komunikatem Oczekiwano tokenu ','. Z tego samego powodu liczby w kodzie M zapisujesz z kropką dziesiętną.
Kiedy nazwa kroku wymaga zapisu ze znakiem #?
Gdy zawiera spację. Nazwa Zmieniono typ wpisana bez znaku # i cudzysłowów daje komunikat Oczekiwano tokenu '='. Nazwa bez spacji, nawet z polskimi literami, jak Źródło, działa bez dodatkowego zapisu. Gdy zmieniasz nazwę na liście Zastosowane kroki, Power Query sam zapisze ją w kodzie.
Dlaczego po dopisaniu kroku zapytanie zwraca stary wynik?
Zapytanie zwraca wynik kroku wskazanego po słowie in. Jeśli po dopisaniu kroku na końcu po in została nazwa poprzedniego, kod jest poprawny składniowo, ale nowy krok się nie wykona, bo nic z niego nie korzysta. Wpisz po in nazwę nowego kroku i dodaj przecinek przed nim.

Komentarze (0)

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

Brak komentarzy...