Dominando el uso de la API REST de ejecución de consultas DAX

La API Execute DAX Queries permite ejecutar consultas DAX en modelos semánticos de Power BI y recuperar resultados de manera programática en el Formato IPC de Apache Arrow, un formato binario columnar diseñado para análisis de alto rendimiento. Al devolver los resultados de la consulta directamente en formato flecha, la API elimina la sobrecarga de serialización y proporciona a la aplicación acceso a datos fuertemente tipados y listos para análisis.

Diagrama que muestra la arquitectura de la API REST Ejecutar Consultas DAX. Las aplicaciones cliente (Python, C#, PowerShell) envían solicitudes POST y reciben secuencias Arrow IPC desde el servicio Power BI. La canalización de procesamiento de flujos Arrow muestra seis fases del lado cliente: Receive, Deserialize, Validate, Materialize, Transform y Consume.

¿Por qué Flecha?

El punto de conexión Execute Queries existente devuelve resultados como JSON. El punto de conexión Ejecutar consultas DAX más reciente devuelve resultados exclusivamente en formato IPC de Apache Arrow, un formato binario en columnas diseñado para el análisis de alto rendimiento. En la tabla siguiente se comparan los dos formatos de respuesta:

JSON (Execute Queries API) Arrow (Ejecutar la API de consultas DAX)
Formato JSON orientado a filas IPC de flecha en columnas
Tamaño de carga Mayor tamaño (sobrecarga de codificación de cadenas) Más pequeño (binario, comprimido)
Fidelidad de tipos Pérdida (todo es cadena/número) Sin pérdida (fecha nativa, decimal, int64)
Deserialización Parseo y coerción de tipos Lectura sin copia en DataFrame
Mejor para Consultas pequeñas, integraciones sencillas Conjuntos de resultados grandes, canalizaciones de análisis

Sugerencia

Utilice la API de ejecución de consultas DAX para cualquier aplicación cliente que pueda consumir flujos IPC binarios de Arrow. Esto incluye Python (pyarrow), C# (Apache.Arrow), Java, Rust, Go y otros lenguajes con compatibilidad con la biblioteca Arrow. En el caso de plataformas de código bajo o sin código, flujos de Power Automate u otras soluciones que solo pueden consumir JSON, siga usando la API anterior Execute Queries. Aunque la API Execute Queries carece de los parámetros avanzados disponibles en Execute DAX Queries (por queryTimeout ejemplo, y resultsetRowcountLimit), sigue siendo la opción adecuada cuando se requiere la salida JSON.

Formato IPC de Apache Arrow

Apache Arrow define un formato de memoria de columnas independiente del lenguaje que se ha adoptado ampliamente en el ecosistema de datos, lo que lo convierte en una de las representaciones de datos más ampliamente admitidas disponibles. El formato de streaming IPC (Inter-Process Communication) Arrow encapsula lotes de registros en columnas con metadatos de esquema, lo que permite:

  • Lecturas de copia cero : los clientes pueden asignar la respuesta directamente a la memoria sin analizar ni copiar datos entre búferes.
  • Compatibilidad entre lenguajes: bibliotecas nativas para Python (pyarrow), C# (Apache.Arrow), Java, Rust, Go, JavaScript, y más, por lo que puede consumir resultados en prácticamente cualquier lenguaje.
  • Compresión eficaz : la compresión LZ4 reduce el tamaño de la carga.
  • Diseño basado en esquemas: cada secuencia de Arrow comienza con un mensaje de esquema que declara nombres de columna, tipos y metadatos, de modo que los clientes conocen el diseño de datos exacto antes de leer las filas.

Asignación de tipo DAX a Arrow

La API Execute DAX Queries asigna los tipos de datos DAX a los tipos Arrow de la siguiente manera:

Tipo DAX Tipo de flecha Notas
Entero (número entero) int64 Entero de 64 bits directo
Decimal double Punto flotante de precisión doble
Moneda (decimal fijo) decimal128(19, 4) Precisión a cuatro cifras decimales sin pérdida
Double double Punto flotante de precisión doble
DateTime date64 Milisegundos desde la época de Unix
Boolean bool
String utf8 Codificado por diccionario de forma predeterminada para la eficiencia
Binary binary
Variant dense_union Unión de int64, moneda, bool, date64, float64, utf8

Cuándo usar el punto de conexión Arrow

Utilice el punto final de Arrow cuando:

  • Recupere más de unos cientos de filas de un modelo semántico.
  • Introduce resultados en pandas, polares, Spark u otros marcos de procesamiento en columnas.
  • Cree un servicio intermedio que actúe como proxy para consultas DAX dirigidas a consumidores posteriores.
  • Necesita tipos numéricos o de fecha precisos sin coerción de tipos manuales.

Para consultas sencillas, pequeñas o búsquedas rápidas ad hoc en las que se prefiere JSON, la API de ejecución de consultas más antigua sigue siendo una opción sencilla.

Consideraciones y limitaciones

Antes de adoptar la API Ejecutar consultas DAX, revise las siguientes diferencias y restricciones en comparación con la antigua API Ejecutar Consultas:

Execute Queries API Ejecución de la API de consultas DAX
Punto final executeQueries executeDaxQueries
Requisito de capacidad Funciona en Pro, PPU y Premium/Fabric Sólo capacidad Premium o Fabric
Configuración de inquilino API REST de ejecución de consultas de conjunto de datos (en Configuración del desarrollador) Dataset Execute Queries REST API (en Configuración del desarrollador) y Permitir puntos de conexión XMLA y Analizar en Excel con modelos semánticos locales (en Configuración de integración). Permitir a los principales de servicio usar las API de Power BI (en Configuración del desarrollador) solo se requiere al autenticarse con una entidad de servicio.
Entrada de consulta queries[] matriz (una consulta por llamada) Una única cadena query (se permiten varias EVALUATE instrucciones)
Formatos de respuesta Solo JSON IPC solo de Arrow
Parámetros adicionales Limited queryTimeout, resultsetRowcountLimit, schemaOnly, , executionMetrics, memoryLimit
Streaming No transmitido Transmisión de un extremo a otro (transferencia fragmentada)
Límites de tamaño de resultado Límite máximo de 100 000 filas y 1000 000 valores por consulta Sin límite fijo de filas o valores (use resultsetRowcountLimit para establecer un límite si es necesario)
Paginación No soportado No compatible: uso TOPN o resultsetRowcountLimit para resultados grandes
Biblioteca de flechas necesaria No (solo JSON) Sí: se requiere una biblioteca de flechas (como pyarrow o Apache.Arrow) para deserializar la respuesta.