Sortowanie kolumn w ustalonej kolejności dzięki Power Query

04.02.2025 | Opcje, Power Query

Ten artykuł to kontynuacja tematu z poprzedniego artykułu, jednak rozwiązanie, które zaprezentuję będzie wykorzystywało Power Query. 

Przypomnę założenia: 

Załóżmy, że mamy taki zestaw danych: 

Formatka

 

Chciałabym zmienić kolejność kolumn tego zakresu na taką: 

Kolejność kolumn

 

Dodatkowo chcę móc łatwo powtórzyć takie sortowanie kolumn w przyszłości, ponieważ dane generowane są każdorazowo z systemu. A żeby jeszcze utrudnić sprawę – za każdym razem mogą zostać wygenerowane inne kolumny, na szczęście zawsze spośród kolumn wyżej wymienionych. Czyli np. raz możemy mieć wszystkie kolumny, a innym razem – wszystkie poza kolumną Klient. 

1. Ładowanie danych do Power Query 

Aby zacząć z Power Query, najpierw musimy załadować do niego dane. Ponieważ oba zestawienia mam w Excelu – najprościej będzie skorzystać z konektora dostępnego bezpośrednio z menu Dane -> Z tabeli/Zakresu. 

W wyniku tego powstaną mi dwa zapytania:  

  1. tbDane 
  2. tbKolejnosc 

Mogę przystępować do edycji zapytania tbDane. 

 

2. Logika rozwiązania w Power Query 

Cały problem w tym zadaniu polega na tym, że nie zawsze będziemy mieli do czynienia ze wszystkimi kolumnami z listy nagłówków (tbKolejnosc). Nie wchodzi więc w grę ręczna zamiana miejscami kolumn z interfejsu, ponieważ na sztywno wpisuje nazwy kolumn do formuły (hardcoduje je). 

Ale zdecydowanie użyjemy funkcji, jaką ta metoda generuje, czyli Table.ReorderColumns. Jednak listę przechowującą kolejność kolumn podamy tej funkcji dynamicznie. 

Kroki mojego rozwiązania będą następujące: 

  1. Nadanie numeracji nagłówków w zapytaniu tbKolejnosc 
  2. Pobranie nagłówków tabeli tbDane do obiektu lista 
  3. Konwersja tej listy na obiekt tabela 
  4. Scalenie (Join) powyższej tabeli i tabeli tbKolejnosc 
  5. Zamiana kolejności funkcją Table.ReorderColumns 

Do dzieła! 

3. Dynamiczna zmiana kolejności kolumn w Power Query

Aby pobrać nagłówki do obiektu lista w Power Query, wstawię nowy krok w zapytaniu tbDane. Kliknę w tym celu fx obok paska formuły i użyję funkcji:

= Table.ColumnNames( Źródło)

Teraz z menu Narzędzia do obsługi List/Przekształć wybiorę Do tabeli, dzięki czemu otrzymam to samo, co miałam w liście, tylko w obiekcie tabela.

Teraz mogę dokonać scalania zapytań: tbDane i tbKolejność. W tym celu z menu Narzędzia główne wybiorę Scal zapytania:

Scalanie zapytań Power Query

 

Istotne jest, aby wybrać tutaj sprzężenie lewe zewnętrzne. 

Efekt mam taki: 

Wynik scalania zapytań

 

Teraz rozwinę kolumnę tbKolejnosc i oto wynik: 

Rozwinięta kolumna

 

Teraz wystarczy posortować po kolumnie Indeks, a następnie ją usunąć. Zamiast ręcznego usuwania kolumny można skorzystać z zapisu: 

= Table.Sort(#"Rozwinięty element tbKolejnosc",{{"Indeks", Order.Ascending}})[Column1] 

Otrzymaną listę użyjemy za chwilę do ustalenia kolejności kolumn. Aby sobie to ułatwić, proponuję zmienić nazwę obecnego kroku na krótszą, np. Kolejnosc. 

Zmieniona nazwa kroku

 

Teraz wystarczy dodać nowy krok (fx) i wpisać następującą formułę: 

= Table.ReorderColumns(Źródło, Kolejnosc) 

I voila! Po nadaniu typów danych otrzymujemy następujący efekt: 

WYNIK posortowane kolumny

 

Wystarczy załadować do Excela i gotowe! 


Film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Jeżeli chcesz lepiej poznać Power Query zapisz się na listę zainteresowanych kursem Power Query w Excelu od podstaw! Podczas oczekiwania na kurs będę Ci wysyłała informacje i ciekawostki na temat Power Query. Bezpłatnie! 

Pomogłam Ci? Postaw mi wirtualną kawę! →

Przeczytaj podobne wpisy

Kategorie

0 komentarzy

Wyślij komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *