Consultas do DAX

Clientes de relatórios como o Power BI e o Excel executam consultas DAX sempre que um campo é colocado em um relatório ou quando um filtro é aplicado. Usando SQL Server Management Studio (SSMS), Power BI Report Builder e ferramentas de código aberto, como o DAX Studio, você pode criar e executar suas próprias consultas DAX. As consultas DAX retornam resultados como uma tabela diretamente dentro da ferramenta, permitindo que você crie e teste rapidamente o desempenho de suas fórmulas DAX.

Antes de aprender sobre as consultas, é importante que você tenha uma compreensão sólida das noções básicas do DAX. Se ainda não fez isto, certifique-se de conferir a Visão geral do DAX.

Palavras-chave

As consultas DAX têm uma sintaxe simples composta por apenas uma palavra-chave necessária, EVALUATE, e várias palavras-chave opcionais: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE e COLUMN. Cada palavra-chave define uma instrução usada durante a consulta.

EVALUATE (obrigatório)

No nível mais básico, uma consulta DAX é uma instrução EVALUATE que contém uma expressão de tabela. Pelo menos uma instrução EVALUATE é necessária, entretanto, uma consulta pode conter qualquer número de instruções EVALUATE.

Sintaxe EVALUATE

EVALUATE <table>  

Parâmetros EVALUATE

Termo Definição
tabela Uma expressão de tabela.

Exemplo de EVALUATE

EVALUATE
    'Internet Sales'

Retorna todas as linhas e colunas da tabela Vendas pela Internet como uma tabela.

Instrução Evaluate DAX

ORDER BY (opcional)

A palavra-chave opcional ORDER BY define uma ou mais expressões usadas para classificar os resultados da consulta. Qualquer expressão que possa ser avaliada para cada linha do resultado é válida.

Sintaxe ORDER BY

EVALUATE <table>  
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]  

Parâmetros ORDER BY

Termo Definição
expressão Qualquer expressão DAX que retorne um único valor escalar.
ASC (padrão) Ordem de classificação crescente.
DESC Ordem de classificação decrescente.

Exemplo de ORDER BY

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Order Date]

Retorna todas as linhas e colunas da tabela Vendas pela Internet, em ordem crescente por Data do Pedido, como uma tabela.

Instrução DAX Evaluate order by

START AT (opcional)

A palavra-chave opcional START AT é usada dentro de uma cláusula ORDER BY. Ela define o valor no qual os resultados da consulta começam.

Sintaxe START AT

EVALUATE <table>  
[ORDER BY {<expression> [{ASC | DESC}]}[, …]  
[START AT {<value>|<parameter>} [, …]]]

Parâmetros START AT

Termo Definição
valor Um valor constante. Não pode ser uma expressão.
parâmetro O nome de um parâmetro em uma instrução XMLA prefixada com um caractere @.

Comentários START AT

Os argumentos START AT têm uma correspondência de um para um com as colunas na cláusula ORDER BY. Pode haver tantos argumentos na cláusula START AT quanto na cláusula ORDER BY, mas não mais. O primeiro argumento no início em define o valor inicial na coluna 1 das colunas ORDER BY. O segundo argumento no início define o valor inicial na coluna 2 das colunas ORDER BY dentro das linhas que atendem ao primeiro valor para a coluna 1.

Exemplo de START AT

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Sales Order Number]
START AT "SO7000"

Retorna todas as linhas e colunas da tabela Vendas pela Internet, em ordem crescente por Número do Pedido de Vendas, começando em SO7000.

Instrução DAX Evaluate order by de número de pedidos de vendas

DEFINE (opcional)

A palavra-chave DEFINE opcional apresenta uma ou mais definições de entidade calculadas que existem apenas enquanto durar a consulta. As definições precedem a instrução EVALUATE e são válidas para todas as instruções EVALUATE na consulta. As definições podem ser variáveis, medidas, tabelas1 e colunas1. As definições podem fazer referência a outras definições que aparecem antes ou depois da definição atual. Pelo menos uma definição será necessária se a palavra-chave DEFINE estiver incluída em uma consulta.

