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órmula | Descrição | Exemplo de Resultado |
|---|---|---|
DateTime.LocalNow() | Data e hora atual do sistema | 06/01/2025 14:30:00 |
DateTime.Date(DateTime.LocalNow()) | Apenas a data atual | 06/01/2025 |
DateTime.Time(DateTime.LocalNow()) | Apenas a hora atual | 14:30:00 |
Date.Today() | Data de hoje (sem hora) | 06/01/2025 |
Date.Year([coluna]) | Extrai o ano | 2025 |
Date.Month([coluna]) | Extrai o mês (número) | 6 |
Date.Day([coluna]) | Extrai o dia | 15 |
Date.DayOfWeek([coluna]) | Dia da semana (0=domingo) | 2 |
Date.WeekOfYear([coluna]) | Semana do ano | 24 |
Date.StartOfMonth([coluna]) | Primeiro dia do mês | 01/06/2025 |
Date.EndOfMonth([coluna]) | Último dia do mês | 30/06/2025 |
Date.AddDays([coluna], 7) | Adiciona dias | 22/06/2025 |
Date.AddMonths([coluna], 1) | Adiciona meses | 15/07/2025 |
Date.AddYears([coluna], 1) | Adiciona anos | 15/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órmula | Descrição | Exemplo |
|---|---|---|
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 caracteres | 5 |
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ém | true/false |
Text.StartsWith([coluna], "BR") | Verifica início | true/false |
Text.EndsWith([coluna], ".csv") | Verifica fim | true/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órmula | Descrição | Exemplo |
|---|---|---|
Number.Round([coluna], 2) | Arredonda N casas | 10.57 |
Number.RoundDown([coluna], 0) | Arredonda para baixo | 10 |
Number.RoundUp([coluna], 0) | Arredonda para cima | 11 |
Number.Abs([coluna]) | Valor absoluto | 10 |
Number.Sign([coluna]) | Sinal (-1, 0, 1) | 1 |
Number.Power([coluna], 2) | Potência | 100 |
Number.Sqrt([coluna]) | Raiz quadrada | 3.16 |
Number.Mod([coluna], 2) | Resto da divisão | 0 ou 1 |
Number.IntegerDivide([coluna], 10) | Divisão inteira | 1 |
Number.From([coluna]) | Converte texto para número | 123 |
Number.FromText("123,45") | Converte texto formatado | 123.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órmula | Descriçã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órmula | Descriçã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órmula | Descriçã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órmula | Uso |
|---|---|
"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órmula | Descriçã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 M | Descrição |
|---|---|
type text | Texto |
type number | Número decimal |
Int64.Type | Inteiro |
type date | Data |
type datetime | Data e hora |
type time | Hora |
type logical | Booleano (true/false) |
type any | Qualquer tipo |
Dicas Importantes
Boas Práticas
- Sempre use
Text.Trim()em campos de texto para remover espaços - Adicione
dt_loadcomDateTime.LocalNow()para rastreabilidade - Use
try ... otherwisepara tratar erros de conversão - Prefira
??para substituição de nulos (mais legível) - 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"