Datasets - Execute Dax Queries
Executa consultas DAX (Expressões de Análise de Dados) no conjunto de dados fornecido. O conjunto de dados deve residir em Meu workspace. A resposta é retornada no formato de Seta do Apache.
Permissões ou erros de consulta resultarão em:
- Um erro de resposta, como
XMLA endpoint feature is disabled. Turn on the tenant setting 'Allow XMLA endpoints and Analyze in Excel with on-premises semantic models' to enable this feature.. - Um código de status HTTP bem-sucedido (200) com um lote de registro contendo os detalhes do erro.
Permissions
A configuração do locatário a API REST executar consultas do conjunto de dados, encontrada nas configurações de integração , deve estar habilitada.
O usuário deve ter permissões de leitura e compilação do conjunto de dados. Para obter mais informações, consulte Gerenciar permissões de acesso do conjunto de dados.
Escopo necessário
Dataset.ReadWrite.All ou Dataset.Read.All
Limitações
- Essa API só está disponível para conjuntos de dados hospedados em uma capacidade.
- Não há suporte para conjuntos de dados hospedados no Azure Analysis Services ou que têm uma conexão dinâmica com um modelo local do Azure Analysis Services.
- Uma consulta por chamada à API, mas a consulta pode ter várias instruções de avaliação.
- Há um limite de 120 solicitações de consulta por minuto por usuário, independentemente do conjunto de dados consultado.
- Para usar as Entidades de Serviço, verifique se a configuração do locatário do administrador Permitir que as entidades de serviço usem as APIs do Power BI em configurações do Desenvolvedor está habilitada. Para obter mais informações sobre modelos semânticos com RLS, consulte as limitações de RLS.
- No momento, há suporte apenas para consultas DAX e funções INFO. Não há suporte para consultas MDX e DMV.
Formato de resposta
O corpo da resposta contém um ou mais fluxos de IPC do Apache Arrow concatenados. Cada fluxo é autocontido com seu próprio esquema e lotes de registro. Para processar a resposta, use uma biblioteca de clientes do Apache Arrow .
A resposta pode incluir os seguintes tipos de conjunto de linhas, identificados por metadados no nível do esquema (pares chave-valor no esquema de seta):
- Conjunto de linhas de dados: contém os resultados da consulta. Nenhuma chave de metadados especial. Os nomes e tipos de coluna são determinados pela consulta DAX.
-
Conjunto de linhas de erro: identificado por
IsError=truemetadados de esquema. Contém colunas:ErrorCode,ErrorMessage,ErrorDescriptione campos de local de origem. Os metadados de esquema também incluemFaultCode(código de erro hex) eFaultString(mensagem de erro).
Registrar lotes na resposta usa LZ4_FRAME compactação. A biblioteca de pyarrow lida com isso automaticamente. Para .NET, instale o pacote NuGet Apache.Arrow.Compression.
Importante
Os erros de consulta retornam HTTP 200 com um conjunto de linhas de erro no fluxo de seta. Sempre verifique os metadados de esquema até IsError mesmo em códigos de status HTTP bem-sucedidos.
O exemplo de Python a seguir mostra como ler dados e verificar se há erros usando pyarrow:
import io
import pyarrow as pa
# response = requests.post(url, headers=headers, json=request_body)
stream = io.BytesIO(response.content)
results = []
while stream.tell() < len(response.content):
try:
reader = pa.ipc.open_stream(stream)
table = reader.read_all()
metadata = {
k.decode(): v.decode()
for k, v in (reader.schema.metadata or {}).items()
}
if metadata.get("IsError") == "true":
raise RuntimeError(
f"Query error [{metadata.get('FaultCode')}]: "
f"{metadata.get('FaultString')}"
)
else:
results.append(table)
except pa.ArrowInvalid:
break
print(results[0].to_pandas())
Para .NET, use a classe DaxQueryArrowResponseReader neste SDK, que manipula a análise de fluxo, a detecção de erros e a descompactação LZ4.
POST https://api.powerbi.com/v1.0/myorg/datasets/{datasetId}/executeDaxQueries
Parâmetros de URI
| Nome | Em | Obrigatório | Tipo | Description |
|---|---|---|---|---|
|
dataset
|
path | True |
string (uuid) |
A ID do conjunto de dados |
Corpo da solicitação
| Nome | Obrigatório | Tipo | Description |
|---|---|---|---|
| query | True |
string |
Texto da consulta. |
| applicationContext |
string |
Estrutura JSON que contém informações adicionais sobre uma operação. |
|
| culture |
string |
Código de cultura que controla a formatação de consulta específica da localidade, como |
|
| customData |
string |
Dados personalizados para uso no RLS dinâmico. Por exemplo, |
|
| effectiveUsername |
string |
Nome de usuário efetivo para a consulta. |
|
| memoryLimit |
integer (int64) |
Limite de memória (em KB) para a consulta. |
|
| queryTimeout |
integer |
Tempo limite da consulta em segundos. |
|
| resultSetRowCountLimit |
integer |
Número máximo de linhas a serem retornadas. O padrão é 1.000.000 linhas. |
|
| roles |
string[] |
Funções atribuídas ao usuário. |
|
| schemaOnly |
boolean |
Se a consulta deve retornar apenas o esquema. |
Respostas
| Nome | Tipo | Description |
|---|---|---|
| 200 OK |
string |
A consulta foi executada com êxito. Retorna dados binários formatados do Apache Arrow. Media Types: "application/vnd.apache.arrow.stream" |
Exemplos
| Execute query with culture |
| Execute query with custom data |
| Execute query with effective username |
| Execute simple DAX query |
Execute query with culture
Solicitação de exemplo
POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
"query": "EVALUATE ROW(\"Formatted Date\", FORMAT(DATE(2024, 12, 31), \"Long Date\"))",
"culture": "en-US"
}
Resposta de exemplo
Execute query with custom data
Solicitação de exemplo
POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
"query": "EVALUATE FILTER('Sales', 'Sales'[Region] = CUSTOMDATA())",
"customData": "North America"
}
Resposta de exemplo
Execute query with effective username
Solicitação de exemplo
POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
"query": "EVALUATE SUMMARIZECOLUMNS('Sales'[Region], \"Total\", SUM('Sales'[Amount]))",
"effectiveUsername": "user@contoso.com",
"roles": [
"SalesRole"
],
"queryTimeout": 300
}
Resposta de exemplo
Execute simple DAX query
Solicitação de exemplo
POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
"query": "EVALUATE VALUES('Product'[Category])",
"queryTimeout": 600,
"schemaOnly": false,
"resultSetRowCountLimit": 100000
}
Resposta de exemplo
Definições
DatasetExecuteDaxQueriesRequest
Uma solicitação para executar consultas em um conjunto de dados
| Nome | Tipo | Description |
|---|---|---|
| applicationContext |
string |
Estrutura JSON que contém informações adicionais sobre uma operação. |
| culture |
string |
Código de cultura que controla a formatação de consulta específica da localidade, como |
| customData |
string |
Dados personalizados para uso no RLS dinâmico. Por exemplo, |
| effectiveUsername |
string |
Nome de usuário efetivo para a consulta. |
| memoryLimit |
integer (int64) |
Limite de memória (em KB) para a consulta. |
| query |
string |
Texto da consulta. |
| queryTimeout |
integer |
Tempo limite da consulta em segundos. |
| resultSetRowCountLimit |
integer |
Número máximo de linhas a serem retornadas. O padrão é 1.000.000 linhas. |
| roles |
string[] |
Funções atribuídas ao usuário. |
| schemaOnly |
boolean |
Se a consulta deve retornar apenas o esquema. |