Blog JSystems - uwalniamy wiedzę!

Szukaj

Power Query w Excelu, Power BI i Fabric

Expression.Error: Klucz pasował do co najmniej dwóch wierszy w tabeli - co to znaczy

W skrócie

  • Komunikat Expression.Error „Klucz pasował do co najmniej dwóch wierszy w tabeli” pojawia się, gdy krok wybiera w Power Query jeden wiersz po kluczu, a pasuje do niego kilka wierszy.
  • Źródłem jest arkusz i tabela o tej samej nazwie przy kluczu bez kolumny Kind albo powtórzony kod w słowniku, w którym kolumna niestandardowa wyszukuje wartości.
  • Dopisz do klucza Kind, nadaj tabelom nazwy inne niż arkuszom, a w słowniku znajdź powtórzone kody przez Grupowanie według i usuń duplikaty w źródle albo w zapytaniu.

Komunikat „Klucz pasował do co najmniej dwóch wierszy w tabeli” to druga strona błędu o kluczu, który nie pasuje do żadnego wiersza. Tym razem Power Query znalazł za dużo: krok miał wybrać jeden wiersz, a pasuje kilka. Trafia na niego każdy, kto wybiera obiekt skoroszytu po samej nazwie albo wyszukuje cenę w słowniku, w którym kod produktu się powtarza. Pokazujemy, skąd się bierze ten błąd i jak go naprawić bez gubienia danych.

Jak to wygląda w praktyce

Komunikat brzmi Expression.Error: Klucz pasował do co najmniej dwóch wierszy w tabeli., a w angielskiej wersji Expression.Error: The key matched more than one row in the table. Pole Szczegóły ma ten sam układ co przy kluczu bez dopasowania: Key, czyli szukany klucz, i Table, czyli przeszukiwana tabela.

Miejsce, w którym go zobaczysz, zależy od tego, gdzie stoi wybór po kluczu:

  • w kroku nawigacji tuż pod krokiem Źródło błąd zatrzymuje całe zapytanie i zamiast danych widać żółty pasek,
  • w kolumnie niestandardowej, która wyszukuje wartość w słowniku, błąd dostają tylko wiersze z kodem występującym w słowniku więcej niż raz. W naszym teście wiersz z kodem KEL-1029 dostał cenę, a wiersz z powtórzonym kodem BEX-1021 napis Error.

Zapytanie, w którym nikt nic nie zmieniał, zgłosi ten błąd, gdy ktoś dopisze do słownika drugi wiersz z istniejącym kodem albo nada tabeli nazwę arkusza, na którym ona leży.

Dlaczego tak się dzieje

Zapis tabela{[kolumna=wartość]} to w języku M wybór jednego wiersza po kluczu. Power Query oczekuje dokładnie jednego trafienia. Zero trafień daje błąd o kluczu bez dopasowania, dwa lub więcej daje ten komunikat. Silnik nie wybiera za Ciebie pierwszego z pasujących wierszy, bo nie wie, który jest właściwy.

Przy skoroszytach źródłem dwuznaczności jest lista obiektów, którą zwraca Excel.Workbook. Arkusze i tabele są na niej osobnymi wierszami, rozróżnionymi kolumną Kind: Sheet dla arkusza, Table dla tabeli. Jeśli tabela nazywa się tak samo jak arkusz, ta sama nazwa występuje w kolumnie Item dwa razy, a klucz z samą nazwą, na przykład Źródło{[Item="Sprzedaz"]}[Data], pasuje do obu wierszy. Kod zapisany przez Nawigator zawiera też Kind, więc ten przypadek dotyczy zwykle kroków pisanych albo poprawianych ręcznie.

Przy wyszukiwaniu w słowniku przyczyną są duplikaty klucza, czyli ten sam kod produktu w dwóch wierszach. Operator ?, który przy braku dopasowania zwraca null, tu nie pomaga: sprawdziliśmy w Excelu, że przy dwóch trafieniach błąd zostaje. Klucz rozróżnia przy tym wielkość liter, więc „bex-1021” i „BEX-1021” to dla niego dwa różne kody. Duplikaty mogą się ujawnić dopiero wtedy, gdy ujednolicisz zapis kodów wielkimi literami.

Okno Nawigator w Power Query dla pliku Nordvella_slowniki.xlsx z tabelami tProdukty i tSklepy oraz arkuszami Produkty i Sklepy jako osobnymi pozycjami
Nawigator pokazuje tabele i arkusze skoroszytu jako osobne pozycje: tabele tProdukty i tSklepy oraz arkusze Produkty i Sklepy. Zaznaczone są obie tabele, a podgląd pokazuje katalog produktów.

