Jak poradzić sobie z dwupoziomowymi i brakującymi nagłówkami (np. z plików SAP)?

Pliki eksportowane z różnych systemów mogą tworzyć wiele wyzwań. Niepotrzebne początkowe wiersze i podsumowania omawiałem już na przykładzie pliku SAP. Czasem zdarza się, że nagłówki są w 2 wierszach, części nagłówków nie ma, a kolumn jest sporo. Jak poradzić sobie z takim zagadnieniem w Power Query?

Krok 1: Usuń niepotrzebne wiersze

Możesz to uczynić operacją Usuń pierwsze wiersze i Usuń końcowe wiersze lub zwykłym filtrowaniem np. wartości null. Zachowaj przy tym wszystkie wiersze, które składają się na nagłówki.

Krok 2: Zbuduj 2 odwołania

Jedno odwołanie będzie procesować nagłówki, drugie – dane właściwe.

Krok 3: Usuń symetrycznie wiersze

W naszym przypadku w zapytaniu Nagłówki zostawiam 2 pierwsze wiersze, a w zapytaniu Dane usuwam je.

Krok 4: Transponuj nagłówki

Czas na zabawę z transpozycją, dzięki której nagłówki będzie można potraktować jak kolumnę tekstową.

Krok 5: Złącz teksty

Czasem nagłówki nadają się wprost do złączenia, a czasem nie do końca i wtedy trzeba użyć jeszcze kolumny warunkowej czy zamiany wartości.

Krok 6: Wypełnij w dół

Wypełnianie jest jedną z najciekawszych opcji w Power Query i zastępuje stary trik: znajdź puste i = komórka wyżej z Ctrl + Enter. Trzeba tylko pamiętać, że potrzebna jest wartość null, a jeśli jej nie ma, zastępujemy tekst (1–>2 na karcie Przekształć) na null pisany małymi literami.

Krok 7: Usuń niepotrzebne kolumny i transponuj z powrotem

Krok 8: Do nagłówków dołącz dane jako nowe zapytanie

Nazwy nagłówków obu tabel nadal powinny zaczynać się od słowa Column.

Jeśli dobrze zrealizujemy cały proces, diagram zależności zapytań będzie wyglądał tak:

Krok 9: Nadaj nowe nagłówki

Teraz jest wreszcie moment na polecenie Użyj pierwszego wiersza jako nagłówków z karty Przekształć.

Sprawdź zapytanie Power Query w pliku Excel

Tu możesz pobrać plik Excel z zapytaniem Power Query naprawiającym nagłówki.

Masz inny problem z plikami tekstowymi lub Excelami?

Podziel się w komentarz.

Udostępnij ten wpis:

Brak komentarzy

  1. Hello,
    mam problem z nagłówkami, który pojawił się po ostatniej aktualizacji systemu (konkretnie JIRA). W każdym raporcie w pierwszej komórce generuje nazwę z inną datą. Zatem co miesiąc mam raport z innym pierwszym nagłówkiem. Pozostałe kolumny wyświetlają się prawidłowo już w wierszu trzecim (wszystkie identyczne co miesiąc). Power Query nie chce przekształcać danych z takiego raportu, chyba że ręcznie usunę pierwszy wiersz. Czy istnieje jakiś sposób, żeby można było to zrobić automatycznie w PQ? Z góry dziękuję za odpowiedź

    • Cześć Iza, na pierwszym kroku Użyj nagłówków jako pierwszego rzędu – wtedy opuścisz tę komórkę i będziesz mogła usunąć 4 wiersze razem z nią. Ewentualnie usuń automatyczny krok tworzenia nagłówków.

    • Witam,
      znalazłem takie rozwiązanie:
      Krok 6a.
      #”Dodano kolumnę warunkową” = Table.AddColumn(#”Wypełniono w dół”, „Nagłówek”, each if [Scalone] = [Column2] or [Scalone] = [Column1] then [Scalone] else [Scalone]&”Nazwa”)

  2. Witam,
    jak poradzić sobie takim zagadnieniem.
    Dane jak w pliku wejściowym:
    – komórka A1 = „Data raportu”;
    – komórka A2 = 2019-12-03;
    – komórka J5 = „Wartość”;
    – wiersz 6 zawiera pozostałe nagłówki.
    Chcemy żeby wszystkie nagłówki były z wiersza 5 i 6 (to zostało opisane w poradzie) oraz
    dodać kolumnę o nagłówku z A1 i danymi z komórki A2.

  3. Dziękuję za omówienie zagadniania. Fajny pomysł z tymi dwoma odwołaniami, transponowaniem itd. Ja jeszcze musiałam dodatko popracować przed wykonaniem kroku 8, aby nazwy nagłowków obu tabel zaczynały się od słowa Column. Ja bowiem potrzebuję w efekcie mieć 2 dodatkowe kolumny z nazwą pliku i arkusza, gdyż łączę co miesiąc (tydzień) pliki mające kilka lub kilkanaście arkuszy i potrzebuję mieć nazwy miesiąca (tygodnia) oraz nazwy tych arkuszy, z których pochodzą informacje. W zapytaniu „Dane” utworzyły mi się odpowiednio kolumny „Name” i „Name.1. Musiałam zmienić w rezultacie nagłówki wszystkich kolumn w zapytaniu „Dane”, aby od początku szło Column.1, Column.2 itd. Czy da radę ewentualnie jakoś to uprościć czy trzeba „ręcznie” to rzeźbić?

    • Cześć Jola, zawsze można opuścić nagłówki piętro niżej (Przekształć > Użyj nagłówków jako pierwszego rzędu) i usunąć pierwszy wiersz. Można też zmienić nazwy kolumną formułą języka M, niezależnie od ich pierwotnej nazwy:
      = Table.RenameColumns(
      #”Zmieniono typ”,
      {
      {Table.ColumnNames(#”Zmieniono typ”){0}, „Production Quantity”}
      }
      )

  4. Bartku,

    dziękuję za kod na okoliczność zmiany nazwy nagłowka kolumny, super się przyda! Muszę jeszcze wypróbować opuszczanie niżej nagłówków! Serdecznie dziękuję za to, iż dzielisz się wiedzą. Pozdrawiam.

Dodaj komentarz

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