Blog JSystems - uwalniamy wiedzę!

Szukaj

Power Query w Excelu, Power BI i Fabric

Expression.Error: Klucz nie pasuje do żadnego wiersza w tabeli - zmieniona nazwa arkusza lub tabeli

W skrócie

  • Komunikat Expression.Error „Klucz nie pasuje do żadnego wiersza w tabeli” zatrzymuje zapytanie Power Query, gdy krok wybiera arkusz, tabelę albo wiersz po nazwie, a takiej nazwy w danych już nie ma.
  • Krok nawigacji zapisuje wybór z Nawigatora jako klucz, na przykład Item równe Arkusz1 i Kind równe Sheet. Zmiana nazwy arkusza lub tabeli w pliku źródłowym zostawia ten klucz bez dopasowania.
  • Popraw nazwę w kroku nawigacji albo wybieraj arkusz niezależnie od nazwy, a przy wyszukiwaniu w słowniku użyj operatora ? albo try, żeby brakujący kod dawał null zamiast błędu.

Błąd „Klucz nie pasuje do żadnego wiersza w tabeli” pojawia się, gdy ktoś zmienił nazwę arkusza albo tabeli w pliku, z którego czyta zapytanie Power Query. Trafia na niego każdy, kto co miesiąc dostaje skoroszyt z inaczej nazwanym arkuszem, łączy pliki z folderu o różnych nazwach arkuszy albo wyszukuje wartości w słowniku po kodzie. Pokazujemy, jak odczytać ten komunikat, jak naprawić krok nawigacji i jak przygotować zapytanie na kolejne zmiany nazw.

Jak to wygląda w praktyce

Zapytanie zatrzymuje się na kroku tuż pod krokiem Źródło, a żółty pasek pokazuje komunikat Expression.Error: Klucz nie pasuje do żadnego wiersza w tabeli. Angielski oryginał to Expression.Error: The key didn't match any rows in the table. W polu Szczegóły Power Query podaje rekord z dwoma polami: Key, czyli szukany klucz, na przykład Item równe Arkusz1 i Kind równe Sheet, oraz Table, czyli tabelę, w której szukał. Klucz z Szczegółów to pierwsza wskazówka: mówi, jakiej nazwy zabrakło.

Przy łączeniu plików z folderu objaw wygląda inaczej. Krok, który wywołuje funkcję Przekształć plik (jego nazwa zaczyna się od słów Wywołaj funkcję niestandardową), działa, ale w wierszu pliku z inną nazwą arkusza zamiast tabeli stoi Error. Całe zapytanie zatrzymuje się dopiero na kroku rozwinięcia tej kolumny, z tym samym komunikatem.

Ten sam komunikat zobaczysz też w kolumnie niestandardowej, która wyszukuje wartość w innej tabeli po kodzie. Tam błąd siedzi w pojedynczych komórkach: Error mają tylko wiersze z kodem, którego słownik nie zna.

Dlaczego tak się dzieje

Funkcja Excel.Workbook, którą Power Query czyta skoroszyt, zwraca tabelę obiektów z kolumnami Name, Data, Item, Kind i Hidden. Dla pliku ze słownikami z naszego kursu lista ma cztery pozycje: arkusze Produkty i Sklepy (Kind równe Sheet) oraz tabele tProdukty i tSklepy (Kind równe Table). Gdy w Nawigatorze wybierasz obiekt, Power Query zapisuje ten wybór w kroku jako klucz, czyli rekord z wartościami kolumn Item i Kind:

= Źródło{[Item="tProdukty", Kind="Table"]}[Data]

Zapis w klamrach szuka wiersza, który ma dokładnie te wartości, łącznie z wielkością liter. Jeśli arkusz Arkusz1 nazywa się teraz Sprzedaż albo tabela dostała nową nazwę, takiego wiersza nie ma. Sprawdziliśmy to w Excelu na prawdziwym pliku kursu: klucz z nazwą Arkusz1 zgłosił dokładnie ten błąd. Dokumentacja Microsoft o typowych problemach Power Query wymienia jeszcze dwie przyczyny: zmianę nazwy tabeli w samym źródle danych, na przykład w bazie, oraz konto bez uprawnień do odczytu tej tabeli.

Przy łączeniu plików z folderu wybór arkusza po nazwie zapisuje się w zapytaniu Przekształć przykładowy plik, a funkcja Przekształć plik powtarza go dla każdego pliku. Wystarczy jeden plik z inną nazwą arkusza, żeby w zapytaniu głównym pojawił się ten błąd.

