Skip to main content

Fórmulas M - Power Query

Referência rápida das fórmulas M mais utilizadas no Dataflow Gen2. Use esta página como guia durante a criação de transformações.


Data e Hora

FórmulaDescriçãoExemplo de Resultado
DateTime.LocalNow()Data e hora atual do sistema06/01/2025 14:30:00
DateTime.Date(DateTime.LocalNow())Apenas a data atual06/01/2025
DateTime.Time(DateTime.LocalNow())Apenas a hora atual14:30:00
Date.Today()Data de hoje (sem hora)06/01/2025
Date.Year([coluna])Extrai o ano2025
Date.Month([coluna])Extrai o mês (número)6
Date.Day([coluna])Extrai o dia15
Date.DayOfWeek([coluna])Dia da semana (0=domingo)2
Date.WeekOfYear([coluna])Semana do ano24
Date.StartOfMonth([coluna])Primeiro dia do mês01/06/2025
Date.EndOfMonth([coluna])Último dia do mês30/06/2025
Date.AddDays([coluna], 7)Adiciona dias22/06/2025
Date.AddMonths([coluna], 1)Adiciona meses15/07/2025
Date.AddYears([coluna], 1)Adiciona anos15/06/2026

Exemplos Práticos

Coluna de carga com timestamp:

DateTime.LocalNow()

Extrair ano-mês para particionamento:

Date.ToText([dt_rate], "yyyy-MM")

Calcular diferença em dias:

Duration.Days(Date.Today() - [dt_rate])

Texto

FórmulaDescriçãoExemplo
Text.Upper([coluna])Converte para maiúsculas"TEXTO"
Text.Lower([coluna])Converte para minúsculas"texto"
Text.Proper([coluna])Primeira letra maiúscula"Texto"
Text.Trim([coluna])Remove espaços início/fim"texto"
Text.Clean([coluna])Remove caracteres não imprimíveis"texto"
Text.Length([coluna])Quantidade de caracteres5
Text.Start([coluna], 3)Primeiros N caracteres"tex"
Text.End([coluna], 2)Últimos N caracteres"to"
Text.Middle([coluna], 1, 3)Substring (início, qtd)"ext"
Text.Replace([coluna], "a", "b")Substituir texto"texto""textb"
Text.Remove([coluna], {".", "-"})Remove caracteres específicos"12345"
Text.Combine({[col1], [col2]}, "_")Concatena com separador"A_B"
Text.Contains([coluna], "abc")Verifica se contémtrue/false
Text.StartsWith([coluna], "BR")Verifica iníciotrue/false
Text.EndsWith([coluna], ".csv")Verifica fimtrue/false

Exemplos Práticos

Padronizar código de filial:

Text.PadStart(Text.From([cd_filial]), 4, "0")

Limpar e padronizar nome:

Text.Proper(Text.Trim(Text.Clean([nm_cliente])))

Extrair código do produto (primeiros 6 caracteres):

Text.Start([cd_produto], 6)

Números

FórmulaDescriçãoExemplo
Number.Round([coluna], 2)Arredonda N casas10.57
Number.RoundDown([coluna], 0)Arredonda para baixo10
Number.RoundUp([coluna], 0)Arredonda para cima11
Number.Abs([coluna])Valor absoluto10
Number.Sign([coluna])Sinal (-1, 0, 1)1
Number.Power([coluna], 2)Potência100
Number.Sqrt([coluna])Raiz quadrada3.16
Number.Mod([coluna], 2)Resto da divisão0 ou 1
Number.IntegerDivide([coluna], 10)Divisão inteira1
Number.From([coluna])Converte texto para número123
Number.FromText("123,45")Converte texto formatado123.45

Exemplos Práticos

Arredondar valor monetário:

Number.Round([vl_rate], 4)

Calcular percentual:

Number.Round([vl_parcial] / [vl_total] * 100, 2)

Conversão de Tipos

FórmulaDescrição
Text.From([coluna])Qualquer tipo → Texto
Number.From([coluna])Texto/Data → Número
Int64.From([coluna])Converte para inteiro
Date.From([coluna])Texto/DateTime → Data
DateTime.From([coluna])Texto/Data → DateTime
Time.From([coluna])Texto/DateTime → Hora
Logical.From([coluna])Converte para booleano

Exemplos Práticos

Converter texto para data (formato brasileiro):

Date.From(
Text.Middle([dt_texto], 6, 4) & "-" &
Text.Middle([dt_texto], 3, 2) & "-" &
Text.Start([dt_texto], 2)
)

Garantir tipo numérico:

try Number.From([vl_campo]) otherwise 0

Condicionais

