Each exemplos de utilização (M language)

Aquando do tratamento de dados no Power Query vemo-nos muitas vezes obrigados a criar novas colunas com base noutras colunas, que depois posteriormente temos de remover para não termos informação duplicada.

Alguns exemplos podem ser a formatação especifica de um formato de número, ou a substituição de um valor de uma coluna condicionalmente.

Neste artigo vou demonstrar como podemos com um simples passo fazer algumas dessas transformações recorrendo a uma palavra-chave: each.

A palavra-chave each é utilizada para criar facilmente funções simples. “cada…” é açúcar sintático para uma assinatura de função que toma o _ parâmetro “(_) => …”

Each é útil quando combinado com o operador lookup, aplicado por predefinição a _
Por exemplo, cada [CustomerID] é o mesmo que cada _[CustomerID], que é o mesmo que (_) => _[CustomerID].

Este post é demonstrativo de algumas das utilizações do each para exemplos e explicação mais aprofundada aconselho a que vejam a documentação técnica assim como este blog.

Assim vamos dar dois exemplos de como utilizar esta palavra-chave e com um simples passo fazer algo que seria feito por duas vezes.

Formatação especifica de um número:

Vamos considerar uma tabela simples os seguintes valores:

CategoryValue
A10
B15
C200

O que pretendemos é formatar valor da seguinte forma 000,00 ficando com o resultado abaixo:

CategoryValue
A010,00
B015,00
C200,00

Como podemos então realizar a transformação do formato.

Criação de colunas adicionais no Power Query:

  • Add Column -> Custom Column
  • Adicionar o seguinte código:
 Number.ToText ( [Value] , "000.00", null)

Passo único:

  • Transform -> Replace values
  • Colocar qualquer valor nos campos:

Ao realizarmos este passo é criado um passo com o seguinte código:

= Table.ReplaceValue(#"Changed Type1",44444,9999,Replacer.ReplaceValue,{"Value"})

Os dois valores que colocamos na substituição podem agora ser alterados de modo a termos o nosso código final assim vamos realizar as seguintes substituições:

  • 44444 -> each [Value]
  • 9999 -> each Number.ToText ( [Value] , “000.00”, null)
= Table.ReplaceValue(#"Changed Type1", each [Value] , each Number.ToText ( [Value] , "000.00", null),Replacer.ReplaceValue,{"Value"})

A utilização do each na função faz com que cada linha seja avaliada individualmente e que o valor correspondente, neste caso a coluna [Value] tenha a alteração do seu formato.

Substituição de valores

Vamos pegar então no mesmo dataset e vamos alterar a coluna das categorias de acordo com os dados abaixo:

  • A -> Cat. 1
  • B -> Cat. 1
  • C -> Cat. 2

Criação de colunas adicionais no Power Query:

  • Add Column -> Custom Column
  • Adicionar o seguinte código:
 if List.Contains ( {"A", "B"}, [Category]) then "Cat. 1" else "Cat. 2"

Passo único:

  • Transform -> Replace values
  • Colocar qualquer valor nos campos:

Mais uma vez o passo é semelhante ao anterior com exceção da coluna de referência:

= Table.ReplaceValue(#"Changed Type","44444","9999",Replacer.ReplaceText,{"Category"})

Os dois valores que colocamos na substituição podem agora ser alterados de modo a termos o nosso código final assim vamos realizar as seguintes substituições:

  • 44444 -> each [Category]
  • 9999 -> each if List.Contains ( {“A”, “B”}, [Category]) then “Cat. 1” else “Cat. 2”
= Table.ReplaceValue(#"Changed Type",each [Category], each if List.Contains ( {"A", "B"}, [Category]) then "Cat. 1" else "Cat. 2",Replacer.ReplaceText,{"Category"})

Mais uma vez a transformação passa por utilizar a palavra-chave each e colocar o código da transformação que queremos implementar:

Com a utilização do each conseguimos remover passos desnecessários das nossas transformações.

Temos de ter em atenção que a criação dos passos adicionais não acresce qualquer problema ao nosso modelo quer em termos de performance quer em termos de aplicabilidade.

Do ponto de vista conceptual e de manutenção do modelo será preferível neste tipo de transformações criar as novas colunas, no entanto, os exemplos apresentados servem o propósito demonstrativo de como linguagem M tem diversos recursos que nos permitem flexibilizar as soluções de transformação no Power Query.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

%d bloggers like this: