Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power Query w Excelu, Power BI i Fabric
Expression.Error: Klucz nie pasuje do żadnego wiersza w tabeli - zmieniona nazwa arkusza lub tabeli
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.
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.
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.
Ź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.= 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ę.?: = 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.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
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...