Transformar múltiplas colunas em Power Query: Table.TransformColumns

Tempo de leitura:

4-6 minutos

Um conjunto de transformações que habitualmente realizamos em Power Query, é realizar transformações em colunas, como por exemplo, uniformizar um conjunto de texto numa coluna, e embora seja bastante intuitivo, é um processo que não é dos mais eficazes! Porquê? Porque, quando realizas este tipo de transformações acontecem normalmente 2 situações.

  • Ou executas vários passos, que não é ideal para a performance da tua Consulta
  • Ou, mesmo realizando várias transformações, em diversas colunas, no mesmo passo, a transformação é estática, o que significa que estás a “chamar” as colunas de uma forma direta, o que proporciona possíveis erros no futuro caso a estrutura dos dados mude.

Neste artigo vou mostrar-te como podes usar as funções Table.TransformColumns e List.Transform em Power Query para conseguir realizar transformações em várias colunas em apenas um passo e tornar dinâmico quanto possível para minimizar a propensão ao erro!

Porquê de te mostrar 2 funções?

Em primeiro lugar porque elas são semelhantes como vais poder verificar, e em segundo lugar, quando aplicas a função Table.TransformColumns deverás saber como funciona a função List.Transform, uma vez que uma lista é apenas uma coluna, e sabendo utilizar esta função, podes realizar transformações mais complexas numa coluna!

Iniciar a consulta

Vamos iniciar o Editor do Power Query, onde podes aceder pelo menu ou pelo atalho [ALT] + [F12]

Interface do Power Query no Excel com opções para carregar dados e consultas, apresentando uma tabela com informações sobre funcionários como idades, departamentos e salários.

Uma vez dentro do Power Query podemos iniciar 2 consultas:

Interface do Power Query mostrando opções para criar uma nova consulta em branco, com destaque para o menu 'New Source' e 'Blank Query'.

= Excel.CurrentWorkbook()[Content]{0}

Tabela exibindo dados de funcionários com colunas para nome, apelido, data de nascimento, idade, gênero, departamento e salário.

Este código permite aceder ao ficheiro atual, navegando para a coluna [Content] e aceder ao primeiro item {0} -> Folha do ficheiro. Repetimos o processo para criar outra consulta acedendo à 2ª folha {1}

= Excel.CurrentWorkbook()[Content]{1}

Tela do Editor do Power Query exibindo duas consultas, com destaque para a consulta 'Query2' e uma tabela com colunas 'Nome', 'Apelido', 'Data de Nascimento (Ano)' e 'Idade (anos)'.

Função Table.TransformColumns

A função Table.TransformColumns permite aplicar transformações a uma coluna da tabela. Os seus argumentos são simples:

  1. Table: Tabela que contem as colunas a transformar
  2. Transform Operations: A operação a realizar para a transformação.
    1. Neste caso a operação deve ser feita no formato de Lista com sub-lista: { column name, transformation } ou podemos incluir ainda na transformação o tipo de dados na coluna resultante da transformação: { column name, transformation, new column type }
  3. Default Transformation: Aplica uma transformação pre-definida a todas as colunas, excluindo as colunas selecionadas na transformação. Vamos ver este exemplo!
  4. Missing Field: Por pré-definição a função usa MissingField.Errorque aciona um erro caso alguma coluna colocada no argumento 2 -> Transform Operations não exista. Podemos alterar este comportamento para não quebrar a consulta utilizando outras numerações: MissingField.UseNull ou MissingField.Ignore.

Algumas notas sobre a função:

  • Para além de realizarmos transformações na coluna podemos alterar o tipo de dados da mesma, este é o 3º elemento da lista no passo 2: Transform Operations
  • A função suporta uma transformação pré-definida -> Passo 3: Default Transformation
  • A transformação apenas pode ocorrer na coluna em si a ser transformada.
  • Quando realizamos a transformação, não podemos incluir dados de outras colunas, infelizmente. Uma condição que implique dados de outras colunas não é possível realizar.

Exemplo: Aplicar maiúsculas numa coluna.

Exibição de uma tabela no Power Query com colunas como Nome, Apelido, Data de Nascimento e Idade, mostrando opções de transformação para a coluna Departamento.

No cenário é gerado o seguinte código:

= Table.TransformColumns(Source,{{“Departamento”, Text.Upper, type text}})

Captura de tela do Power Query mostrando uma tabela com colunas de dados, incluindo 'Nome', 'Apelido', 'Data de Nascimento (Ano)', 'Idade (anos)', 'Género' e 'Departamento', com uma fórmula para transformar os dados da coluna 'Departamento' em letras maiúsculas.

Para percebermos melhor o código, apresento o mesmo formatado:

Captura de tela do Editor do Power Query mostrando a função Table.TransformColumns aplicada a uma tabela com colunas de dados, incluindo Nome, Apelido, Data de Nascimento, Idade e Gênero.

= Table.TransformColumns(

    Source,

    {

        {“Departamento”, Text.Upper, type text}

    }

)

