Power Query: Como compreender a lógica da Linguagem M para modelar e tratar dados?
Recentemente, decidi aprimorar minhas habilidades em Excel voltadas ao tratamento de dados com o Power Query. Pedi à IA uma tabela fictícia que tivesse a maior parcela de erros possíveis: Data e Valores sem padronização brasileira e textos sem formatação adequada. Enfim, na hora de colocar a mão na massa percebi que eu não sabia como solucionar aqueles problemas, meu conhecimento era muito básico para solucionar o problema em questão.
Então, por meio deste artigo, vou demonstrar os conhecimentos que obtive ao estudar a Linguagem M por tentativa e erro, ou seja, praticando e lendo a documentação do programa.
O que é Power Query?
Antes de tudo, é necessário entender o intuito do programa, ou seja, para que o Power Query existe?
Podemos dizer que o Power Query é uma extensão que permite o tratamento e modelagem dos dados de forma rápida e prática. Ao invés de usar inúmeras fórmulas do Excel ou BI, é possível fazer isso no Query, exemplo: Criar colunas calculadas; utilizar condicionais; editar títulos; e formatar tabelas. Utilizando-o é possível criar essas consultas (Tratamento dos dados) de forma automatizada, portanto, qualquer dado novo já estará com a modelagem do Query.
Entendendo Linguagem M
Agora vamos percorrer mais profundamente o Query, no caso, sua linguagem de programação M.
A linguagem do Query permite o tratamento mais profundo e coeso dos dados. Entendê-la garante uma consulta mais coesa e menos suscetível a erros. Para entender a sua importância vamos usar um exemplo: Você precisa padronizar as datas de uma tabela de dados, para isso é possível usar a função Localidade que transformará a data no formato português (“pt-BR” no Query).
As datas sem formatação:

Função Localidade:

Retorno da Função Localidade:

Como podemos ver, a função localidade não funcionou neste caso por apenas um motivo. Uma data estava em inglês (“en-US” no Query), sendo assim o Query não consegue transformar a data no formato desejado. E são nestes casos que é necessário usar a Linguagem M, por isso, vamos utilizá-la para solucionar este problema.
Solucionando o Problema com a Linguagem M
Primeiramente, existem dois campos onde é possível editar uma coluna: Editor Avançado e Coluna Personalizada; e é importante que se entenda suas diferenças.
- Editor Avançado: É o painel que permite a alteração de toda a tabela, ou seja, se a alteração envolve todo o conjunto de dados utilize o Editor Avançado.
- Coluna Personalizada: Como já diz o nome, é a criação de uma função dentro de apenas uma coluna. Então se a alteração envolve apenas uma coluna específica, utilize essa opção.
Explicado isso, vou demonstrar como solucionar o problema usando o Editor Avançado, mesmo que seja uma alteração apenas na coluna. Mais para frente, vou explicar o porquê.
Passo a passo da Solução:
Assim que entrar no Editor Avançado, já é possível notar certos padrões:
- Ele sempre nomeia suas funções.
- No editor avançado, as primeiras funções a serem ditas começam com Table.
- Na criação de uma nova função, é preciso sempre referenciar a última função.
Com isso em mente, vamos formar a nossa função começando com:
Formatação_Data = Table.TransformColumns(“Função anterior”, "Função que vamos construir")
Ao escrever isso, aparecerá um balão, descrevendo o que é preciso colocar dentro da função Table. A informação mais importante dela é: TransfomOperations as list.
Qual o motivo da sua importância?
É bem simples, existem duas formas de criar função no Query:
- AS LIST: A as list significa que é preciso criar uma função a partir de listas, essa lista segue um padrão: {“Nome da coluna em aspas”, “função desejada”}
- AS FUNCTION: A as function significa que a função é com base nas fórmulas.
A principal diferença é: AS LIST define primeiro onde será feito e, em seguida, o que será feito; AS FUNCTION define primeiro o que será feito e dentro da fórmula será descrito onde.
Para entender, vou mostrar o exemplo de ambas:
AS LIST: Data_Formatação = Table.TransformColumns("#Promoted Headers",{" Data de Compra ",each try Date.From(_,"pt-BR) otherwise Date.From(_,"en-US")})
Perceba que antes de descrever a função, delimitei a coluna em “” e depois a ação.
AS FUNCTION: Data_Formatação = Table.AddColumns("#Promoted Headers","Data",each try Date.From([ Data de Compra ],"pt-BR") otherwise Date.From(_,"en-US"))
Note que descrevemos primeiro a função que será feita para que, a partir dela, será referenciado a tabela.
Alguns pontos relevantes:
- Each e Otherwise: Essas palavras-chaves são utilizadas para percorrer os dados de uma coluna. No exemplo é pedido que percorra e tente transformar a data em português (Each Try), se caso não funcionar transforma a data em inglês e tente de novo (Otherwise).
- Quando for referenciar a tabela dentro da função do AS LIST coloque “_”, assim ela percorrerá todos os valores da coluna referenciada.
Antes de mostrar o resultado, lembra da Coluna Personalizada? Pois bem, é possível fazer a mesma coisa nele. O exemplo do AS FUNCTION é para ser usado na coluna personalizada, desta maneira:

Não precisa colocar a função Table, pois a Coluna Personalizada edita apenas colunas e não tabelas.
Para finalizar, os resultados obtidos com ambas as resoluções é:

Conclusão Final
A partir deste breve estudo sobre a Linguagem M, compreendi que: Mais do que aprender Power Query, esse processo me mostrou que dominar a lógica por trás das ferramentas é o que realmente diferencia um usuário comum de um analista de dados. Este aprendizado me permitiu superar as barreiras da modelagem e tratamento de dados.
Por fim, espero ter esclarecido ao leitor a estrutura da Linguagem M e como solucionar problemas a utilizando.





