Zapewne często korzystasz w Power Query z dodawania kolumn niestandardowych do przekształceń, których nie da się wyklikać z interfejsu. Sama też tak robię. I nie wiem, jak Ciebie, ale mnie strasznie wkurza, że w wielu sytuacjach, muszę potem usuwać oryginalną kolumnę, na której robiłam te przekształcenia. Tak, jak np. w poprzednim wpisie, gdzie przerabialiśmy numer miesiąca na jego nazwę.
Zamiast dodawania, a potem usuwania, wolałabym po prostu przekształcić kolumnę źródłową:

Transformacja
I w tym artykule pokażę Ci jak to zrobić przy pomocy funkcji Table.TransformColumns.
Będziemy działać na zapytaniu z poprzedniego wpisu, a zatem chcemy przerobić numer miesiąca na nazwę miesiąca. Dane te mamy w kolumnie miesiąc, o tak:

Dane wyjściowe
I teraz chcemy przerobić kolumnę Miesiąc. Dodajmy zatem krok niestandardowy po ostatnim kroku (u mnie jest to krok o nazwie Pogrupowano wiersze).
Krok niestandardowy dodajemy klikając ikonkę Fx obok paska formuły:

Dodanie kroku niestandardowego
Na pasku formuły otrzymujemy odwołanie do poprzedniego kroku, czyli w naszym wypadku do tabeli:

Odwołanie do poprzedniego kroku
I właśnie kolumny tej tabeli będziemy chcieli transformować. Konkretnie kolumnę Miesiąc. W tym celu napiszemy formułę, bezpośrednio w pasku formuły. Oto ona:
= Table.TransformColumns(#"Pogrupowano wiersze", {{"Miesiąc", each Date.MonthName(_ *29)}})
Zobacz, że użyliśmy tutaj funkcji Table.TransformColumns, która potrzebuje od nas dwóch argumentów:
- Tabeli, którą będzie transformować: jest to tabela z poprzedniego kroku
- Listy transformacji, których ma dokonać, składającej się z mniejszych list. Każda mniejsza lista zawiera nazwę kolumny (tekstowo!!!), którą będzie transformowana oraz funkcję, określającą transformację
My dokonujemy tylko jednej transformacji, zatem lista główna będzie zawierała tylko jedną listę:

Logika funkcji Table.TransformColumns
Zauważ, że w części transformacyjnej mamy funkcję robiącą dokładnie to samo, co robiliśmy za pomocą dodawania kolumny, jedynie zapis jest ciut inny: używa znaku podkreślenia (_), zamiast odwołania się do konkretnej kolumny: [Miesiąc]. Jest to spowodowane inną logiką funkcji Table.TransformColumns vs funkcji Table.AddColumn. Ta pierwsza działa w kontekście kolumny wskazanej tekstowo (”Miesiąc”), a druga – działa w kontekście rekordu.
I to w zasadzie tyle 😊.
Na koniec można dodać jeszcze jeden krok, zmieniający typ danych w kolumnie Miesiąc na tekstowy. To akurat można wyklikać z interfejsu.
Efekt końcowy jest następujący:

Wynik transformacji
Fajne, prawda? Tę technikę można stosować oczywiście do bardziej zaawansowanych transformacji, np. przy imporcie plików z folderu. Jak zwykle ograniczeniem jest tylko nasza wyobraźnia 😊.
Plik do pobrania:
I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:
0 komentarzy