Aanbevolen procedures voor de REST API voor DAX-query's uitvoeren

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 queryTimeout en resultsetRowcountLimit. 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 SELECTCOLUMNS of expliciete kolomlijsten in plaats van volledige tabellen te retourneren. Elke extra kolom draagt bij aan het schema en de grootte van de recordbatch.
  • Kies SUMMARIZECOLUMNS liever dan ADDCOLUMNS met FILTER. SUMMARIZECOLUMNS produceert efficiëntere queryplannen in de VertiPaq-engine.
  • Gebruik TOPN dit om rijen te beperken. Wanneer u alleen de belangrijkste resultaten nodig hebt, TOPN wordt 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 EVALUATE instructies in één verzoek. De API DAX-query's uitvoeren ondersteunt meerdere EVALUATE instructies binnen één query tekenreeks, 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 ConfidentialClientApplication instantie 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 Unauthorized antwoorden 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:

  1. HTTP-fouten: standaard HTTP-statuscodes met een JSON-foutbody. Algemene codes:

    Statuscode Meaning Action
    400 Ongeldige aanvraag (ongeldige DAX, ontbrekende parameters) Herstel de aanvraag. Probeer het niet opnieuw.
    401 Niet gemachtigd (verlopen of ongeldig token) Vernieuw het token en probeer het opnieuw.
    403 Verboden (onvoldoende toegangsrechten) Controleer of de aanroeper samenstellings- en leesmachtigingen heeft voor het semantische model.
    429 Te veel aanvragen (beperkt) Wacht voor de duur in de Retry-After koptekst en probeer het daarna opnieuw.
    500 / 502 / 503 Tijdelijke serverfouten Probeer het opnieuw met exponentiële backoff.
  2. Fouten op stroomniveau — HTTP 200 met een foutrijenset dat is ingesloten in het Arrow-antwoord. Controleer de metagegevens van het pijlschema voor IsError=true en lees de FaultCode en FaultString metadatawaarden 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 resultsetRowcountLimit in 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 TOPN in uw DAX-query. TOPN beperkt 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 van reader.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 effectiveUsername parameter 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.