Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power Query w Excelu, Power BI i Fabric
Usuń duplikaty zostawia nie ten wiersz - jak zachować najnowszy rekord
Usuń duplikaty w Power Query a najnowszy rekord: z tym problemem spotkasz się przy tabelach z historią zmian, takich jak cennik, adresy klientów czy statusy zamówień. Chcesz jeden wiersz na produkt, ten z najpóźniejszą datą, a polecenie zostawia ten, który akurat stoi wyżej, i nawet tego nie gwarantuje. Pokazujemy, dlaczego sortowanie przed usunięciem duplikatów nie wystarcza, oraz trzy sposoby, które wybierają najnowszy wiersz niezależnie od kolejności danych. Każdy sprawdziliśmy w polskim Excelu na historii cen produktów Nordvelli.
Masz tabelę zmian cen z kolumnami Kod produktu, Data zmiany i Cena netto. Zaznaczasz kolumnę Kod produktu, na karcie Strona główna rozwijasz Usuń wiersze i wybierasz Usuń duplikaty. Zostaje po jednym wierszu na produkt, ale z nieaktualną ceną. W naszym teście w Excelu, na danych zapisanych chronologicznie, polecenie zostawiło dla BEX-1021 cenę 19,99 z 5 stycznia, choć od 1 kwietnia obowiązywała cena 22,99, a dla KEL-1005 cenę 2849 zamiast 2699.
Pierwszy odruch to sortowanie malejąco po dacie przed usunięciem duplikatów. W podglądzie zwykle wygląda to dobrze, dlatego problem łatwo uznać za rozwiązany. Dokumentacja Microsoft opisuje dokładnie ten przypadek i zaznacza, że taka operacja może wyglądać na działającą, ale to zachowanie nie jest gwarantowane.

Usuń duplikaty zapisuje krok Table.Distinct, który porównuje wartości w zaznaczonych kolumnach i z każdej grupy identycznych wartości zostawia jeden wiersz. Którego, tego nie ustala na podstawie daty ani żadnej innej kolumny. Opis funkcji w polskim Excelu mówi wprost, że „nie ma gwarancji, który konkretny duplikat zostanie zachowany” (ang. there's no guarantee which specific duplicate will be preserved), bo Power Query czasem przenosi operacje do źródła danych albo pomija kroki, które uzna za zbędne.
Sortowanie przed tym krokiem nie zmienia sytuacji. Sekcja dokumentacji Microsoft o zachowaniu sortowania podaje przykład posortowania sprzedaży tak, żeby największa transakcja sklepu była pierwsza, i usunięcia duplikatów: wynik może się zgadzać, ale nie musi. Wybór najnowszego rekordu musi więc wynikać z reguły zapisanej w zapytaniu, a nie z kolejności wierszy.
each _ razem z opisem typu tabeli na each Table.Max(_, {"Data zmiany", "Wersja"}), type record. Table.Max zwraca cały wiersz z największą wartością według kryteriów, a druga kolumna rozstrzyga remis. Rozwiń kolumnę Najnowszy ikoną w nagłówku. W teście z remisem dla KEL-1005 została korekta 2649 z wersją 3.Table.Max wpisz each Table.AddRankColumn(_, "Ranga", {{"Data zmiany", Order.Descending}, {"Wersja", Order.Descending}}, [RankKind = RankKind.Ordinal]), type table, rozwiń kolumnę i odfiltruj Ranga równą 1. Ranga 2 wskaże poprzednią cenę. W teście filtr na 1 dał te same wiersze co Table.Max.= Table.Buffer(#"Posortowano wiersze"). Opis Table.Distinct zaleca bufor, jeśli usuwanie duplikatów ma działać przewidywalnie. W teście sortowanie, bufor i usunięcie duplikatów zostawiły 22,99 i 2699. Remisów ta metoda nie rozstrzyga, a bufor zatrzymuje składanie zapytań do bazy.Policz wiersze: wynik powinien mieć tyle wierszy, ile jest różnych kluczy. Liczbę różnych kodów pokaże napis Odrębne pod nagłówkiem Kod produktu w tabeli źródłowej, gdy na karcie Widok zaznaczysz Rozkład kolumn i przełączysz profilowanie na cały zestaw danych. Wybierz dwa, trzy produkty z najdłuższą historią i porównaj datę w wyniku z najpóźniejszą datą w źródle. Nawrotom zapobiega reguła wpisana w zapytanie (maksimum, Table.Max albo ranga), a w danych, w których zdarzają się dwie zmiany jednego dnia, stałe drugie kryterium, takie jak numer wersji.
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...