Przejdź do treści

Power Query – dynamiczne nadanie typu tekstowego wszystkim kolumnom

Dowiesz się jak dynamicznie zdefiniować wszystkim kolumnom typ tekstowy bez deklarowania ich tytułów.

Jeżeli chcesz nadać wszystkim kolumnom typ tekstowy to dynamiczna formuła, którą przedstawię na pewno się sprawdzi, ponieważ nie są wymagane nazwy kolumn.

Źródło danych

Standardowe nadanie typu tekstowego

W sposób standardowy nadamy typ tekstowy wszystkim kolumnom. Następnie zmodyfikujemy tą funkcję tak, aby typ danych został zdefiniowany dynamicznie.

  1. Zaznacz wszystkie kolumny (CTRL+A)
    • kliknij PPM na dowolny tytuł zaznaczonej kolumny
    • Wybierz opcję „Zmień typ”
      • „Tekst”

Analiza funkcji zmiany typu

Struktura funkcji Table.TransformColumnTypes()

Table.TransformColumnTypes(#"źródło tabeli", {{"nazwa kolumn1",  typ danych}, {"nazwa kolumny2", typ danych}, {"nazwa kolumny3", typ danych}})

#"źródło tabeli" wskazujemy nazwę tabeli.

{"nazwa kolumn1", typ danych}– to jest lista, w której podajemy nazwę kolumny wraz z docelowym typem danych

Zastosowana funkcja:

= Table.TransformColumnTypes(Źródło,{{"produkt", type text}, {"model", type text}, {"dostępność", type text}})

Powyższa funkcja dla tabeli z kroku „Źródło” nadała kolumnom: „produkt”, „model”, „dostępność” typ tekstowy. Problemem w tej funkcji są zadeklarowane tytuły kolumn w tej części kodu: {„produkt”, type text}, {„model”, type text}, {„dostępność”, type text}}. Jeżeli dowolna nazwa kolumny się zmieni to wyskoczy komunikat o błędzie.

Funkcją List.Transform() stworzymy dynamiczną listę wyrażeń według wzorca: {"nazwa kolumn1", typ danych}

Dynamiczne nadanie typu tekstowego

  1. Na liście zastosowanych kroków zaznacz krok o nazwie „Zmieniono typ”
  • przejdź do paska formuły
  • Podmień całą formułę na ten kod:
= Table.TransformColumnTypes(Źródło,
      List.Transform(
          Table.ColumnNames(Źródło),
          each {_, type text}
      )
   )

Analiza funkcji List.Transform()

= List.Transform(
      Table.ColumnNames(Źródło), 
      each {_, type text}
   )
= List.Transform({lista z danymi}, typ transformacji)

Table.ColumnNames(Źródło) – zostaje stworzona lista z nawami kolumn. Tak wyglądają dane wewnątrz tej listy {„produkt”,”model”,”dostępność”}

each {_, type text}– Wyrażenie „each” wskazuje funkcji, aby przekształcenie dokonało się w każdym wierszu listy z nawami kolumn. Ta część{_, typ text} tworzy pary {„nazwa kolumny”, type text} z każdym tytułem kolumny (_).

Analiza funkcji Table.TransformColumnTypes()

Funkcja Table.TransformColumnTypes() wyznaczonej kolumnie nadaje określony typ danych. Kluczowym elementem tej funkcji jest ta część: {"nazwa kolumny", typ danych}. Funkcją List.Transform() stworzyliśmy właśnie listę wyrażeń według powyższego wzorca. Teraz dynamicznie jest nadawany typ tekstowy dla wszystkich kolumn.