Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Volg deze aanbevelingen om optimaal gebruik te maken van de REST API voor DAX-query's uitvoeren in productieworkloads.
Het juiste eindpunt kiezen
Opmerking
De API DAX-query's uitvoeren is alleen beschikbaar voor semantische modellen die zich bevinden op een Power BI capaciteit (Premium, Fabric of Embedded). Semantische modellen zonder capaciteitstoewijzing worden niet ondersteund.
Power BI biedt twee REST API's voor het uitvoeren van DAX-query's. Kies degene die overeenkomt met de capaciteiten van uw client.
-
DAX-query's uitvoeren (Arrow): Gebruik het wanneer uw clienttoepassing binaire Arrow IPC streams kan consumeren. Arrow biedt kleinere belastingen, verliesloze typegetrouwheid en zero-copy deserialisatie in frameworks als pandas, Polars en Apache Spark. Deze API ondersteunt ook geavanceerde parameters zoals
queryTimeoutenresultsetRowcountLimit. Vereist Premium- of Fabric-capaciteit. - Queries uitvoeren (JSON): gebruik deze optie wanneer uw consument een low-code/no-code platform, Power Automate flow of elk ander programma is dat alleen JSON kan verwerken. Deze API werkt op Pro-, PPU- en Premium-/Fabric-capaciteiten, maar heeft een vaste limiet van 100.000 rijen en 1.000.000 waarden per query.
Als een algemene regel, als uw resultatenset meer dan een paar honderd rijen bevat, invoert in een analysepijplijn, of nauwkeurige typegetrouwheid vereist, gebruikt u de API DAX-query's uitvoeren met Arrow.
DAX-query's optimaliseren voor het Arrow-eindpunt
Efficiënte DAX vermindert zowel de verwerkingstijd van query's als de omvang van de reactielading.
- Alleen de kolommen retourneren die u nodig hebt. Gebruik
SELECTCOLUMNSof expliciete kolomlijsten in plaats van volledige tabellen te retourneren. Elke extra kolom draagt bij aan het schema en de grootte van de recordbatch. - Kies
SUMMARIZECOLUMNSliever danADDCOLUMNSmetFILTER.SUMMARIZECOLUMNSproduceert efficiëntere queryplannen in de VertiPaq-engine. - Gebruik
TOPNdit om rijen te beperken. Wanneer u alleen de belangrijkste resultaten nodig hebt,TOPNwordt de limiet naar de engine doorgestuurd in plaats van alle rijen over te brengen en aan de clientzijde te filteren. - Vermijd complexe berekende kolommen in queries. Metingen en aggregaties zijn prima, maar berekeningen op rijniveau voor grote tabellen kunnen de uitvoering aanzienlijk vertragen.
- Combineer meerdere
EVALUATEinstructies in één verzoek. De API DAX-query's uitvoeren ondersteunt meerdereEVALUATEinstructies binnen éénquerytekenreeks, die elk een afzonderlijke resultatenset retourneren. Dit voorkomt de overhead van afzonderlijke HTTP-retouren.
Verificatie efficiënt beheren
- Tokens cachen en opnieuw gebruiken. Gebruik de ingebouwde tokencache van MSAL om te voorkomen dat Microsoft Entra ID wordt aangeroepen bij elke aanvraag. Voor vertrouwelijke client flows worden tokens automatisch in de cache opgeslagen wanneer u dezelfde
ConfidentialClientApplicationinstantie opnieuw gebruikt. - Gebruik vertrouwelijke clientreferenties voor services. Voor services zonder toezicht in de middellaag gebruikt u clientreferenties (clientgeheim of certificaat) in plaats van gedelegeerde gebruikerstokens. Dit voorkomt afhankelijkheid van een aangemelde gebruikerssessie.
- Geef de voorkeur aan beheerde identiteiten in Azure. Wanneer uw service wordt uitgevoerd in Azure (App Service, Functions, AKS), gebruikt u een beheerde identiteit om referentiebeheer volledig te elimineren.
- De verlooptijd van het token correct verwerken. Toegangstokens verlopen doorgaans na één uur. Controleer op
401 Unauthorizedantwoorden en vernieuw het token voordat u het opnieuw probeert.
Fouten en nieuwe pogingen verwerken
De API DAX-query's uitvoeren kan op twee manieren fouten retourneren:
HTTP-fouten: standaard HTTP-statuscodes met een JSON-foutbody. Algemene codes:
Statuscode Meaning Action 400Ongeldige aanvraag (ongeldige DAX, ontbrekende parameters) Herstel de aanvraag. Probeer het niet opnieuw. 401Niet gemachtigd (verlopen of ongeldig token) Vernieuw het token en probeer het opnieuw. 403Verboden (onvoldoende toegangsrechten) Controleer of de aanroeper samenstellings- en leesmachtigingen heeft voor het semantische model. 429Te veel aanvragen (beperkt) Wacht voor de duur in de Retry-Afterkoptekst en probeer het daarna opnieuw.500/502/503Tijdelijke serverfouten Probeer het opnieuw met exponentiële backoff. Fouten op stroomniveau — HTTP 200 met een foutrijenset dat is ingesloten in het Arrow-antwoord. Controleer de metagegevens van het pijlschema voor
IsError=trueen lees deFaultCodeenFaultStringmetadatawaarden en de foutrijen voor gedetailleerde plaatsinformatie.
Voor tijdelijke fouten implementeer exponentieel uitstel met jitter. Start bij één seconde, verdubbeling bij elke herhaling en beperk tot 30 seconden. Beperk nieuwe pogingen tot drie of vier pogingen.
Grootte van resultatenset bepalen
Grote resultatensets verbruiken geheugen op zowel de capaciteit in de service als de aanroepende client. Elke aanvraag is afhankelijk van de geheugenlimiet van de capaciteit.
Resultatensets beheerbaar houden:
- Stel
resultsetRowcountLimitin de inhoud van de aanvraag. Hiermee wordt een rijlimiet aan de serverzijde per resultatenset afgedwongen. Als u weet dat uw consument slechts 10.000 rijen nodig heeft, stelt u de limiet expliciet in. - Gebruiken
TOPNin uw DAX-query.TOPNbeperkt rijen op motorniveau, wat efficiënter is dan het afkappen van de clientzijde. - Verwerk recordbatches incrementeel. Pijlreacties worden gesplitst in recordbatches van maximaal 100.000 rijen. In Python kunt u batches herhalen met
reader.read_next_batch()in plaats vanreader.read_all()aan te roepen bij het werken met grote resultaten, om het geheugengebruik constant te houden.
Uw mid-tier-service beveiligen
Als u een mid-tier-service bouwt die DAX-query's doorstuurt voor downstreamconsumenten:
- De identiteit van de beller valideren. Verifieer binnenkomende aanvragen met Microsoft Entra ID of een andere id-provider voordat u query's doorstuurt naar Power BI. Maak het eindpunt DAX-query's uitvoeren nooit beschikbaar als een open proxy.
- Minimale bevoegdheden afdwingen. Geef de service-principal alleen de benodigde toestemmingen (Build en Read op specifieke semantische modellen). Gebruik geen werkruimtebeheerders- of tenantbeheerdersrollen voor API-toegang.
- Sluit referenties niet in code in. Sla clientgeheimen op in Azure Key Vault of gebruik beheerde identiteiten. Roteer geheime sleutels op een regelmatige basis.
- De DAX-invoer opschonen. Als uw middellaag DAX-querytekst accepteert van bellers, valideert u de invoer om injectie van onverwachte bewerkingen te voorkomen.
- Gebruik de
effectiveUsernameparameter met zorg. Deze parameter roept rijniveau beveiliging aan namens een specifieke gebruiker. Zorg ervoor dat de aanroepende identiteit is gemachtigd om de opgegeven gebruiker te imiteren.
Bewaken en registreren
Houd de status en prestaties van uw API-gebruik bij:
- Metagegevens van logboekquery's : noteer de querytekst, de antwoordgrootte, de HTTP-status en de duur van elke aanvraag. Dit helpt bij het identificeren van trage query's en onverwachte foutpieken.
- Snelheidsbeperkingen bewaken: Houd respons bij als percentage van het totale aantal aanvragen. Een stijgende trend geeft aan dat u de aanvraagfrequentie moet verminderen of de belasting over de tijd moet verdelen.
- Deserialisatietijd meten: voor pijlreacties registreert u de tijd die is besteed aan het lezen en materialiseren van recordbatches afzonderlijk van de HTTP-retourtijd. Dit helpt de netwerklatentie te onderscheiden van verwerking aan de clientzijde.
- Gebruik Application Insights of een gelijkwaardige oplossing — Als uw middellaag in Azure wordt uitgevoerd, schakelt u Application Insights in voor het verkrijgen van afhankelijkheidstracering, foutwaarschuwingen en end-to-end gedistribueerde tracering.
- Treffers voor tokencache bijhouden : lage cachetreffers betekenen frequente aanroepen voor het verkrijgen van tokens, waardoor latentie wordt toegevoegd en een teken zijn van onjuist geconfigureerde MSAL-caching.