Consultas DAX
Clientes de relatórios como o Power BI e o Excel executam consultas DAX sempre que os visuais são exibidos em um relatório ou um campo adicionado a uma tabela e essas consultas DAX são ajustadas quando um filtro é aplicado. O Performance Analyzer no Power BI Desktop pode mostrar essas consultas DAX e até mesmo executá-las na exibição de consulta do DAX.
Usando a exibição de consulta do DAX no Power BI Desktop ou escrevendo as consultas do DAX no serviço do Power BI, você pode criar e executar suas consultas DAX. Com o Microsoft Fabric, você pode aumentar ainda mais sua produtividade com Copilot para escrever consultas DAX na exibição de consulta do DAX do Desktop ou da Web. Além das ferramentas do Power BI, as consultas DAX podem ser executadas em notebooks do Fabric usando o link semântico para ler dados de modelos semânticos com Python e com a API REST Executar Consultas, também disponível no Power Automate. Outras ferramentas, como SSMS (SQL Server Management Studio), do Construtor de Relatórios do Power BI e ferramentas de software livre, como DAX Studio, também permitem criar e executar consultas DAX.
As consultas DAX retornam resultados como uma tabela diretamente na ferramenta, permitindo que você crie e teste rapidamente o desempenho de suas fórmulas DAX em medidas ou simplesmente exiba os dados em seu modelo semântico. As funções INFO e INFO.VIEW do DAX também podem obter informações sobre seu modelo semântico, como uma lista de tabelas, colunas, medidas e muito mais.
Antes de aprender sobre consultas, é importante que você tenha uma boa compreensão dos conceitos básicos do DAX. Caso ainda não tenha feito isso, confira a Visão geral do DAX.
Palavras-chave
DAX consultas têm uma sintaxe simples composta por apenas uma palavra-chave necessária, EVALUATE. EVALUATE é seguido por uma expressão de tabela, como uma função DAX ou um nome de tabela, que, quando executada, gera uma tabela de resultados. As expressões de tabela que geram uma tabela de resultados incluem:
- Funções DAX comuns que geram uma tabela, como SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEe muitas outras, funcionam com EVALUATE para gerar uma tabela de resultados.
- Tabelas no modelo quando referenciadas por nome funcionam com EVALUATE para gerar uma tabela de resultados mostrando os dados na tabela. Por exemplo, EVALUATE 'Nome da tabela' pode ser executado como uma consulta DAX.
- As medidas no modelo ou em qualquer fórmula DAX que retornam um valor escalar funcionam com o EVALUATE para exibir o valor como uma tabela de resultados quando estiver entre chaves. Por exemplo, EVALUATE {[Total de Vendas]} ou EVALUATE {COUNTROWS('Vendas')} podem ser executados como uma consulta DAX. Eles são chamados de construtores de tabela.
Há várias palavras-chave opcionais específicas para consultas DAX: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE e COLUMN.
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, no entanto, uma consulta pode conter qualquer número de instruções EVALUATE.
Sintaxe EVALUATE
EVALUATE <table>
Parâmetros de EVALUATE
Prazo | Definição |
---|---|
table |
Uma expressão de tabela. |
Exemplo de EVALUATE
EVALUATE
'Sales Order'
Retorna todas as linhas e colunas da tabela Sales Order, como uma tabela de resultados. Isso pode ser limitado com o uso de TOPN ou FILTER e classificado com ORDER BY.
ORDER BY (opcional)
A palavra-chave ORDER BY
opcional define uma ou mais colunas na consulta ou expressões usadas para classificar os resultados da consulta. Qualquer expressão que possa ser avaliada para cada linha do resultado é válida. Qualquer coluna na consulta em si também é válida.
A propriedade Classificar por coluna em modelos semânticos não se aplica aos resultados da consulta DAX. Se uma coluna deve ser classificada por uma coluna diferente no modelo, como no caso do Nome do Mês, a classificação por coluna também deverá ser incluída na consulta DAX a ser usada no ORDER BY.
Sintaxe ORDER BY
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
Parâmetros de ORDER BY
Prazo | Definição |
---|---|
expression |
Qualquer expressão DAX que retorna um único valor escalar ou coluna incluída na consulta DAX. |
ASC |
(padrão) Ordem de classificação crescente. |
DESC |
Ordem de classificação decrescente. |
Exemplo de ORDER BY
EVALUATE
SUMMARIZECOLUMNS(
// Group by columns
'Date'[Month Name],
'Date'[Month of Year],
'Product'[Category],
// Optional filters
FILTER(
VALUES('Product'[Category]),
[Category] = "Clothing"
),
// Measures or explicit DAX formulas to aggregate and analyze the data by row
"Orders", [Orders],
"Avg Profit per Order", DIVIDE(
[Total Sales Profit],
[Orders]
)
)
// DAX queries do not use sort order defined in Power BI,
// sort by columns must be included in the DAX query to be used in order by
ORDER BY 'Date'[Month of Year] ASC
Retorna pedidos de roupas e lucro médio por pedido por mês, em ordem crescente por mês, como uma tabela de resultados.
TOPN não escolhe o número especificado de linhas a serem retornadas com base na ordem de classificação especificada em ORDER BY. Em vez disso, TOPN tem sua própria sintaxe para especificar opcionalmente uma classificação antes que as 100 principais linhas sejam retornadas. ORDER BY apenas classifica a tabela de resultados retornada por TOPN.
EVALUATE
TOPN(
100,
'Sales Order',
// The way the data is sorted before the top 100 rows are selected
'Sales Order'[SalesOrderLineKey], ASC
)
// The way the data is sorted for the results
ORDER BY
'Sales Order'[Sales Order] ASC,
'Sales Order'[Sales Order Line] ASC
Retorna os 100 principais pedidos de vendas classificados por SalesOrderLienKey em ordem crescente e, em seguida, classifica os resultados primeiro por ordem de vendas e, em seguida, pela linha de pedidos de vendas.
START AT (opcional)
A palavra-chave START AT
opcional é usada dentro de uma cláusula ORDER BY
. Ele 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 de START AT
Prazo | Definição |
---|---|
value |
Um valor constante. Não pode ser uma expressão. |
parameter |
O nome de um parâmetro em uma instrução XMLA prefixada com um caractere @ . |
Comentários sobre o START AT
Os argumentos START AT têm uma correspondência um a 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 START AT define o valor inicial na coluna 1 das colunas ORDER BY. O segundo argumento no START AT define o valor inicial na coluna 2 das colunas ORDER BY nas linhas que correspondem ao primeiro valor da coluna 1.
Exemplo de START AT
EVALUATE
'Sales Order'
ORDER BY 'Sales Order'[Sales Order] ASC
// Start at this order, orders before this order will not be displayed
START AT "SO43661"
Retorna todas as colunas da tabela Pedidos de Vendas, em ordem crescente por Ordem de Vendas, começando em SO43661. As linhas antes dessa ordem de vendas não são incluídas na tabela de resultados.
DEFINE (opcional)
A palavra-chave DEFINE
opcional apresenta uma ou mais definições de entidade calculadas que existem apenas durante a consulta. Ao contrário de EVALUATE
, só pode haver um bloco DEFINE
com uma ou mais definições em uma consulta DAX. DEFINE
deve preceder a primeira instrução EVALUATE
e são válidas para todas as instruções EVALUATE na consulta. As definições podem ser variáveis, medidas, tabelas1e colunas1. As definições podem referenciar 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
for incluída em uma consulta.
DEFINE MEASURE
é um cenário comum para criar novas medidas ou editar medidas existentes em um modelo semântico. Quando a medida já existir no modelo, a consulta DAX usará a fórmula definida na consulta DAX. Isso é útil para testar medidas com uma consulta DAX antes de atualizar o modelo.
DEFINE MEASURE
também é útil para criar análises adicionais com fórmulas DAX para uma consulta DAX específica em que talvez você não tenha permissão para adicionar uma medida de modelo ou não é necessário tê-la no modelo.
Sintaxe DEFINE
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <virtual table definition>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
Parâmetros de DEFINE
Prazo | Definição |
---|---|
Entity |
MEASURE, VAR, TABLE1ou COLUMN1. |
name |
O nome de uma definição de medida, variável, tabela ou coluna. Não pode ser uma expressão. O nome não precisa ser exclusivo. O nome existe somente durante a consulta. |
expression |
Qualquer expressão DAX que retorna uma tabela ou valor 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 tabela com uma linha. |
[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 sobre o 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 é exigida em uma instrução DEFINE.
As definições de medida para uma consulta substituem medidas de modelo com o mesmo nome, mas são usadas apenas na consulta. Elas não afetarão a medida do modelo.
Os nomes VAR têm restrições exclusivas. Para saber mais, consulte VAR - Parâmetros.
Exemplo de DEFINE
DEFINE
VAR _firstyear = MIN('Date'[Fiscal Year])
VAR _lastyear = MAX('Date'[Fiscal Year])
TABLE 'Unbought products' = FILTER('Product', [Orders] + 0 = 0)
COLUMN 'Unbought products'[Year Range] = _firstyear & " - " & _lastyear
MEASURE 'Unbought products'[Unbought products] = COUNTROWS('Unbought products')
EVALUATE
'Unbought products'
EVALUATE
{[Unbought products]}
Retorna a tabela definida na consulta DAX para mostrar produtos não comprados, com uma coluna adicional definida que referencia variáveis definidas. Uma medida também é definida e avaliada para contar as linhas de produtos não comprados.
DEFINE
MEASURE 'Pick a sales measure'[Orders] = DISTINCTCOUNT('Sales Order'[Sales Order])
MEASURE 'Pick a sales measure'[Customers] = CALCULATE(
COUNTROWS(Customer),
FILTER(
'Sales',
[Orders] > 0
)
)
MEASURE 'Pick a sales measure'[Orders per Customer] = DIVIDE(
[Orders],
[Customers],
0
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Fiscal Year],
"Orders", [Orders],
"Customers", [Customers],
"Orders per Customer", [Orders per Customer]
)
Retorna uma tabela avaliando três medidas definidas para mostrar os resultados por ano fiscal. Todas as medidas também existem no modelo e pedidos por cliente são modificados na consulta DAX.
Parâmetros em consultas DAX
Uma instrução de consulta DAX bem definida pode ser parametrizada e usada várias vez com apenas alterações nos valores de parâmetro.
O método Execute Method (XMLA) tem um elemento de coleção Parameters Element (XMLA) que permite que os parâmetros sejam definidos e atribuídos a um valor. Dentro da coleção, cada elemento Elemento de Parâmetro (XMLA) define o nome do parâmetro e um valor para ele.
Referencie parâmetros XMLA prefixando o nome do parâmetro com um caractere @
. Qualquer lugar na sintaxe em que um valor é permitido, o valor pode ser substituído por uma chamada de parâmetro. Todos os parâmetros XMLA são digitados como texto.
Importante
Parâmetros definidos na seção de parâmetros e não usados no elemento <STATEMENT>
geram uma resposta de erro no XMLA.
Parâmetros usados e não definidos no elemento <Parameters>
geram uma resposta de erro no XMLA.
Conteúdo relacionado
Declarações do DAXSUMMARIZECOLUMNS