Sintaxe DEFINE

[DEFINE 
    (
     (MEASURE <table name>[<measure name>] = <scalar expression>) | 
     (VAR <var name> = <table or scalar expression>) |
     (TABLE <table name> = <table expression>) | 
     (COLUMN <table name>[<column name>] = <scalar expression>) | 
    ) + 
]

(EVALUATE <table expression>) +

Parâmetros DEFINE

Termo Definição
Entidade MEASURE, VAR, TABLE1 ou COLUMN1.
name O nome de uma medida, var, tabela ou definição de coluna. Não pode ser uma expressão. O nome não precisa ser exclusivo. O nome existe apenas durante a consulta.
expressão Qualquer expressão DAX que retorna um valor de tabela ou escalar. A expressão pode usar qualquer uma das entidades definidas. Se houver a necessidade de converter uma expressão escalar em uma expressão de tabela, encapsule a expressão dentro de um construtor de tabela com chaves {} ou use a função ROW() para retornar uma única tabela de linhas.

[1]Cuidado: as definições TABLE e COLUMN com escopo de consulta são destinadas apenas para uso interno. Embora você possa definir expressões TABLE e COLUMN para uma consulta sem erro de sintaxe, elas podem produzir erros de runtime e não são recomendadas.

Comentários DEFINE

  • Uma consulta DAX pode ter várias instruções EVALUATE, mas pode ter apenas uma instrução DEFINE. As definições na instrução DEFINE podem ser aplicadas a qualquer instrução EVALUATE na consulta.

  • Pelo menos uma definição é necessária em uma instrução DEFINE.

  • As definições de medida para uma consulta substituem as medidas de modelo que têm o mesmo nome, mas que são usadas apenas dentro da consulta. Elas não afetarão a medida de modelo.

  • Os nomes do VAR têm restrições exclusivas. Para saber mais, consulte VAR – Parâmetros.

Exemplo de DEFINE

DEFINE
    MEASURE 'Internet Sales'[Internet Total Sales] =
        SUM ( 'Internet Sales'[Sales Amount] )

EVALUATE
SUMMARIZECOLUMNS (
    'Date'[Calendar Year],
    TREATAS (
        {
            2013,
            2014
        },
        'Date'[Calendar Year]
    ),
    "Total Sales", [Internet Total Sales],
    "Combined Years Total Sales",
        CALCULATE (
            [Internet Total Sales],
            ALLSELECTED ( 'Date'[Calendar Year] )
        )
)
ORDER BY [Calendar Year]

Retorna o total de vendas calculadas para os anos 2013 e 2014 e o total de vendas calculadas combinadas para os anos 2013 e 2014, como uma tabela. A medida na instrução DEFINE, Total de Vendas pela Internet, é usada nas expressões Total de Vendas e Total de Vendas de Anos Combinados.

DAX Evaluate com definição de medida

Parâmetros em consultas DAX

Uma instrução de consulta DAX bem definida pode ser parametrizada e usada repetidamente apenas com alterações nos valores de parâmetro.

O método Execute Method (XMLA) tem um elemento de coleção Elemento de Parâmetros (XMLA) que permite definir parâmetros e atribuir um valor. Na coleção, cada elemento do Elemento de Parâmetro (XMLA) define o nome do parâmetro e um valor para ele.

Faça referência a parâmetros XMLA prefixando o nome do parâmetro com um caractere @. Em qualquer lugar na sintaxe em que um valor é permitido, esse valor pode ser substituído por uma chamada de parâmetro. Todos os parâmetros XMLA são digitados como texto.

Importante

Os parâmetros definidos na seção de parâmetros e não usados no elemento <STATEMENT> geram uma resposta de erro no XMLA. Os parâmetros usados e não definidos no elemento <Parameters> geram uma resposta de erro no XMLA.

Instruções DAX
SUMMARIZECOLUMNS
TREATAS
FILTER