Referência · DAX (Power BI)
DAX: datas com EDATE, EOMONTH, DATEDIFF, DATE e WEEKDAY
As funções de data do DAX resolvem somar meses, achar o fim do mês, contar diferenças e descobrir o dia da semana, mas cada uma tem uma regra que surpreende. Os resultados abaixo foram executados no Power BI Desktop. As datas aparecem formatadas com FORMAT para o texto ficar claro.
Cada resultado desta página foi obtido executando a expressão no motor do Power BI Desktop (Analysis Services 17.0.57.16), em um Windows em português do Brasil. Um teste automático do Me Ajuda Flow confere que o texto da página é idêntico ao valor registrado. As expressões usam a sintaxe padrão do DAX (vírgula entre argumentos e ponto decimal); o editor do Power BI Desktop pode mostrar os separadores da configuração regional do Windows.
Exemplos executados
| Expressão | Resultado | Observação |
|---|---|---|
FORMAT(EDATE(DATE(2026, 1, 31), 1), "yyyy-MM-dd") | "2026-02-28" | 31/01 mais um mês cai no último dia de fevereiro, e não em março. |
FORMAT(EOMONTH(DATE(2026, 1, 31), 1), "yyyy-MM-dd") | "2026-02-28" | EOMONTH devolve o último dia do mês, um mês depois. |
DATEDIFF(DATE(2026, 1, 1), DATE(2026, 11, 2), DAY) | 305 | |
DATEDIFF(DATE(2026, 1, 31), DATE(2026, 3, 1), MONTH) | 2 | DATEDIFF conta quantas viradas de mês existem entre as datas, e não meses completos: de 31/01 a 01/03 dá 2. |
DATEDIFF(DATE(2026, 11, 2), DATE(2026, 1, 1), DAY) | -305 | Com as datas na ordem inversa, o resultado é negativo. |
WEEKDAY(DATE(2026, 11, 2)) | 2 | Por padrão, domingo é 1: segunda-feira é 2. |
WEEKDAY(DATE(2026, 11, 2), 2) | 1 | Com o tipo 2, segunda-feira é 1. |
FORMAT(DATE(2026, 14, 1), "yyyy-MM-dd") | "2027-02-01" | DATE aceita mês 14 e faz a conta: vira fevereiro do ano seguinte. |
Pegadinhas
- DATEDIFF conta limites, não períodos completos. Entre 31/01 e 01/03, a diferença em meses é 2, embora tenham passado 29 dias.
- Os argumentos de DATEDIFF vão do início ao fim. Invertidos, o resultado fica negativo.
- EDATE respeita o fim do mês. Somar um mês a 31/01 devolve 28/02. O addToTime do Power Automate também devolve 2026-02-28 nesse caso (testado em 02/11/2026).
- DATE faz a conta de estouro. Um mês 13 ou 14 avança o ano, em vez de dar erro, o que pode esconder um dado errado.
- WEEKDAY depende do tipo. Sem o segundo argumento, domingo é 1.
Quando usar
- EDATE para vencimentos mensais; EOMONTH para fechamentos de mês.
- DATEDIFF para idade, prazo e tempo de casa, sabendo que conta limites.
- WEEKDAY para separar dias úteis de fins de semana.
Perguntas frequentes
Como contar meses completos entre duas datas?
O DATEDIFF com MONTH conta limites. Para meses completos, compare também o dia do mês (ou use uma conta com ano e mês e ajuste pelo dia).
O DAX tem função de dias úteis?
Há funções de calendário para o modelo, mas a contagem de dias úteis com feriados normalmente exige uma tabela de feriados e uma medida própria.