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:
Category | Value |
A | 10 |
B | 15 |
C | 200 |
O que pretendemos é formatar valor da seguinte forma 000,00 ficando com o resultado abaixo:
Category | Value |
A | 010,00 |
B | 015,00 |
C | 200,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.