Blog JSystems - uwalniamy wiedzę!

Szukaj

Power Query w Excelu, Power BI i Fabric

Łączenie plików z folderu: brakuje kolumn z nowych plików

W skrócie

  • Nowy miesięczny plik ma dodatkową kolumnę, a po odświeżeniu połączonej tabeli tej kolumny nie ma. Power Query nie zgłasza błędu, dane z nowej kolumny po prostu nie trafiają do wyniku.
  • Łączenie plików buduje kroki na pliku przykładowym, domyślnie pierwszym w folderze. Liczba kolumn trafia do opcji Columns funkcji Csv.Document, a krok rozwijania bierze nazwy kolumn z tego samego pliku.
  • Usuń opcję Columns z Csv.Document w zapytaniu Przekształć przykładowy plik, w kroku rozwijania pobierz nazwy kolumn ze wszystkich plików, a typy ustaw dopiero na połączonej tabeli.

Łączenie plików z folderu działa miesiącami, aż system źródłowy dopisze do eksportu nową kolumnę, na przykład kanał sprzedaży. Nowy plik trafia do folderu, odświeżenie przechodzi bez błędu, a nowej kolumny w wyniku nie ma. Gdy w Power Query łączenie plików gubi kolumny, przyczyna leży w krokach zbudowanych na pliku przykładowym. Pokazujemy, które to kroki i jak przestawić je na wszystkie pliki.

Jak to wygląda w praktyce

W folderze są pliki za kilka miesięcy, a najnowszy ma kolumnę więcej, na przykład Kanał. Po Odśwież wszystko połączona tabela ma tyle kolumn co wcześniej. Kolumna Source.Name pokazuje wiersze z nowego pliku, ale bez wartości z dodatkowej kolumny, a Power Query nie pokazuje żadnego komunikatu ani komórki z błędem.

Sprawdziliśmy to w polskim Excelu na dwóch poziomach. Funkcja Csv.Document z opcją Columns=3 odczytała plik z czterema kolumnami jako trzy kolumny i bez błędu pominęła wartość z czwartej: z wiersza 2026-05-01;WAW1;10;online zostało 2026-05-01, WAW1 i 10. Z kolei krok rozwijania z nazwami kolumn pobranymi z pierwszego pliku dał tylko Source.Name, Data i Kwota, choć drugi plik miał też kolumnę Kanał.

Dlaczego tak się dzieje

Łączenie plików z folderu tworzy grupę zapytań pomocniczych: Przykładowy plik (domyślnie pierwszy plik z folderu), Parametr1, Przekształć przykładowy plik i funkcję Przekształć plik, wywoływaną dla każdego pliku. Kroki powstają na pliku przykładowym i zapamiętują jego układ.

Pierwsze miejsce to krok Źródło w zapytaniu Przekształć przykładowy plik. Dla plików CSV zawiera on wywołanie Csv.Document z rekordem opcji, a w nim między innymi Columns, czyli liczbę kolumn pliku przykładowego. Plik z jedenastoma kolumnami przy Columns=10 zostanie odczytany jako dziesięć. Drugie miejsce to krok rozwijania w zapytaniu głównym: Table.ExpandTableColumn(#"Usunięto inne kolumny1", "Przekształć plik", Table.ColumnNames(#"Przekształć plik"(#"Przykładowy plik"))). Lista kolumn do rozwinięcia pochodzi z pliku przykładowego, więc kolumna, której ten plik nie ma, nie zostanie rozwinięta, nawet jeśli funkcja ją odczyta. Do tego krok Zmieniono typ ma zapisaną listę kolumn z pliku przykładowego, a nowa kolumna zostaje bez typu.

Okno Połącz pliki w Power Query z polem Przykładowy plik ustawionym na Pierwszy plik, ogranicznikiem średnik i podglądem pierwszego pliku
Okno Połącz pliki z polem Przykładowy plik ustawionym na Pierwszy plik i podglądem tego pliku w kolumnach Column1, Column2 i kolejnych. Obok pola Pochodzenie pliku, Ogranicznik i Wykrywanie typu danych.

Jak to rozwiązać krok po kroku

  1. Otwórz zapytanie Przekształć przykładowy plik w grupie zapytań pomocniczych i kliknij krok Źródło. W pasku formuły znajdź w rekordzie opcji wpis Columns= z liczbą kolumn, na przykład Columns=10.
  2. Usuń z formuły cały wpis Columns=10, razem z przecinkiem i zatwierdź klawiszem Enter. Formuła przyjmie postać w rodzaju = Csv.Document(Parametr1, [Delimiter=";", Encoding=65001, QuoteStyle=QuoteStyle.None]). W naszym teście bez tej opcji plik z czterema kolumnami dał wszystkie cztery: Data, Sklep, Kwota i Kanał. Funkcja Przekształć plik przejmie tę zmianę automatycznie dla wszystkich plików.
  3. Przejdź do zapytania głównego, na przykład Sprzedaz_miesieczna, i kliknij krok Rozwinięto kolumnę tabeli1. W pasku formuły zamień ostatni argument na listę nazw ze wszystkich plików:
    = Table.ExpandTableColumn(#"Usunięto inne kolumny1", "Przekształć plik",
        List.Union(List.Transform(#"Usunięto inne kolumny1"[Przekształć plik], Table.ColumnNames)))
    W naszym teście taki krok rozwinął kolumny Data, Kwota i Kanał, a w wierszach z pliku bez kolumny Kanał wpisał null.
  4. Usuń krzyżykiem końcowy krok Zmieniono typ i ustaw typy od nowa na połączonej tabeli: zaznacz wszystkie kolumny (nagłówek pierwszej kolumny i Ctrl+A), na karcie Przekształć kliknij Wykryj typ danych, a potem sprawdź ikonę nowej kolumny. W starym kroku nowa kolumna nie ma typu: w teście dostała Any.Type.
  5. Gdy kolumna w nowym pliku ma inną nazwę niż w starych, połączenie utworzy dwie osobne kolumny, a w każdej część wierszy będzie pusta. W naszym teście tabele z kolumnami Ilość i Ilosc dały obie kolumny i null w drugiej. Ujednolić nazwy najlepiej u źródła albo w zapytaniu Przekształć przykładowy plik, zanim dane trafią do połączenia.

Jak sprawdzić, że zadziałało

Po zmianach odśwież zapytanie i sprawdź listę kolumn połączonej tabeli: nowa kolumna jest na miejscu, a w wierszach ze starszych plików ma wartość null. Filtr kolumny Source.Name na najnowszy plik pokaże, czy wartości z nowej kolumny doszły. Zrób też test z kursu: dodaj do folderu kolejny plik, kliknij Odśwież wszystko i porównaj liczbę załadowanych wierszy w okienku Zapytania i połączenia z sumą wierszy w plikach.

Żeby problem nie wrócił, w opcjach Csv.Document zostaw ogranicznik, kodowanie i sposób traktowania cudzysłowów, a listę kolumn do rozwinięcia licz zawsze ze wszystkich plików. Jeśli raport wymaga stałego zestawu kolumn, wybieraj je po połączeniu krokiem Table.SelectColumns z parametrem MissingField.UseNull, który zamiast błędu tworzy pustą kolumnę.

Wróć do listy: 88 najczęstszych pytań i problemów związanych z Power Query

Baner szkolenia Microsoft Excel - Power Query w JSystems z edytorem Power Query na ekranie laptopa

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

Najczęściej zadawane pytania

Dlaczego Power Query nie zgłasza błędu, gdy nowy plik ma dodatkową kolumnę?
Bo każdy krok działa zgodnie z zapisem: Csv.Document czyta tyle kolumn, ile wskazuje opcja Columns, a krok rozwijania rozwija listę nazw z pliku przykładowego. Nadmiarowe dane są pomijane bez komunikatu. W naszym teście plik z czterema kolumnami dał trzy kolumny i ani jednego błędu.
Czym jest plik przykładowy przy łączeniu plików z folderu?
To plik, na którym Power Query buduje kroki przekształceń, domyślnie pierwszy plik z folderu. Kroki zapisane w zapytaniu Przekształć przykładowy plik funkcja Przekształć plik powtarza potem dla każdego pliku. Jeśli plik przykładowy ma mniej kolumn niż nowsze pliki, kroki zapamiętają ten mniejszy układ.
Czy Table.Combine rozwiązuje problem brakujących kolumn?
Table.Combine łączy tabele i tworzy sumę ich kolumn, a brakujące wartości uzupełnia null. W naszym teście dał kolumny Data, Kwota i Kanał z dwóch tabel o różnym układzie. Opcja Columns w Csv.Document nadal musi zniknąć, bo inaczej nowa kolumna nie zostanie w ogóle odczytana z pliku.
Co się stanie, gdy w nowym pliku zabraknie jakiejś kolumny?
Po zmianach opisanych wyżej kolumna zostanie w wyniku, a w wierszach z tego pliku pojawi się null. Krok, który odwołuje się do tej kolumny po nazwie, na przykład zmiana nazwy, zgłosi jednak błąd Expression.Error: Nie można znaleźć kolumny „Kanał” w tabeli. Przy wybieraniu kolumn chroni przed tym parametr MissingField.UseNull.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...