Dominando a Execute DAX Queries REST API

A API Executar Consultas DAX permite executar consultas DAX em modelos semânticos Power BI e recuperar resultados programaticamente no formato IPC Apache Arrow, um formato binário colunar projetado para análise de alto desempenho. Ao retornar os resultados da consulta diretamente no formato Arrow, a API elimina a sobrecarga de serialização e fornece ao seu aplicativo acesso a dados fortemente tipados e prontos para análise.

Diagrama mostrando a arquitetura da API REST para executar consultas DAX. Os aplicativos cliente (Python, C#, PowerShell) enviam solicitações POST e recebem fluxos IPC do Arrow do Serviço do Power BI. O pipeline de processamento de fluxo Arrow mostra seis estágios no lado do cliente: Receber, Desserializar, Validar, Materializar, Transformar e Consumir.

Por que seta?

O endpoint Execute Queries existente retorna resultados como JSON. O endpoint Executar Consultas DAX mais recente retorna resultados exclusivamente no formato Apache Arrow IPC, um formato colunar binário projetado para análise de alto desempenho. A tabela a seguir compara os dois formatos de resposta:

JSON (Executar API de Consultas) Arrow (API de Execução de Consultas DAX)
Formato JSON orientado a linhas Arrow IPC em formato colunar
Tamanho da carga Maior (sobrecarga de codificação de cadeia de caracteres) Menor (binário, compactado)
Fidelidade de tipo Perda (tudo é cadeia de caracteres/número) Sem perda (data nativa, decimal, int64)
Desserialização Análise + coerção de tipo Leitura sem cópia em DataFrame
Mais adequado para Consultas pequenas, integrações simples Grandes conjuntos de resultados, fluxos de análise

Dica

" Use a API Executar Consultas DAX para qualquer aplicativo cliente que possa consumir fluxos de IPC Arrow binário — isso inclui Python (pyarrow), C# (Apache.Arrow), Java, Rust, Go e outras linguagens com suporte à biblioteca Arrow. Para plataformas de baixo código/sem código, fluxos de Power Automate ou outras soluções que só podem consumir JSON, continue a usar a API Execute Queries mais antiga. Embora a API Executar Consultas não tenha os parâmetros avançados disponíveis em Consultas Execute DAX (como queryTimeout e resultsetRowcountLimit), ela continua sendo a escolha apropriada quando a saída JSON é necessária.

Formato IPC do Apache Arrow

O Apache Arrow define um formato de memória colunar independente de linguagem que foi amplamente adotado em todo o ecossistema de dados, tornando-o uma das representações de dados mais amplamente compatíveis disponíveis. O formato de streaming Arrow IPC (Comunicação entre processos) encapsula lotes de registros em formato columnar com metadados de esquema, habilitando:

  • Leituras sem cópias – os clientes podem mapear a resposta diretamente na memória, sem precisar analisar ou mover dados entre buffers.
  • Suporte entre linguagens — existem bibliotecas nativas para Python (pyarrow), C# (Apache.Arrow), Java, Rust, Go, JavaScript e muito mais, para que você possa consumir resultados em praticamente qualquer linguagem.
  • Compactação eficiente – a compactação LZ4 reduz o tamanho da carga.
  • Design baseado em esquema – cada fluxo Arrow começa com uma mensagem de esquema que declara nomes de coluna, tipos e metadados, para que os clientes conheçam o layout exato dos dados antes de ler qualquer linha.

Mapeamento de tipo DAX para Arrow

A API Executa Consultas DAX mapeia os tipos de dados DAX para tipos Arrow da seguinte maneira:

Tipo DAX Tipo de seta Notes
Inteiro (número inteiro) int64 Inteiro direto de 64 bits
Decimal double Ponto flutuante de precisão dupla
Moeda (decimal fixa) decimal128(19, 4) Precisão sem perdas de quatro casas decimais
Double double Ponto flutuante de precisão dupla
DateTime date64 Milissegundos desde a época do Unix
booleano bool
String utf8 O uso de codificação por dicionário é o padrão para garantir eficiência.
Binário binary
Variant dense_union União de int64, moeda, bool, date64, float64, utf8

Quando usar o endpoint Arrow

Utilize o ponto de extremidade de seta quando:

  • Recupere mais de algumas centenas de linhas de um modelo semântico.
  • Alimente os resultados em pandas, polares, Spark ou outras estruturas de processamento colunar.
  • Crie um serviço de camada intermediária que faz proxies de consultas DAX para consumidores downstream.
  • Precisa de tipos numéricos ou de data precisos sem coerção de tipo manual.

Para consultas simples e pequenas ou pesquisas ad hoc rápidas em que o JSON é preferencial, a API Execute Queries mais antiga permanece como uma escolha direta.

Considerações e limitações

Antes de adotar a API Executar Consultas DAX, examine as seguintes diferenças e restrições em comparação com a API Executar Consultas mais antiga:

Executar API de Consultas Executar a API de Consultas DAX
Ponto de extremidade executeQueries executeDaxQueries
Requisito de capacidade Funciona com Pro, PPU e Premium/Fabric Somente capacidade Premium e Fabric
Configurações de locatário API REST executar consultas do conjunto de dados (em configurações de desenvolvedor) Dataset Execute Queries REST API (em configurações do desenvolvedor) e Permitir pontos de extremidade XMLA e analisar no Excel com modelos semânticos locais (em configurações de integração). Permitir que principais de serviço usem APIs do Power BI (em Configurações do desenvolvedor) é necessário somente ao autenticar com um principal de serviço.
Entrada de consulta queries[] matriz (uma consulta por chamada) Cadeia de caracteres única query (várias EVALUATE instruções permitidas)
Formatos de resposta Somente JSON Arrow IPC somente
Parâmetros adicionais Limited queryTimeout, resultsetRowcountLimit, schemaOnly, , executionMetricsmemoryLimit
Streaming Não transmitido Transmissão contínua de ponta a ponta (transferência segmentada)
Limites de tamanho do resultado Limite rígido de 100.000 linhas e 1.000.000 valores por consulta Sem limite de linha ou valor fixo (use resultsetRowcountLimit para limitar, se necessário)
Paginação Sem suporte Sem suporte — use TOPN ou resultsetRowcountLimit para resultados grandes
Biblioteca de setas necessária Não (somente JSON) Sim — uma biblioteca de setas (como pyarrow ou Apache.Arrow) é necessária para desserializar a resposta