W tym artykule pokażę Ci, jak połączyć teksty z operacją przestawiania kolumn jednocześnie. Chodzi o coś takiego:
Czyli w wierszach mamy informacje o nazwach kolumn, jak również o wartościach, jakie powinny się w tych kolumnach znaleźć. I tych wartości może być więcej niż jedna… Wygląda BARDZO skomplikowanie, ale na szczęście dzięki Power Query można szybko poradzić sobie z tym problemem. Zaczynamy!
1. Formatka: dane do zadania
Mamy dany taką oto tabelę o nazwie tbProdukty:
Zauważ, że w pierwszej kolumnie mamy id produktu. Do każdego produktu następnie jest przyporządkowany obszar, a do każdego obszaru – opisy. Obszarów dla jednego produktu zawsze jest kilka i zazwyczaj jest więcej niż jeden opis do obszaru. My chcemy każdy produkt mieć w osobnym wierszu i tyle kolumn co obszarów. W każdym obszarze zaś chcemy mieć połączone wszystkie opisy.
2. Rozwiązanie: Power Query pivot (kolumna przestawna)
Rozwiązaniem tutaj będzie wypisz wymaluj Power Query, a konkretnie funkcjonalność pivotowania kolumn (tzw. kolumna przestawna).
Już mówię, o co chodzi, tylko najpierw załadujmy tabelę do Power Query: najprościej z menu Dane → Z tabeli/zakresu:
Teraz zaznacz kolumnę Obszar (ponieważ to z niej mają zostać utworzone nagłówki przyszłych kolumn) i wybierz Przekształć → Kolumna przestawna:
Po zatwierdzeniu otrzymamy coś takiego…:
… czyli mnóstwo błędów.
Zauważ, że te błędy pojawiły się dlatego, że kolumna przestawna nie umie połączyć wielu tekstów w jedno. Jedyną sytuacją, gdzie nie ma błędu, jest dla produktu 2, obszar: Zalety i korzyści → Wodoodporny. Stało się tak dlatego, że jest to jedyny wpis, który był jedyną wartością w tymże obszarze.
Aby więc uzyskać poprawne wyniki, musimy nieco zmodyfikować formułę, która została automatycznie wygenerowana przez Power Query. Chodzi mi konkretnie o funkcję pivotującą Table.Pivot.
Dopiszemy do niej czwarty argument, jakim jest funkcja używana przy pivotowaniu. Będzie nią funkcja Text.Combine, a konkretnie to:
each Text.Combine(_, ", ")
Powyższe połączy wszystkie opisy w jeden wpis, rozdzielając je przecinkiem i spacją.
Oto cała formuła:
= Table.Pivot(#"Zmieniono typ", List.Distinct(#"Zmieniono typ"[Obszar]), "Obszar", "Opis", each Text.Combine(_, ", "))
Efekt wszystkiego jest następujący:
Po załadowaniu tego do Excela otrzymamy piękną tabelkę z wynikami, o jakie nam chodziło:
I voila, gotowe!
Podobało się?
https://malinowyexcel.pl/wp-content/uploads/2024/12/MalinowyExcel-PQ-Pivot-tekstu-DW.xlsx
I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:
0 komentarzy