Código M demonstrando a função Table.TransformColumns no Power Query, aplicando transformação a uma coluna específica com parâmetros de função e tipo de dado.

No caso da transformação ser aplicada em várias colunas, a lógica é a mesma, onde dentro da Lista Principal, temos uma lista com a 2ª transformação e assim sucessivamente.

Código M para aplicar transformações a colunas 'Departamento' e 'Género' em texto maiúsculo usando a função Table.TransformColumns em Power Query.

Aplicar a função através do código M

Através do código M podemos aplicar naturalmente transformações um pouco mais complexas, como vamos poder ver no exemplo.

= Table.TransformColumns(TranformacaoUPPER,{{“Apelido”, each if Text.StartsWith(_, “M”) then Text.Upper(_) else Text.Lower(_)}})

Tabela no Excel mostrando dados com uma coluna para sobrenomes e uma condição para formatar os sobrenomes que começam com a letra 'M'.

Função List.Transform

A função List.Transform é semelhante, uma vez que podes imaginar que estar a realizar a operação a uma coluna. Simplesmente a transformação é realizada a cada item da lista. Nos seus argumentos a lógica é semelhante.

  • List: A lista usada para a transformação
  • Tranform: A Transformação aplicada sobre cada item da lista.

Imagina então o cenário onde temos uma lista.

A mesma lógica pode ser aplicada com a função List.Transform

= List.Transform(Source, each if Text.StartsWith(_, “M”) then Text.Lower (_) else Text.Upper(_))

Captura de tela do Power Query em Excel mostrando uma transformação aplicada a uma lista de itens, com duas opções de formatação de texto: maiúsculas e minúsculas. O código M é exibido no painel do editor.

Aplicar transformações a várias colunas

Podemos aplicar a transformação a várias colunas em simultâneo, seguindo o princípio da sintaxe da expressão Table.TransformColumns onde aplicamos a transformação com uma função integrada numa lista.

Definir uma lista com as colunas a alterar

Em primeiro lugar, vamos definir uma lista (lista principal) com as colunas a alterar. Para tal podemos aceder à base e escolher as colunas que pretendemos alterar. Aqui podemos usar o código necessário para escolher as colunas. Eu optei pela função List.Select para a expressão Table.ColumnNames, para selecionar os itens da lista.

= List.Select(Table.ColumnNames(Source), each not Text.Contains (_, “(“))

Captura de tela mostrando uma consulta no Power Query, com destaque para a expressão List.Select aplicada a colunas de uma tabela.

Depois de termos as colunas obtemos efetivamente uma lista. Para a função Table.TransformColumns este é um dos parâmetros -> uma lista.

Aplicar a transformação apenas às colunas indicadas.

Agora podemos aplicar a lógica de transformar uma série de colunas em simultâneo.

= Table.TransformColumns (

    Source,

        List.Transform ( ColunasTransformar, each {_, Text.Upper, Text.Type}),

        Number.From,

        MissingField.Ignore

)

Imagem mostrando uma tabela de dados no Power Query, destacando colunas com transformação padrão e uma lista de colunas a serem alteradas.

Aplicar transformações a outras colunas

Imagina um cenário em que agora não tens um padrão específico como no caso, em que defini apenas as colunas que “não têm um parêntesis” para transformar. Neste caso temos de ser mais específicos e identificar uma técnica que indique a transformação a aplicar a uma minoria, e deixar a transformação Default fazer o seu trabalho às outras colunas.

Simplificando o raciocino, nesta tabela (Query 2) temos várias colunas de texto, e apenas 3 colunas diferentes (Data de nascimento, Idade e Salário).

Assim podemos aplicar transformações específicas a estas 3 colunas e deixar as restantes com a transformação Default.

Imagem mostrando a interface do Power Query com uma tabela de dados. As colunas incluem Nome, Apelido, Data de Nascimento, Idade, Gênero, Departamento e Salário. Indicações visuais mostram transformações a serem realizadas nas colunas como extrair o ano, converter valores para número, aumentar salários em 10% e alterar alguns textos para letras maiúsculas.

Assim aplicamos o seguinte código (Advanced Editor):

let

    Source = Excel.CurrentWorkbook()[Content]{1},

    Transformacao = Table.TransformColumns(

    Source,

    {

        { “Data de Nascimento (Ano)”, each Date.Year (_), Int64.Type },

        { “Idade (anos)”, each Number.From (_), Int64.Type},

        { “Salário (€)”, each _ * 1.10, Int64.Type}

    },

    Text.Upper,

    MissingField.Ignore

)

in

    Transformacao

Como podes verificar, tecnicamente podes usar vários métodos, conforme o que os dados te proporcionam. Neste caso este último cenário é importante, no caso de teres algumas colunas excecionais que deves realizar transformações. Pensando na “maioria” como algo que pode receber uma transformação Default.

Próximo artigo:

Artigo Anterior:


Comentários

Leave a Reply

Discover more from Exceldriven

Subscribe now to keep reading and get access to the full archive.

Continue reading