De REST API voor UITVOEREN van DAX-query's beheersen

Met de API DAX-query's uitvoeren kunt u DAX-query's uitvoeren op Power BI semantische modellen en resultaten programmatisch ophalen in de Apache Arrow IPC-indeling, een binaire kolomindeling die is ontworpen voor analyses met hoge prestaties. Door queryresultaten rechtstreeks in de pijlindeling te retourneren, elimineert de API serialisatieoverhead en krijgt uw toepassing toegang tot sterk getypte, analyseklare gegevens.

Diagram van de REST API-architectuur voor het uitvoeren van DAX-query’s. Clienttoepassingen (Python, C#, PowerShell) verzenden POST-verzoeken en ontvangen Arrow IPC-streams van de Power BI Service. De verwerkingspijplijn van de Arrow-stream toont zes fasen aan clientzijde: Ontvangen, Deserialiseren, Valideren, Materialiseren, Transformeren en Gebruiken.

Waarom Pijl?

Het bestaande eindpunt Query's uitvoeren retourneert resultaten als JSON. Het nieuwere execute DAX Querys-eindpunt retourneert uitsluitend resultaten in de Apache Arrow IPC-indeling, een binaire indeling met kolommen die is ontworpen voor hoogwaardige analyses. In de volgende tabel worden de twee antwoordindelingen vergeleken:

JSON (API voor het uitvoeren van query's) Arrow (API voor het uitvoeren van DAX-query's)
Formatteren Rijgeoriënteerde JSON Kolomgebaseerde Arrow IPC
Payloadgrootte Groter (overhead voor tekenreekscodering) Kleiner (binair, gecomprimeerd)
Typegetrouwheid Met verlies (alles is een tekenreeks of getal) Verliesloos (systeemeigen datum, decimaal, int64)
Deserialisatie Parsen + typeconversie afdwingen Lezen in een DataFrame zonder kopiëren
Het beste voor Kleine query's, eenvoudige integraties Grote resultaatverzamelingen, analyseworkflows

Tip

Gebruik de API voor het uitvoeren van DAX-query's voor elke clienttoepassing die binaire Arrow IPC-streams kan verwerken — dit omvat Python (pyarrow), C# (Apache.Arrow), Java, Rust, Go en andere talen met ondersteuning voor de Arrow-bibliotheek. Voor low-code-/no-codeplatforms, Power Automate-flows of andere oplossingen die alleen JSON kunnen verwerken, blijft u de oudere Execute Queries API gebruiken. Hoewel de EXECUTE Query's-API niet beschikt over de geavanceerde parameters die beschikbaar zijn in DAX-query's uitvoeren (zoals queryTimeout en resultsetRowcountLimit), blijft deze de juiste keuze wanneer JSON-uitvoer vereist is.

IPC-indeling van Apache Arrow

Apache Arrow definieert een taalonafhankelijke kolomgeheugenindeling die algemeen is gebruikt in het gegevensecosysteem, waardoor deze een van de meest breed ondersteunde gegevensweergaven beschikbaar is. Het Arrow IPC-streamingformaat (Inter-Process Communication) omsluit kolomgeoriënteerde recordbatches met schemametadata, waardoor:

  • Leesbewerkingen met nulkopie : clients kunnen het antwoord rechtstreeks in het geheugen toewijzen zonder gegevens tussen buffers te parseren of te kopiëren.
  • Ondersteuning voor meerdere talen: systeemeigen bibliotheken bestaan voor Python (), C# (pyarrowApache.Arrow), Java, Rust, Go, JavaScript en meer, zodat u resultaten in vrijwel elke taal kunt gebruiken.
  • Efficiënte compressie - LZ4-compressie vermindert de nettoladinggrootte.
  • Schema-eerst-ontwerp — elke Arrow-stroom begint met een schemabericht waarin kolomnamen, typen en metagegevens worden opgegeven, zodat clients de exacte gegevensindeling kennen voordat ze gegevensrijen lezen.

Toewijzing van DAX aan Arrow-typen

De API voor het uitvoeren van DAX-query's brengt DAX-gegevenstypen als volgt in kaart naar Arrow-typen:

DAX-type Pijltype Aantekeningen
Geheel getal (geheel getal) int64 Direct 64-bits geheel getal
Decimal double Dubbele precisie drijvende komma
Valuta (vast decimaal) decimal128(19, 4) Precisie van vier decimalen zonder verlies
Double double Dubbele precisie drijvende komma
DateTime date64 Milliseconden sinds de Unix-epoch
Boolean bool
String utf8 Standaard woordenboekgecodeerd voor efficiëntie
Binary binary
Variatie dense_union Unie van int64, valuta, bool, datum64, float64, utf8

Wanneer gebruikt u het pijleindpunt

Gebruik het pijleindpunt wanneer u:

  • Haal meer dan een paar honderd rijen op uit een semantisch model.
  • Voer resultaten in pandas, polars, Spark of andere frameworks voor kolomverwerking in.
  • Bouw een mid-tier-service die als proxy fungeert voor DAX-query's voor achterliggende afnemers.
  • Nauwkeurige numerieke of datumtypen nodig hebben zonder handmatige typecodering.

Voor eenvoudige, kleine query's of snelle ad-hoc lookups waar JSON de voorkeur heeft, blijft de oudere Execute Querys-API een eenvoudige keuze.

Overwegingen en beperkingen

Voordat u de API Execute DAX Queries gaat gebruiken, bekijkt u de volgende verschillen en beperkingen ten opzichte van de oudere API Execute Queries:

API voor query's uitvoeren API voor het uitvoeren van DAX-query's
Eindpunt executeQueries executeDaxQueries
Capaciteitsvereiste Werkt met Pro, PPU en Premium/Fabric Premium- of Fabric-capaciteit alleen
Tenantinstellingen Rest API voor het uitvoeren van query's voor gegevenssets (onder Instellingen voor ontwikkelaars) Rest API voor het uitvoeren van gegevenssetquery's (onder Instellingen voor ontwikkelaars) en XMLA-eindpunten toestaan en analyseren in Excel met on-premises semantische modellen (onder Integratie-instellingen) zijn vereist. Toestaan dat service-principals Power BI API's (onder Instellingen voor ontwikkelaars) gebruiken, is alleen vereist bij verificatie met een service-principal.
Queryinvoer queries[] array (één query per aanroep) Eén query tekenreeks (meerdere EVALUATE instructies toegestaan- zie Zelfstudie: Meerdere EVALUATE-instructies uitvoeren met PowerShell)
Antwoordindelingen Alleen JSON Alleen Arrow IPC
Aanvullende parameters Beperkt queryTimeout, resultsetRowcountLimit, schemaOnly, executionMetrics, , memoryLimit
Streaming Niet gestreamd End-to-end gestreamd (overdracht in chunks)
Limieten voor resultaatgrootte Vaste limiet van 100.000 rijen en 1.000.000 waarden per query Geen vaste rij- of waardelimiet (gebruik resultsetRowcountLimit om indien nodig een maximum in te stellen)
Paginering Niet ondersteund Niet ondersteund: gebruiken TOPN of resultsetRowcountLimit voor grote resultaten
Arrow-bibliotheek vereist Nee (alleen JSON) Ja — een Arrow-bibliotheek (zoals pyarrow of Apache.Arrow) is vereist om de reactie te deserialiseren