Jak to rozwiązać krok po kroku

  1. Kliknij na liście Zastosowane kroki krok Źródło. Zobaczysz listę obiektów pliku z kolumnami Name, Data, Item, Kind i Hidden. Odczytaj w kolumnach Item i Kind, jak teraz nazywa się arkusz albo tabela, którą chcesz wczytać.
  2. Kliknij krok tuż pod Źródło, ten z błędem, i w pasku formuły popraw nazwę w kluczu, na przykład Źródło{[Item="Arkusz1",Kind="Sheet"]}[Data] na Źródło{[Item="Sprzedaż",Kind="Sheet"]}[Data]. Zatwierdź klawiszem Enter. Nazwa musi się zgadzać co do znaku.
  3. Jeśli nazwa arkusza zmienia się z każdym plikiem, a w pliku jest jeden arkusz z danymi, wybieraj go niezależnie od nazwy: = Table.SelectRows(Źródło, each [Kind] = "Sheet"){0}[Data]. Filtr po kolumnie Kind odrzuca tabele, a {0} bierze pierwszy arkusz z listy. Ten sam wzorzec z wartością "Table" wybierze pierwszą tabelę.
  4. Przy łączeniu plików z folderu najpierw ustal, który plik sprawia kłopot: w zapytaniu głównym kliknij krok wywołujący funkcję Przekształć plik i znajdź wiersz z napisem Error w kolumnie z wynikiem funkcji. Potem otwórz zapytanie Przekształć przykładowy plik i w jego kroku nawigacji zastąp klucz z nazwą arkusza filtrem po Kind z poprzedniego punktu. Funkcja Przekształć plik przejmie zmianę dla wszystkich plików.
  5. W kolumnie niestandardowej, która wyszukuje wartość w słowniku, dopisz dwa operatory ?: = tProdukty{[Kod produktu=[Kod produktu]]}?[Cena katalogowa netto]?. Brakujący kod da wtedy null zamiast błędu. Oba są potrzebne: z jednym, po kluczu, w naszym teście pojawił się inny błąd, Nie możemy zastosować dostępu do pola dla typu Null. Ten sam efekt da try z otherwise null wokół całego wyrażenia.
  6. Przy tabeli z bazy danych sprawdź w Nawigatorze, czy tabela nadal istnieje pod tą nazwą, i ustal z administratorem, czy konto, którym się łączysz, może ją odczytać.

Jak sprawdzić, że zadziałało

Kliknij ostatni krok zapytania: zamiast żółtego paska powinny być dane. Przy łączeniu folderu sprawdź, czy dane pochodzą ze wszystkich plików: zaznacz kolumnę Source.Name, włącz na karcie Widok pole Rozkład kolumn i przełącz profilowanie na cały zestaw danych. Liczba wartości odrębnych ma być równa liczbie plików w folderze. Przy wyszukiwaniu w słowniku przefiltruj nową kolumnę po wartości null: to kody, których słownik nie zna i które trzeba do niego dopisać, a nie wiersze do pominięcia.

Żeby błąd nie wrócił, wczytuj dane z tabel Excela zamiast z arkuszy i ustal z autorami plików, że nazwy tabel i arkuszy się nie zmieniają. Tak zbudowane są słowniki w naszym kursie: zapytania czytają tabele tProdukty i tSklepy, a nie arkusze, na których leżą. Gdy nazwa arkusza musi się zmieniać, od razu zbuduj krok nawigacji z filtrem po Kind zamiast klucza z nazwą.

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 klucz w komunikacie Klucz nie pasuje do żadnego wiersza w tabeli?
Klucz to rekord z wartościami kolumn, po których Power Query szuka jednego wiersza, na przykład Item równe Arkusz1 i Kind równe Sheet. W polu Szczegóły ten klucz stoi w polu Key, a przeszukiwana tabela w polu Table. Porównaj klucz z listą obiektów w kroku Źródło, a od razu zobaczysz, która nazwa się zmieniła.
Jak wczytać arkusz, którego nazwa zmienia się co miesiąc?
Zamiast klucza z nazwą przefiltruj listę obiektów skoroszytu po kolumnie Kind równej Sheet i weź pierwszy wiersz wyniku. Taki krok działa niezależnie od nazwy arkusza, o ile w pliku jest jeden arkusz z danymi. Przy łączeniu plików z folderu wprowadź tę zmianę w zapytaniu Przekształć przykładowy plik.
Dlaczego błąd pojawia się tylko w części wierszy kolumny niestandardowej?
Kolumna niestandardowa liczy formułę dla każdego wiersza osobno. Jeśli formuła wyszukuje wartość w słowniku po kodzie, błąd dostają tylko wiersze z kodem, którego w słowniku nie ma. Operator ? po kluczu i po nazwie pola zamienia takie przypadki na null, a filtr po null pokaże brakujące kody.
Czy ten błąd może wynikać z braku uprawnień?
Tak, przy źródłach takich jak bazy danych. Dokumentacja Microsoft podaje wśród przyczyn konto, które nie ma uprawnień do odczytu tabeli, i zmianę nazwy tabeli w samym źródle. Sprawdź w Nawigatorze, czy tabela jest widoczna dla konta, którym się łączysz.

Komentarze (0)

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

Brak komentarzy...