Fórmula DAX define um cálculo (medida, coluna, regra de RLS). Consulta
DAX devolve dados do modelo, como um SELECT no SQL. A DAX Query View é
o editor de consultas do Power BI: você testa medida com dado real, explora
o modelo, documenta e depura sem criar visual.
1. Onde abrir
| Onde | Como | Requisito |
|---|---|---|
| Power BI Desktop | Ícone Exibição de consulta DAX na barra da esquerda | Nenhum. Disponível para todos (GA) desde maio/2024 |
| Power BI Service / Fabric | Menu de contexto do modelo semântico › Write DAX queries, ou o mesmo botão na página de detalhes do modelo | Permissão de escrita no modelo e a opção do workspace Users can edit data models in the Power BI service ligada |
| Desktop com conexão dinâmica | Conecte ao modelo publicado e abra a DAX Query View | Permissão Build no modelo. É o caminho de quem é Viewer no workspace |
Fora do Power BI, DAX Studio (gratuito), Tabular Editor e SQL Server Management Studio também executam consultas DAX.
2. Barra de fórmulas × DAX Query View
| Aspecto | Barra de fórmulas | DAX Query View |
|---|---|---|
| Para quê | Criar medida, coluna calculada, tabela calculada | Consultar, testar, documentar e depurar |
| Devolve | Um valor por contexto (medida) ou uma tabela no modelo | Uma ou mais tabelas de resultado |
DEFINE | Não | Sim: medidas, variáveis e funções da consulta |
| Grava no modelo | Sim | Só quando você usa Update model with changes ou o CodeLens |
| A consulta fica salva | — | Sim, nas abas do arquivo (.pbix, ou pasta DAXQueries no .pbip). Na web, some ao fechar |
3. Anatomia de uma consulta
EVALUATE é obrigatório. DEFINE, ORDER BY e START AT são opcionais.
DEFINE
// Variáveis da consulta: valem para todo o bloco
VAR vDataInicio = DATE ( 2026, 1, 1 )
VAR vDataFim = DATE ( 2026, 6, 30 )
// Medida da consulta: não altera o modelo
MEASURE Vendas[Total de Vendas 1S] =
CALCULATE (
SUM ( Vendas[Valor Venda] ),
DATESBETWEEN ( 'Calendário'[Data], vDataInicio, vDataFim )
)
EVALUATE
SUMMARIZECOLUMNS (
Produto[Categoria],
"Total de Vendas 1S", [Total de Vendas 1S]
)
ORDER BY
Produto[Categoria] ASC
START AT "Eletrônicos" // começa a lista nesta categoriaDEFINEaceitaMEASURE,VAReFUNCTION. Só existe umDEFINEpor consulta, antes do primeiroEVALUATE.EVALUATEpode aparecer várias vezes. Cada um devolve uma tabela, e o seletor Resultado alterna entre elas.ORDER BYordena o resultado. A propriedade Classificar por coluna do modelo não vale aqui: para ordenarMêspelo número do mês, inclua a coluna do número na consulta e use-a noORDER BY.START ATtraz um valor constante para cada coluna doORDER BY, na mesma ordem e com o mesmo tipo. Texto em coluna numérica dá erro.
⚠️ DEFINE TABLE e DEFINE COLUMN existem na sintaxe, mas a Microsoft
avisa que são "para uso interno" e podem dar erro em tempo de execução.
Para tabela temporária, use VAR com expressão de tabela (seção 7).
4. EVALUATE: tudo que devolve tabela
// Tabela inteira do modelo
EVALUATE Produto
// Valores distintos de uma coluna
EVALUATE VALUES ( Produto[Categoria] )
// Um valor escalar vira tabela entre chaves
EVALUATE { [Total de Vendas] }
// Uma linha com várias medidas
EVALUATE
ROW (
"Total de Vendas", [Total de Vendas],
"Ticket Médio", [Ticket Médio]
)
// Top 5 produtos por venda
EVALUATE
TOPN (
5,
SUMMARIZECOLUMNS ( Produto[Produto], "Vendas", [Total de Vendas] ),
[Vendas], DESC
)
ORDER BY [Vendas] DESC💡 TOPN escolhe as linhas pela ordem do próprio argumento. O ORDER BY
só ordena o que o TOPN já devolveu.
5. DEFINE MEASURE: testar antes de publicar
A medida da consulta vive só durante a execução. Se já existir uma medida com o mesmo nome no modelo, a da consulta tem prioridade — sem alterar a do modelo.
DEFINE
MEASURE Vendas[Ticket Médio] =
DIVIDE ( SUM ( Vendas[Valor Venda] ), COUNTROWS ( Vendas ) )
MEASURE Vendas[Margem Bruta %] =
DIVIDE (
SUM ( Vendas[Valor Venda] ) - SUM ( Vendas[Custo] ),
SUM ( Vendas[Valor Venda] )
)
MEASURE Vendas[Status do Ticket] =
IF ( [Ticket Médio] >= 1500, "✔️ Acima da meta", "⚠️ Abaixo da meta" )
EVALUATE
SUMMARIZECOLUMNS (
Vendedor[Nome do Vendedor],
"Ticket Médio", [Ticket Médio],
"Margem Bruta %", [Margem Bruta %],
"Status", [Status do Ticket]
)
ORDER BY [Ticket Médio] DESCPara gravar no modelo:
- CodeLens acima de cada
MEASURE: Update model: Add new measure (medida nova) ou Update model: Overwrite measure (fórmula diferente da do modelo). - Botão Update model with changes: grava todas de uma vez.
💡 Para uma medida isolada, o padrão da casa é DEFINE MEASURE +
EVALUATE ROW ( ... ).
6. DEFINE VAR: parâmetros da consulta
Variáveis do DEFINE valem para a consulta inteira, inclusive dentro das
medidas definidas nela — diferente da VAR de uma medida, que é local à
fórmula.
DEFINE
VAR vAno = 2026
VAR vMes = 4
VAR vMeta = 50000
VAR vTopN = 5
MEASURE Vendas[Total de Vendas no Mês] =
CALCULATE (
SUM ( Vendas[Valor Venda] ),
'Calendário'[Ano] = vAno,
'Calendário'[Mês #] = vMes
)
EVALUATE
TOPN (
vTopN,
SUMMARIZECOLUMNS (
Vendedor[Nome do Vendedor],
"Vendas no Mês", [Total de Vendas no Mês],
"Atingiu a Meta", IF ( [Total de Vendas no Mês] >= vMeta, "✔️", "❗" )
),
[Vendas no Mês], DESC
)
ORDER BY [Vendas no Mês] DESC7. Tabela temporária com VAR
Uma VAR pode guardar uma tabela. Exemplo: metas digitadas na consulta,
cruzadas com a medida [Total de Vendas] do modelo para cada vendedor.
DEFINE
VAR vMetas =
DATATABLE (
"Código do Vendedor", STRING,
"Meta 2º Tri", DOUBLE,
{
{ "V-01", 45000 },
{ "V-02", 38000 },
{ "V-03", 52000 },
{ "V-04", 41000 }
}
)
// SELECTCOLUMNS com expressão quebra a linhagem da coluna do modelo.
// Sem isso, NATURALLEFTOUTERJOIN não reconhece a coluna em comum.
VAR vVendas =
SELECTCOLUMNS (
SUMMARIZECOLUMNS (
Vendedor[Código do Vendedor],
"Venda Realizada", [Total de Vendas]
),
"Código do Vendedor", Vendedor[Código do Vendedor] & "",
"Venda Realizada", [Venda Realizada]
)
EVALUATE
ADDCOLUMNS (
NATURALLEFTOUTERJOIN ( vVendas, vMetas ),
"% da Meta", DIVIDE ( [Venda Realizada], [Meta 2º Tri] )
)
ORDER BY [% da Meta] DESC⚠️ NATURALLEFTOUTERJOIN só junta colunas com mesmo nome, mesmo tipo e
mesma linhagem. Coluna do modelo e coluna de DATATABLE não têm a mesma
linhagem, por isso a conversão com & "" no exemplo.
8. DEFINE FUNCTION: funções definidas pelo usuário
As funções DAX definidas pelo usuário (UDF) estão disponíveis para todos (GA) desde junho/2026. Na consulta, você define, testa e grava no modelo como faz com medida.
DEFINE
/// Formata uma variação percentual com seta: ▲ 12,5% / ▼ 3,0%.
/// Retorna "—" quando o valor é BLANK.
FUNCTION FormatarVariacao = ( pValor : SCALAR NUMERIC ) =>
IF (
ISBLANK ( pValor ),
"—",
IF ( pValor >= 0, "▲ ", "▼ " ) & FORMAT ( ABS ( pValor ), "0.0%" )
)
EVALUATE
ROW (
"Alta", FormatarVariacao ( 0.125 ),
"Queda", FormatarVariacao ( -0.03 ),
"Sem dado", FormatarVariacao ( BLANK () )
)Depois de testar, grave no modelo com Update model with changes, como na medida.
- Tipos de parâmetro (
SCALAR,TABLE,ANYREF,MEASUREREFetc.) e modos de passagemVALeEXPR: Tipos de parâmetro em DAX UDFs. - Funções prontas e documentadas: Code Library UDF DAX.
9. Consultas rápidas e ações rápidas
Clique com o botão direito num objeto do painel Dados › Consultas rápidas. A consulta abre numa aba nova e já roda.
| Objeto | Consulta rápida | O que gera |
|---|---|---|
| Qualquer lugar | Define all measures in the model | Todas as medidas num DEFINE (até 500 medidas) |
| Qualquer lugar | Define new measure | Um bloco DEFINE MEASURE vazio |
| Tabela | Show top 100 rows | SELECTCOLUMNS com as 100 primeiras linhas e ORDER BY |
| Tabela / coluna | Show column statistics | Mínimo, máximo, média, contagem etc. |
| Coluna | Show data preview | DISTINCT dos valores |
| Medida | Evaluate | SUMMARIZECOLUMNS pronto para você incluir colunas de agrupamento |
| Medida | Define and evaluate | A fórmula da medida num DEFINE, pronta para editar |
| Medida | Define with references and evaluate | A medida e todas as medidas que ela referencia |
Ação rápida (lâmpada): num EVALUATE sem DEFINE, clique na medida
e escolha Define ou Define with references.
Fluxo completo para editar uma medida: Consultas rápidas › Evaluate → lâmpada › Define → edite e rode → CodeLens Overwrite measure.
Consulta de um visual: no modo Relatório, Otimizar › Performance Analyzer › Iniciar gravação › Atualizar visuais, expanda o visual e escolha Run in DAX query view. Serve para entender por que um visual mostra um valor inesperado.
10. Documentar o modelo com INFO.VIEW
As funções INFO.VIEW.* devolvem os metadados do modelo como tabela.
Diferente das INFO.*, elas também funcionam em tabela calculada, coluna
e medida.
// Inventário das tabelas
EVALUATE
SELECTCOLUMNS (
INFO.VIEW.TABLES (),
"Tabela", [Name],
"Armazenamento", [StorageMode],
"Oculta", [IsHidden],
"Descrição", [Description]
)
ORDER BY [Tabela]
// Dicionário de medidas
EVALUATE
SELECTCOLUMNS (
INFO.VIEW.MEASURES (),
"Medida", [Name],
"Tabela", [Table],
"Pasta", [DisplayFolder],
"Descrição", [Description],
"Fórmula", [Expression],
"Formato", [FormatString],
"Oculta", [IsHidden]
)
ORDER BY [Tabela], [Pasta], [Medida]⚠️ A coluna [Expression] só aparece para quem tem permissão de
escrita no modelo e não aparece em conexão dinâmica. As demais
colunas aparecem para todos.
11. Descrever a medida com ///
Escreva a descrição em linhas /// logo acima do MEASURE e rode Update
model with changes. A descrição vai para a propriedade Description da
medida.
DEFINE
/// Soma o valor líquido das vendas.
/// Exclui pedidos cancelados e devoluções.
/// Retorna BLANK() quando não há vendas no período filtrado.
/// Usada nos KPIs comerciais e financeiros.
MEASURE Vendas[Total de Vendas Líquidas] =
SUM ( Vendas[Valor Líquido] )
EVALUATE
ROW ( "Total de Vendas Líquidas", [Total de Vendas Líquidas] )- Onde aparece: no tooltip da medida na DAX Query View, no Model
Explorer e no painel Dados. As consultas rápidas Define… trazem a
descrição de volta como
///. - O que escrever: o que a medida calcula, regras de negócio, exceções,
quando retorna
BLANK()e onde é usada. Pense no próximo desenvolvedor e no Copilot. - O que evitar: repetir a fórmula na descrição, texto genérico ("Calcula vendas") e descrição desatualizada.
12. Depurar uma medida em etapas
Quebre a medida em medidas intermediárias e veja em qual coluna o valor começa a divergir do esperado.
DEFINE
MEASURE Vendas[Total de Vendas AV] = SUM ( Vendas[Valor Venda] )
MEASURE Vendas[Total de Vendas AV YTD] =
TOTALYTD ( [Total de Vendas AV], 'Calendário'[Data] )
MEASURE Vendas[Total de Vendas AA YTD] =
CALCULATE ( [Total de Vendas AV YTD], SAMEPERIODLASTYEAR ( 'Calendário'[Data] ) )
MEASURE Vendas[Δ% Total de Vendas YTD] =
DIVIDE ( [Total de Vendas AV YTD] - [Total de Vendas AA YTD], [Total de Vendas AA YTD] )
EVALUATE
SUMMARIZECOLUMNS (
'Calendário'[Ano],
"AV", [Total de Vendas AV],
"AV YTD", [Total de Vendas AV YTD],
"AA YTD", [Total de Vendas AA YTD],
"Δ% YTD", [Δ% Total de Vendas YTD]
)
ORDER BY 'Calendário'[Ano]Erro na grade de resultados: a mensagem começa com a posição, por
exemplo Query (4, 23) = linha 4, caractere 23. O botão de copiar leva o
erro para a área de transferência.
13. Grade de resultados e limites
- Ordenar e filtrar direto no cabeçalho da grade (GA em junho/2026).
Vale só para as linhas já devolvidas: se o resultado foi cortado, ponha o
ORDER BYe o filtro na própria consulta. - Copiar leva a grade inteira, com cabeçalho, separada por tabulação.
- A grade ignora o formato da coluna ou medida (moeda, milhar etc.).
| Limite | Valor |
|---|---|
| Dados por consulta | 15 MB (a linha em andamento termina, as seguintes são cortadas) |
| Valores por consulta | 1.000.000 (ex.: 20 colunas → no máximo 50.000 linhas) |
| Linhas por consulta na web | 99.999 |
| Define all measures | Indisponível acima de 500 medidas |
| Editor | Fica lento acima de ~500 linhas |
14. Referência rápida
| Cláusula | Sintaxe | Obrigatória |
|---|---|---|
DEFINE | DEFINE seguido de uma ou mais definições | Não (um por consulta) |
MEASURE | MEASURE Tabela[Medida] = <expressão escalar> | Não |
VAR | VAR vNome = <expressão escalar ou de tabela> | Não |
FUNCTION | FUNCTION Nome = ( pParam : Tipo ) => <corpo> | Não |
EVALUATE | EVALUATE <expressão de tabela> | Sim (um ou mais) |
ORDER BY | ORDER BY <expressão> [ASC | DESC], ... | Não |
START AT | START AT <valor>, ... (um por coluna do ORDER BY) | Não |
15. Atalhos
| Atalho | Ação |
|---|---|
Shift + Alt + F | Formatar a consulta |
Ctrl + / | Comentar ou remover o comentário |
Ctrl + F / Ctrl + H | Localizar / Localizar e substituir |
Ctrl + Alt + P | Paleta de comandos (mostra os demais atalhos) |
Ctrl + I | Abrir o Copilot |
Enter ou Tab | Aceitar a sugestão do IntelliSense |
Esc | Fechar sugestões |
Para executar, use o botão Executar (roda a consulta inteira ou só as linhas selecionadas). A lista completa está em Atalhos do Power BI.