Os códigos abaixo seguem a convenção real do DAX (Visual Basic / OLE Automation), e não a do .NET/Excel: em DAX, M/MM não significam mês, m/mm não significam minuto, e y mostra o dia do ano (1–366), não o ano. Essa troca é o erro mais fácil de cometer por reflexo para quem vem do Excel, do C# ou da propriedade "Formato" do Power BI Desktop — a armadilha das duas sintaxes está detalhada na seção 4, e a tabela corrigida, na seção 3. A referência vale especialmente para o argumento format_string da função FORMAT.
1. Por que isso importa
A função FORMAT() do DAX usa uma sintaxe de formato baseada em
Visual Basic (OLE Automation) — não na sintaxe do .NET Framework
que a maioria das pessoas conhece do Excel, C# ou da própria propriedade
"Formato" da interface do Power BI Desktop (coluna/medida). A
documentação oficial é explícita sobre isso: "The format strings
supported as an argument to the DAX FORMAT function are based on the
format strings used by Visual Basic (OLE Automation), not on the format
strings used by the .NET Framework."
Isso cria uma armadilha real: existem duas sintaxes de formato
coexistindo no Power BI, uma do lado da interface (estilo .NET) e
outra do lado da função FORMAT() (estilo VB) — fácil de confundir
porque as duas aparecem lado a lado o tempo todo.
2. Códigos corretos — dia, mês, semana, trimestre
| Código | Exibe | Exemplo (25/06/2020) |
|---|---|---|
d | Dia sem zero à esquerda (1-31) | 25 |
dd | Dia com zero à esquerda (01-31) | 25 |
ddd | Abreviação do dia da semana (localizado) | Qui |
dddd | Nome completo do dia da semana (localizado) | Quinta-feira |
ddddd | Data completa no formato curto do sistema | 25/06/2020 |
dddddd | Data completa no formato longo do sistema | Quinta-feira, 25 de Junho de 2020 |
w | Dia da semana como número (1=domingo a 7=sábado) | 5 |
ww | Semana do ano como número (1-54) | 26 |
m | Mês sem zero à esquerda (1-12) — vira minuto só se vier logo depois de h/hh | 6 |
mm | Mês com zero à esquerda (01-12) — mesma regra de contexto acima | 06 |
mmm | Abreviação do mês (localizado) | Jun |
mmmm | Nome completo do mês (localizado) | Junho |
q | Trimestre do ano (1-4) | 2 |
3. Códigos corretos — ano
| Código | Exibe | Exemplo (25/06/2020) |
|---|---|---|
y | Dia do ano (1-366) — não é ano! | 177 |
yy | Ano com 2 dígitos (00-99) | 20 |
yyyy | Ano com 4 dígitos (0100-9999) | 2020 |
Correção aplicada: o livro-fonte atribuía a
yo significado de "último dígito do ano" e ayy"dois últimos dígitos do ano" — nenhum dos dois bate com o comportamento real.ysozinho mostra o dia do ano (conceito de calendário juliano/ordinal), não tem relação nenhuma com ano. Quem precisa do ano de 2 dígitos usayy; quem precisa dos 4 dígitos usayyyy—yisolado praticamente nunca é o que se quer para mostrar ano.
4. Códigos corretos — hora, minuto, segundo
| Código | Exibe | Exemplo (13:23:45) |
|---|---|---|
h | Hora sem zero à esquerda, 0-23 | 13 |
hh | Hora com zero à esquerda, 0-23 | 13 |
n | Minuto sem zero à esquerda (0-59) — não é m! | 23 |
nn | Minuto com zero à esquerda (00-59) | 23 |
s | Segundo sem zero à esquerda (0-59) | 45 |
ss | Segundo com zero à esquerda (00-59) | 45 |
ttttt | Hora completa (h:mm:ss) no formato do sistema | 13:23:45 |
AM/PM, am/pm, A/P, a/p | Indicador de 12h, várias capitalizações | PM / pm / P / p |
Correção aplicada: o livro-fonte usava
m/mmpara minuto — isso é o padrão do .NET/Excel, não do DAX. NoFORMAT()do DAX, minuto én/nn. Usarmmonde se queria minuto na verdade produz mês.
5. A armadilha das duas sintaxes — resumo
| Onde | Convenção | Mês | Minuto |
|---|---|---|---|
| Propriedade "Formato" da UI (coluna/medida) | .NET | M/MM (maiúsculo) | m/mm (minúsculo) |
FORMAT(valor, format_string) — função DAX | VB/OLE Automation | m/mm (sempre minúsculo) | n/nn |
A regra prática: se o código está dentro dos parênteses de
FORMAT(), é sintaxe VB — mês e minuto não se distinguem por
maiúscula/minúscula, e minuto usa n, não m.
6. Exemplos completos corrigidos (locale pt-BR)
| Expressão DAX | Resultado para 26/05/2025 14:07:03 |
|---|---|
FORMAT([Data], "dd/mm/yyyy", "pt-BR") | 26/05/2025 |
FORMAT([Data], "dddd, dd 'de' mmmm 'de' yyyy", "pt-BR") | terça-feira, 26 de maio de 2025 |
FORMAT([Data], "mmm/yyyy", "pt-BR") | mai/2025 |
FORMAT([Data], "hh:nn:ss", "pt-BR") | 14:07:03 |
FORMAT([Data], "dd/mm/yyyy hh:nn", "pt-BR") | 26/05/2025 14:07 |
FORMAT([Data], "yyyy-mm-dd", "pt-BR") | 2025-05-26 (padrão ISO) |
Nota: o texto literal
'de'continua precisando de aspas simples para não ser interpretado como código de formato — isso já estava correto no livro-fonte e não mudou.
Nota de validação
Todos os códigos desta página foram confirmados contra
learn.microsoft.com/en-us/dax/format-function-dax em 2026-08-06 —
tabela oficial "Custom date/time formats", incluindo os exemplos
comparativos en-US/de-DE que a própria Microsoft usa para demonstrar o
comportamento. A tabela original do livro-fonte tinha 2 erros
sistemáticos (mês/minuto trocados, ano/dia-do-ano trocados) que se
propagavam por toda a seção de exemplos — todos corrigidos aqui.