DAX Query View — Guia de Uso

DAX

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

OndeComoRequisito
Power BI DesktopÍcone Exibição de consulta DAX na barra da esquerdaNenhum. Disponível para todos (GA) desde maio/2024
Power BI Service / FabricMenu de contexto do modelo semântico › Write DAX queries, ou o mesmo botão na página de detalhes do modeloPermissã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âmicaConecte ao modelo publicado e abra a DAX Query ViewPermissã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 Não DAX Query View

AspectoBarra de fórmulasDAX Query View
Para quêCriar medida, coluna calculada, tabela calculadaConsultar, testar, documentar e depurar
DevolveUm valor por contexto (medida) ou uma tabela no modeloUma ou mais tabelas de resultado
DEFINENãoSim: medidas, variáveis e funções da consulta
Grava no modeloSimSó 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.

DAX
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 categoria
  • DEFINE aceita MEASURE, VAR e FUNCTION. Só existe um DEFINE por consulta, antes do primeiro EVALUATE.
  • EVALUATE pode aparecer várias vezes. Cada um devolve uma tabela, e o seletor Resultado alterna entre elas.
  • ORDER BY ordena o resultado. A propriedade Classificar por coluna do modelo não vale aqui: para ordenar Mês pelo número do mês, inclua a coluna do número na consulta e use-a no ORDER BY.
  • START AT traz um valor constante para cada coluna do ORDER BY, na mesma ordem e com o mesmo tipo. Texto em coluna numérica dá erro.

Atenção 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

DAX
// 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.

DAX
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] DESC

Para 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.

DAX
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] DESC

7. 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.

DAX
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

Atenção 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.

DAX
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.

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.

ObjetoConsulta rápidaO que gera
Qualquer lugarDefine all measures in the modelTodas as medidas num DEFINE (até 500 medidas)
Qualquer lugarDefine new measureUm bloco DEFINE MEASURE vazio
TabelaShow top 100 rowsSELECTCOLUMNS com as 100 primeiras linhas e ORDER BY
Tabela / colunaShow column statisticsMínimo, máximo, média, contagem etc.
ColunaShow data previewDISTINCT dos valores
MedidaEvaluateSUMMARIZECOLUMNS pronto para você incluir colunas de agrupamento
MedidaDefine and evaluateA fórmula da medida num DEFINE, pronta para editar
MedidaDefine with references and evaluateA 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.

DAX
// 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]

Atenção 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.

DAX
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.

DAX
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 BY e 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.).
LimiteValor
Dados por consulta15 MB (a linha em andamento termina, as seguintes são cortadas)
Valores por consulta1.000.000 (ex.: 20 colunas → no máximo 50.000 linhas)
Linhas por consulta na web99.999
Define all measuresIndisponível acima de 500 medidas
EditorFica lento acima de ~500 linhas

14. Referência rápida

CláusulaSintaxeObrigatória
DEFINEDEFINE seguido de uma ou mais definiçõesNão (um por consulta)
MEASUREMEASURE Tabela[Medida] = <expressão escalar>Não
VARVAR vNome = <expressão escalar ou de tabela>Não
FUNCTIONFUNCTION Nome = ( pParam : Tipo ) => <corpo>Não
EVALUATEEVALUATE <expressão de tabela>Sim (um ou mais)
ORDER BYORDER BY <expressão> [ASC | DESC], ...Não
START ATSTART AT <valor>, ... (um por coluna do ORDER BY)Não

15. Atalhos

AtalhoAção
Shift + Alt + FFormatar a consulta
Ctrl + /Comentar ou remover o comentário
Ctrl + F / Ctrl + HLocalizar / Localizar e substituir
Ctrl + Alt + PPaleta de comandos (mostra os demais atalhos)
Ctrl + IAbrir o Copilot
Enter ou TabAceitar a sugestão do IntelliSense
EscFechar 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.

Fontes

Conhecer a trilha Power BI ao vivo