Módulo 4: Power Query avançado e linguagem M

Aula 3 de 4

Linguagem M essencial

let/in, each, registros, listas e tabelas — o vocabulário que destrava o Power Query.

20 minutos de leitura


A estrutura let ... in

Toda consulta M é uma expressão let: uma sequência de variáveis nomeadas e, no final, o in que diz qual delas é o resultado. Não existe 'ordem de execução' obrigatória — o M resolve as dependências.

Os três tipos estruturados

TipoSintaxeAcesso
Lista{1, 2, 3} ou {"a".."z"}Lista{0} → primeiro item
Registro[ Nome = "Ana", Idade = 30 ]Registro[Nome]
Tabela#table({"A","B"}, {{1,2},{3,4}})Tabela{0}[A] → célula
Linguagem MBrincando com os três
let    Lista = {10, 20, 30, 40},    Soma = List.Sum(Lista),                 // 100    Media = List.Average(Lista),            // 25    Registro = [ Produto = "Teclado", Preco = 199.90 ],    Preco = Registro[Preco],                // 199.9    Tabela = #table(        {"Produto", "Preco"},        {{"Teclado", 199.90}, {"Mouse", 89.90}}    ),    PrimeiroProduto = Tabela{0}[Produto]    // "Teclado"in    [ Soma = Soma, Media = Media, Preco = Preco, Primeiro = PrimeiroProduto ]

each e o sublinhado

each é açúcar sintático para (_) =>. Dentro de uma transformação de tabela, _ representa a linha atual (um registro). Por isso [Coluna] funciona: é atalho para _[Coluna].

Linguagem MAs três formas equivalentes
Table.AddColumn(t, "Total", each [Qtd] * [Preco])Table.AddColumn(t, "Total", each _[Qtd] * _[Preco])Table.AddColumn(t, "Total", (linha) => linha[Qtd] * linha[Preco])

Tratamento de erro com try/otherwise

Linguagem MCapturando o motivo do erro
Table.AddColumn(    Etapa_Anterior,    "Diagnostico",    each        let tentativa = try Number.FromText([ValorTexto], "pt-BR")        in            if tentativa[HasError]            then "ERRO: " & tentativa[Error][Message]            else "OK",    type text)

Funções que você mais vai usar

  • Text: Trim, Upper, Proper, Contains, Start, End, BetweenDelimiters, PadStart, Replace.
  • Date: From, Year, Month, StartOfMonth, EndOfMonth, AddDays, AddMonths, DayOfWeek, IsInCurrentYear.
  • Number: From, Round, RoundDown, Abs, IntegerDivide, Mod.
  • List: Sum, Average, Max, Min, Count, Distinct, Select, Transform, Contains, Generate, Dates.
  • Table: SelectRows, SelectColumns, AddColumn, Group, Sort, Distinct, RemoveColumns, Buffer.

Exercício prático

Escreva, na Consulta em Branco, uma expressão M que gere uma tabela com os 12 meses de 2025, o nome do mês em português e um sinalizador de trimestre — usando apenas List.Dates, Table.FromList e Table.AddColumn.