FórmulaDescrição
if [coluna] > 10 then "Alto" else "Baixo"Condição simples
if [coluna] = null then "N/A" else [coluna]Tratar nulo
try [coluna] otherwise "Erro"Tratar erro

Exemplos Práticos

Classificar valor:

if [vl_rate] > 5.50 then "Alto" 
else if [vl_rate] > 5.00 then "Médio"
else "Baixo"

Substituir nulo por valor padrão:

if [ds_observacao] = null then "Sem observação" else [ds_observacao]

Tratar erro de conversão:

try Number.From([vl_campo]) otherwise null

Validar campo obrigatório:

if [cd_cliente] = null or Text.Trim([cd_cliente]) = "" then "INVÁLIDO" else [cd_cliente]

Listas e Tabelas

FórmulaDescrição
Table.RowCount(tabela)Conta linhas
Table.ColumnNames(tabela)Lista nomes das colunas
Table.AddColumn(tabela, "nova", each [col1] + [col2])Adiciona coluna
Table.RemoveColumns(tabela, {"col1", "col2"})Remove colunas
Table.RenameColumns(tabela, {{"antigo", "novo"}})Renomeia coluna
Table.SelectRows(tabela, each [col] > 10)Filtra linhas
Table.Sort(tabela, {{"col", Order.Descending}})Ordena
Table.Distinct(tabela)Remove duplicados
Table.Group(tabela, {"col"}, {{"soma", each List.Sum([vl]), type number}})Agrupa
List.Sum({1, 2, 3})Soma lista
List.Average({1, 2, 3})Média lista
List.Max({1, 2, 3})Máximo lista
List.Min({1, 2, 3})Mínimo lista
List.Count({1, 2, 3})Conta itens
List.Distinct({1, 1, 2})Remove duplicados

Valores Fixos (Metadados)

Use para adicionar colunas de controle e rastreabilidade.

FórmulaUso
"NOME_FONTE"Identificar origem dos dados
"USD"Código de moeda fixo
DateTime.LocalNow()Timestamp de carga
"bronze"Identificar camada

Exemplo Completo de Metadados

// ds_source
"BCB_SGS_10813"

// ds_currency_from
"USD"

// ds_currency_to
"BRL"

// ds_layer
"bronze"

// dt_load
DateTime.LocalNow()

Tratamento de Nulos

FórmulaDescrição
[coluna] ?? "default"Substitui nulo por valor
if [coluna] = null then 0 else [coluna]Condição explícita
Replacer.ReplaceValue(tabela, null, 0)Substituir em toda tabela
Table.SelectRows(tabela, each [coluna] <> null)Remover linhas nulas

Exemplos Práticos

Substituir nulo por zero:

[vl_campo] ?? 0

Substituir nulo por texto:

[ds_campo] ?? "Não informado"

Remover linhas onde data é nula:

Table.SelectRows(tabela, each [dt_rate] <> null)

Funções Úteis para ETL

Remover Linhas Vazias

Table.SelectRows(
tabela,
each [dt_rate] <> null and [dt_rate] <> ""
)

Promover Primeira Linha como Cabeçalho

Table.PromoteHeaders(tabela, [PromoteAllScalars=true])

Remover Primeiras N Linhas

Table.Skip(tabela, 3)

Manter Apenas Colunas Específicas

Table.SelectColumns(tabela, {"col1", "col2", "col3"})

Reordenar Colunas

Table.ReorderColumns(tabela, {"col1", "col2", "col3"})

Alterar Tipo de Múltiplas Colunas

Table.TransformColumnTypes(
tabela,
{
{"dt_rate", type date},
{"vl_rate", type number},
{"ds_source", type text}
}
)

Referência Rápida - Tipos

Tipo MDescrição
type textTexto
type numberNúmero decimal
Int64.TypeInteiro
type dateData
type datetimeData e hora
type timeHora
type logicalBooleano (true/false)
type anyQualquer tipo

Dicas Importantes

Boas Práticas
  1. Sempre use Text.Trim() em campos de texto para remover espaços
  2. Adicione dt_load com DateTime.LocalNow() para rastreabilidade
  3. Use try ... otherwise para tratar erros de conversão
  4. Prefira ?? para substituição de nulos (mais legível)
  5. Teste as fórmulas na interface antes de publicar o Dataflow
Atenção
  • Fórmulas M são case-sensitive: DateTime.LocalNow() funciona, datetime.localnow() não
  • O separador decimal no M é ponto (.), não vírgula
  • Strings devem estar entre aspas duplas ("texto")
  • Nomes de colunas com espaços devem estar entre #"Nome da Coluna"