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 = true metadados de esquema. Contém colunas: ErrorCode, ErrorMessage, ErrorDescriptione campos de local de origem. Os metadados de esquema também incluem FaultCode (código de erro hex) e FaultString (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
datasetId
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 en-US. Para obter mais informações sobre códigos de cultura com suporte, consulte Supported idiomas e países/regiões para Power BI.

customData

string

Dados personalizados para uso no RLS dinâmico. Por exemplo, North America pode ser referenciado pela função do CUSTOMDATA() modelo.

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 en-US. Para obter mais informações sobre códigos de cultura com suporte, consulte Supported idiomas e países/regiões para Power BI.

customData

string

Dados personalizados para uso no RLS dinâmico. Por exemplo, North America pode ser referenciado pela função do CUSTOMDATA() modelo.

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.