Jak to rozwiązać krok po kroku

  1. Odczytaj klucz z pola Szczegóły i otwórz tabelę, którą przeszukuje krok: przy nawigacji kliknij krok Źródło, przy wyszukiwaniu otwórz zapytanie słownika, na przykład tProdukty. Przefiltruj kolumnę klucza na wartość z Szczegółów, a zobaczysz wszystkie pasujące wiersze.
  2. Jeśli pasują arkusz i tabela o tej samej nazwie, kliknij krok nawigacji i dopisz w pasku formuły Kind do klucza: = Źródło{[Item="Sprzedaz", Kind="Table"]}[Data]. Wybieraj tabelę, a nie arkusz: dane arkusza mają wiersz nagłówka wśród danych, a arkusz potrafi wciągnąć puste wiersze i notatki obok tabeli.
  3. Na przyszłość nadawaj tabelom nazwy inne niż arkuszom. W naszym kursie tabele mają przedrostek t: tabela tProdukty leży na arkuszu Produkty, więc klucz z samą nazwą Produkty trafia w dokładnie jeden obiekt. Gdy zmienisz nazwę tabeli w Excelu, popraw ją także w kluczu zapytania.
  4. Powtórzone kody w słowniku znajdziesz grupowaniem. Kliknij prawym przyciskiem zapytanie słownika w panelu Zapytania i wybierz Odwołanie, żeby nie zmieniać oryginału. W nowym zapytaniu na karcie Strona główna kliknij Grupowanie według, grupuj po kolumnie Kod produktu, nazwij nową kolumnę Liczba i wybierz operację Zlicz wiersze. Potem przefiltruj kolumnę Liczba filtrem liczb na wartości większe niż 1.
  5. Każdy znaleziony kod popraw najpierw w źródle, bo to tam ktoś dopisał drugi wiersz. Jeśli duplikaty są identyczne, możesz je też usunąć w zapytaniu słownika: zaznacz kolumnę Kod produktu, na karcie Strona główna rozwiń Usuń wiersze i wybierz Usuń duplikaty. Gdy powtórzone wiersze różnią się ceną, najpierw ustal, która jest właściwa, bo opis funkcji Table.Distinct nie gwarantuje, który z powtórzonych wierszy zostanie.
  6. Po poprawkach w słowniku kliknij w zapytaniu z wyszukiwaniem Odśwież podgląd na karcie Strona główna, żeby kolumna przeliczyła się na nowym słowniku. Zapytanie z grupowaniem możesz zostawić jako kontrolę: dopóki żaden kod się nie powtarza, pokazuje pustą tabelę.

Jak sprawdzić, że zadziałało

Kliknij ostatni krok zapytania: w kolumnie z wyszukiwaną wartością nie ma już napisów Error. W zapytaniu słownika zaznacz kolumnę klucza, włącz na karcie Widok pole Rozkład kolumn i przełącz profilowanie na cały zestaw danych. Gdy liczba wartości odrębnych i liczba wartości unikatowych są równe liczbie wierszy, żaden kod się nie powtarza.

Nawrotom zapobiegniesz, ustalając z właścicielem słownika, że kod jest unikatowy i każda zmiana ceny nadpisuje istniejący wiersz zamiast dopisywać nowy. Jeśli słownik ma być scalany ze sprzedażą, duplikaty szkodzą także tam, bo każdy powtórzony kod zwielokrotnia pasujące wiersze sprzedaży. Dlatego kontrolę unikatowości klucza rób po każdej większej zmianie słownika.

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

Czym różni się ten błąd od komunikatu Klucz nie pasuje do żadnego wiersza w tabeli?
Oba dotyczą wyboru jednego wiersza po kluczu. Klucz nie pasuje do żadnego wiersza oznacza zero trafień, na przykład po zmianie nazwy arkusza. Klucz pasował do co najmniej dwóch wierszy oznacza, że trafień jest kilka i Power Query nie wie, który wiersz wybrać.
Dlaczego operator ? nie usuwa tego błędu?
Operator ? po kluczu obsługuje tylko brak dopasowania i wtedy zwraca null. Gdy klucz pasuje do kilku wierszy, wynik jest niejednoznaczny, a nie pusty, więc błąd zostaje, co sprawdziliśmy w polskim Excelu. Trzeba usunąć duplikaty albo doprecyzować klucz.
Jak szybko znaleźć zduplikowane kody w słowniku?
Na odwołaniu do zapytania słownika użyj Grupowanie według po kolumnie z kodem z operacją Zlicz wiersze, a potem przefiltruj liczbę wierszy na wartości większe niż 1. Szybszy podgląd daje Rozkład kolumn: jeśli liczba wartości odrębnych jest mniejsza niż liczba wierszy, coś się powtarza.
Czy arkusz i tabela mogą mieć w Excelu tę samą nazwę?
Mogą, ale Power Query widzi je jako dwa obiekty z tą samą wartością w kolumnie Item, różniące się kolumną Kind. Krok, który wybiera obiekt po samej nazwie, zgłosi wtedy błąd dwóch dopasowań. Bezpieczniej nadawać tabelom własne nazwy, na przykład z przedrostkiem t.

Komentarze (0)

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

Brak komentarzy...