Quem usa o Power Query no Excel ou no Power BI sabe que a interface visual resolve a maioria dos problemas de transformação de dados. Mas quando a interface não é suficiente, é a linguagem M que entra em cena. Aprender M abre um novo nível de possibilidades no Power Query, permitindo criar transformações personalizadas, funções reutilizáveis e automatizar tarefas complexas. Neste artigo iremos mostrar o que é a linguagem M, como lê-la e como escrever os primeiros códigos.
O que é a linguagem M?
A linguagem M (o nome oficial é Power Query Formula Language) é a linguagem de programação funcional que está por baixo de todas as transformações que você faz no editor do Power Query. Cada vez que você clica em “Remover Colunas”, “Dividir Coluna” ou “Filtrar Linhas”, o Power Query gera automaticamente o código M correspondente nos bastidores.
Você pode ver e editar esse código abrindo o Editor Avançado no Power Query. Isso permite fazer transformações que a interface visual não suporta diretamente.
Acessando o Editor Avançado
Para acessar o código M de uma consulta, abra o Power Query e vá em Exibir > Editor Avançado. Você verá o código gerado automaticamente pelas transformações que você aplicou.
A estrutura básica do código M
Todo código M tem uma estrutura padrão chamada expressão let…in:
let
Etapa1 = ...,
Etapa2 = ...,
Etapa3 = ...
in
Etapa3
O bloco let define as etapas (variáveis), e o in define qual etapa retornar como resultado final da consulta. Cada etapa usa o resultado da etapa anterior como entrada, criando uma pipeline de transformações.
Exemplo prático: importando e transformando um CSV
Veja um exemplo de código M completo para importar um arquivo CSV, remover uma coluna e filtrar linhas:
let
Fonte = Csv.Document(
File.Contents("C:\Dados\vendas.csv"),
[Delimiter=";", Encoding=1252]
),
Cabecalho = Table.PromoteHeaders(Fonte),
TiposAlterados = Table.TransformColumnTypes(Cabecalho, {
{"Data", type date},
{"Valor", type number}
}),
ColunasRemovidas = Table.RemoveColumns(TiposAlterados, {"Coluna Desnecessária"}),
FiltrarSul = Table.SelectRows(ColunasRemovidas, each [Região] = "Sul")
in
FiltrarSul
Funções M mais usadas no dia a dia
Table.SelectRows: filtrar linhas
Table.SelectRows(tabela, each [Coluna] = "Valor")
Table.SelectColumns: selecionar colunas específicas
Table.SelectColumns(tabela, {"Coluna1", "Coluna2", "Coluna3"})
Table.AddColumn: adicionar coluna calculada
Table.AddColumn(tabela, "Nova Coluna", each [Valor] * 1.1, type number)
Table.RenameColumns: renomear colunas
Table.RenameColumns(tabela, {{"NomeAntigo", "NomeNovo"}})
Table.TransformColumnTypes: mudar tipos de dados
Table.TransformColumnTypes(tabela, {{"Data", type date}, {"Valor", type number}})
Table.Group: agrupar e resumir dados
Table.Group(tabela, {"Região"}, {{"Total", each List.Sum([Valor]), type number}})
Parâmetros no Power Query
Um recurso muito útil que a linguagem M suporta é a criação de parâmetros. Com parâmetros, você pode criar consultas dinâmicas onde valores como o caminho de um arquivo ou um critério de filtro podem ser alterados facilmente sem abrir o código.
Para criar um parâmetro, vá em Página Inicial > Gerenciar Parâmetros > Novo Parâmetro e defina o nome e o valor. Depois, referencie o parâmetro no código M simplesmente usando o seu nome.
Criando funções reutilizáveis
Uma das funcionalidades mais avançadas do M é a criação de funções reutilizáveis. Uma função M é definida assim:
(parametro1 as text, parametro2 as number) =>
let
resultado = Text.Upper(parametro1) & " - " & Number.ToText(parametro2)
in
resultado
Depois de criar a função como uma consulta no Power Query, você pode chamá-la de outras consultas, passando os parâmetros necessários. Isso é extremamente útil para evitar repetição de código quando você tem várias consultas que precisam fazer a mesma transformação.
Combinando múltiplos arquivos de uma pasta
Uma das aplicações mais úteis do código M é combinar automaticamente todos os arquivos de uma pasta. Quando você usa a opção De Pasta no Power Query, ele gera um código M que cria uma função para processar cada arquivo e aplica essa função a todos os arquivos da pasta:
let
Fonte = Folder.Files("C:\Dados\Relatórios Mensais"),
ArquivosExcel = Table.SelectRows(Fonte, each [Extension] = ".xlsx"),
ImportarArquivo = (caminho as text) =>
let
Conteudo = Excel.Workbook(File.Contents(caminho)),
Planilha = Conteudo{0}[Data]
in
Planilha,
DadosCombinados = Table.AddColumn(ArquivosExcel, "Dados", each ImportarArquivo([Folder Path] & [Name])),
Expandir = Table.ExpandTableColumn(DadosCombinados, "Dados", Table.ColumnNames(DadosCombinados{0}[Dados]))
in
Expandir
Por onde aprofundar o conhecimento em M
O melhor recurso para aprender M de forma aprofundada é a documentação oficial da Microsoft, que lista todas as funções disponíveis com exemplos. Além disso, uma boa prática é sempre abrir o Editor Avançado depois de fazer transformações na interface para ver o código gerado e entender como a interface se traduz em código.
Se você curtiu esse artigo onde mostramos como usar a linguagem M do Power Query, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.