Przejdź do treści

Power Query & Excel – łączenie plików Excela z folderu o różnych pozycjach nazw kolumn

Połączymy wiele plików Excela z folderu w jedną spójną tabelę danych. Nasz problem dotyczy plików, w których docelowe nazwy kolumn są w różnych wierszach.

Metoda skuteczna, jeżeli:

  • Nazwy kolumn są w różnych wierszach
  • Nazwy kolumn są takie same, ale różnią się wielkością liter
  • Nad docelowymi nazwami kolumn mogą być komentarze, informacje i inne zbędne dane

Analiza struktury plików

Docelowy wiersz z nazwami kolumn w każdym z plików jest na różnej pozycji. Odpowiednimi funkcjami zaznaczymy docelowy rekord z tytułami kolumn i przeniesiemy go w docelowe pola nagłówkowe. Pliki zostaną połączone w spójną tabelę przy użyciu nazw kolumn. Problem dla tego typu łączenia stanowią także wielkości liter. Przed łączeniem przekształcimy nasze docelowe nazwy kolumn na małe litery, a na końcu scalimy pliki w zbiorczą tabelę.

  • w pliku 2016.xlsx nazwy kolumn są w trzecim wierszu, a nad nimi są zbędne informacje, które należy pominąć
  • w pliku 2017.xlsx nazwy kolumn są w pierwszym wierszu
  • w pliku 2018.xlsx nazwy kolumn są w czwartym wierszu
  • w pliku 2019.xlsx nazwy kolumn są w drugim wierszu, a nad nimi są zbędne informacje do pominięcia

Wczytywanie plików do edytora Power Query

  1. Utwórz pusty skoroszyt Excela.
  2. Wykonaj poniższe kroki, aby zaimportować dane z folderu
    • Z karty Dane kliknij w Nowe zapytanie
    • Następnie wybierz opcję Z pliku
    • Z folderu
  • Wskaż folder z plikami
  • Kliknij w przycisk Otwórz

Otworzy się okno z aktualną listą plików z folderu.

  • Kliknij w przycisk „Przekształć dane”. Po chwili pojawi się edytor Power Query z wczytanymi plikami z folderu.

Po załadowaniu plików z folderu edytor Power Query powinien pojawić się w podobnej konfiguracji:

Więcej informacji na temat załadowywania plików z folderu do edytora Power Query znajdziesz tutaj:

Zmiana nazwy kolumny

  1. Zmień nazwę kolumny [Name] na „nazwa pliku”

Usuwanie zbędnych kolumn

Usuniemy niektóre kolumny, aby widok z danymi był bardziej czytelny

  1. Zaznacz z przyciśniętym CTRL kolumny: [nazwa pliku] i [Content].
  2. Następnie Kliknij PPM, na jakąś z zaznaczonych kolumn i wybierz opcję „usuń inne kolumny”.

Dane prezentują się następująco

Zwracanie zawartości skoroszytu funkcją Excel.Workbook()

  1. Dodaj kolumnę niestandardową o nazwie „ex
  • w pasku formuły wpisz funkcję
Excel.Workbook([Content])

Funkcja przekształca typ Binarny na typ „Excelowy”. Dzięki niej pozyskamy takie dane jak: nazwy arkuszy, zawarte w nich dane i inne informacje o plikach. Po dodaniu kolumny niestandardowej Power Query zwróci nam kolumnę [ex] z typem TABLE.

Rozwijanie danych z kolumny [ex]

  1. Kliknij w ikonę strzałek w prawym narożniku kolumny [ex], aby rozwinąć kolumny
    • Zaznacz na liście wszystkie kolumny
    • Odznacz opcję „Użyj oryginalnej nazwy jako prefiksu” (odznaczona opcja nie dodaje nazwy „ex.” przed nazwą każdej rozwiniętej kolumny. Zaznaczona opcja dodaję takowy tytuł)
    • Zatwierdzić wybór przyciskiem „ok”

Dane prezentują się następująco

Więcej informacji na temat funkcji Excel.Workbook() znajdziesz tutaj:

Filtrowanie kolumn

  1. W kolumnie [Name] pozostaw tylko arkusze: 2016, 2017, 2018, 2019. Tam znajdują się docelowe dane.
    • Kliknij w ikonę strzałki obok nazwy kolumny [Name]
    • na liście danych zaznacz nazwy: 2016, 2017, 2018, 2019
    • zatwierdź wybór przyciskiem „ok”

Usuwanie zbędnych kolumn

  1. Zaznacz z przyciśniętym CTRL kolumny: [nazwa pliku], [Name] i [Data]. Następnie Kliknij PPM, na którąś z zaznaczonych kolumn i wybierz opcję „usuń inne kolumny”.

Dane powinny teraz prezentować się następująco:

Łączenie plików w spójną tabelę

  1. Dodaj kolumnę niestandardową o nazwie „do rozwinięcia”.
  • W pasku formuły wpisz funkcję:
Table.TransformColumnNames(Table.PromoteHeaders(Table.Skip([Data], List.PositionOf([Data][Column1], "miesiąc i rok"))), Text.Lower)

Wynikiem funkcji będzie uporządkowane struktura każdej tabeli. Kolumny po rozwinięciu będą poprawnie połączone w jedną spójną bazę. W Power Query funkcje czyta się od końca. Ostatni krok jest pierwszym.


Przeanalizujmy działanie funkcji od początku


Wskazanie numeru wiersza z nazwami kolumn

  1. Dodaj nową kolumnę niestandardową o nazwie [pozycja]

w pasku formuły wpisz funkcję:

List.PositionOf([Data][Column1], "miesiąc i rok")

Struktura funkcji

List.PositionOf(lista elementów, "pobieranie pozycji wskazanej nazwy")
List.PositionOf([Data][Column1], "miesiąc i rok")

[Data][Column1] – zaznacza kolumnę [Column1] z tabeli [Data] tworząc listę elementów typu List.

List.PositionOf() ma wskazać dla każdej tabeli z kolumny [Data] numer pierwszego napotkanego wiersza w kolumnie [Column1] równego nazwie „miesiąc i rok”. W pliku „2016.xlsx” ten tekst jest na drugim miejscu – to pozycja z nazwami kolumn. Funkcje typu List zaczynają numerację od 0.

Pomijanie pierwszych wierszy

  1. Dodaj kolumnę niestandardową o nazwie [nagłówki w 1 wierszu]

w pasku formuły wpisz funkcję:

Table.Skip([Data], List.PositionOf([Data][Column1], "miesiąc i rok"))

Struktura funkcji

Table.Skip(źródło typu TABLE, liczba pierwszych wierszy do pominięcia)
Table.Skip([Data], List.PositionOf([Data][Column1], "miesiąc i rok"))

Źródło typu TABLE – jest to kolumna z minitabelkami

Liczba pierwszych wierszy do pominięcia – to liczba wskazana formułą ListPositionOf()

Funkcja Table.Skip() w każdej minitablce z kolumny [Data] pomija liczbę pierwszych wierszy wskazaną przez funkcję List.PositionOf(). Wynikiem funkcji jest nowa tabela danych, w której docelowe nazwy kolumny zostały przeniesione do pierwszego wiersza.

Przenoszenie nazw kolumn do pól nagłówkowych

  1. Dodaj kolumnę niestandardową o nazwie [docelowa pozycja nagłówków]

w pasku formuły wpisz funkcję:

Table.PromoteHeaders(Table.Skip([Data], List.PositionOf([Data][Column1], "miesiąc i rok")))

Struktura funkcji

Table.PromoteHeaders(źródło typu TABLE)
Table.PromoteHeaders(Table.Skip([Data], List.PositionOf([Data][Column1], "miesiąc i rok")))

Funkcja Table.PromoteHeaders() we wskazanej tabeli przesuwa nazwy kolumn z pierwszego wiersza do docelowych pól nagłówkowych.

Nagłówki są już na docelowej pozycji, ale różnorodna wielkość liter w każdym z plików komplikuje zasadę zachowania spójności nazewnictwa, co skutkuje niepoprawnym połączeniem danych w jedną spójną tabelę np. kolumny [kategoria] i [Kategoria] będą w osobnych kolumnach. Power Query jest Key sensitive, dlatego wielkość liter w tytułach kolumn ma znaczenie. W następnym kroku zamienimy duże litery na małe.

Zamiana wszystkich liter w nazwach kolumn na małe

  1. Dodaj kolumnę niestandardową o nazwie [dane do rozwinięcia]

w pasku formuły wpisz funkcję:

Table.TransformColumnNames(Table.PromoteHeaders(Table.Skip([Data], List.PositionOf ([Data][Column1], "miesiąc i rok"))), Text.Lower)

Struktura funkcji

Table.TransformColumnNames(źródło typu TABLE, funkcja zmiany)
Table.TransformColumnNames(Table.PromoteHeaders(Table.Skip([Data], List.PositionOf ([Data][Column1], "miesiąc i rok"))), Text.Lower)

Funkcja Table.TransformColumnNames() we wskazanej tabeli zamienia wszystkie nazwy kolumn na małe litery.

Kolumna [dane do rozwinięcia] zawiera minitabelki z uporządkowanymi danymi. Na powyższym obrazku widać ostateczną formę nagłówków.

Rozwijanie kolumn

  1. Rozwiń wszystkie dane z kolumny [do rozwinięcia] klikając w ikonę strzałek obok nazwy kolumny

Otrzymaliśmy spójną tabelę danych.

Ominęliśmy w plikach zbędne informacje nad docelowymi nazwami kolumn. Następnie przenieśliśmy tytuł kolumn do pól nagłówkowych i zmieniliśmy ich format tekstu na małe litery. Dane zostały poprawnie skonsolidowane, a efekt widać na załączonym obrazku.