Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Följ dessa rekommendationer för att få ut mest av REST-API:et Kör DAX-frågor i produktionsmiljöer.
Välj rätt slutpunkt
Anmärkning
API:et Kör DAX-frågor är endast tillgängligt för semantiska modeller som finns på en Power BI kapacitet (Premium, Fabric eller Embedded). Semantiska modeller utan kapacitetstilldelning stöds inte.
Power BI erbjuder två REST-API:er för att köra DAX-frågor. Välj den som matchar klientens funktioner:
-
Kör DAX-frågor (pil) – Använd när klientprogrammet kan använda binära Arrow IPC-strömmar. Arrow levererar mindre nyttolaster, förlustfri typfidelitet och deserialisering utan kopiering till kolumnbaserade ramverk som pandas, Polars och Apache Spark. Det här API:et stöder även avancerade parametrar som
queryTimeoutochresultsetRowcountLimit. Kräver Premium- eller Fabric kapacitet. - Execute Queries (JSON) – Använd när din konsument är en plattform med låg kod/ingen kod, Power Automate flöde eller något verktyg som bara kan parsa JSON. Det här API:et fungerar på Pro-, PPU- och Premium/Fabric-kapaciteter men har en hård gräns på 100 000 rader och 1 000 000 värden per fråga.
Om resultatuppsättningen överskrider några hundra rader, matas in i en analyskedja eller kräver exakt typåtergivning bör du använda API för att köra DAX-frågor med Arrow.
Optimera DAX-frågor för Arrow-endpointen
Effektiv DAX minskar både frågekörningstiden och svarsnyttolastens storlek:
- Returnera endast de kolumner du behöver. Använd
SELECTCOLUMNSeller explicita kolumnlistor i stället för att returnera hela tabeller. Varje extra kolumn läggs till i schemat och registrerar batchstorleken. - Föredrar
SUMMARIZECOLUMNSöverADDCOLUMNSmedFILTER.SUMMARIZECOLUMNSskapar effektivare frågeplaner i VertiPaq-motorn. - Använd
TOPNför att begränsa rader. När du bara behöver de högsta resultaten pressarTOPNbegränsningen direkt till motorn istället för att överföra alla rader och filtrera på klientsidan. - Undvik komplexa beräknade kolumner i frågor. Mått och aggregeringar är bra, men beräkningar på radnivå i stora tabeller kan betydligt försämra prestandan.
- Kombinera flera
EVALUATEuttryck i en enda begäran. API:t Utför DAX-frågor stöder fleraEVALUATEinstruktioner i enquerysträng, var och en returnerar en separat resultatuppsättning. På så sätt undviks omkostnaderna för separata HTTP-turer.
Hantera autentisering effektivt
- Cachelagrar och återanvänder token. Använd MSAL:s inbyggda tokencache för att undvika att anropa Microsoft Entra ID på varje begäran. För konfidentiella klientflöden cachelagrar MSAL token automatiskt när du återanvänder samma
ConfidentialClientApplicationinstans. - Använd konfidentiella klientautentiseringsuppgifter för tjänster. För obevakade tjänster på mellannivå använder du klientautentiseringsuppgifter (klienthemlighet eller certifikat) i stället för delegerade användartoken. Detta förhindrar beroende av en inloggad användarsession.
- Föredrar hanterade identiteter i Azure. När tjänsten körs i Azure (App Service, Functions, AKS) använder du en hanterad identitet för att helt eliminera autentiseringshantering.
- Hantera tokens förfallotid på ett korrekt sätt. Åtkomsttoken upphör vanligtvis att gälla efter en timme.
401 UnauthorizedSök efter svar och uppdatera token innan du försöker igen.
Hantera fel och återförsök
API:et Kör DAX-frågor kan returnera fel på två sätt:
HTTP-nivåfel – Standard-HTTP-statuskoder med en JSON-feltext. Vanliga koder:
Statuskod Meaning Action 400Felaktig begäran (ogiltig DAX, parametrar saknas) Åtgärda begäran – försök inte igen. 401Obehörig (förfallen eller ogiltig token) Uppdatera token och försök igen en gång. 403Förbjudet (otillräcklig behörighet) Kontrollera att anroparen har behörighet för Bygg och Läsa på den semantiska modellen. 429För många förfrågningar (begränsning) Vänta på varaktigheten Retry-Afteri rubriken och försök sedan igen.500/502/503Tillfälliga serverfel Försök igen med exponentiell backoff. Fel på strömnivå – HTTP 200 med en felraduppsättning inbäddad i Arrow-svaret. Kontrollera pilschemametadata för
IsError=trueoch läsFaultCodemetadatavärdena ochFaultStringplus felraderna för detaljerad platsinformation.
För tillfälliga fel ska exponentiell backoff med jitter implementeras. Börja med en sekund, dubbel på varje nytt försök och begränsa till 30 sekunder. Begränsa återförsök till tre eller fyra försök.
Kontrollera resultatuppsättningens storlek
Stora resultatuppsättningar förbrukar minne på både kapaciteten i tjänsten och den anropande klienten. Varje begäran är bunden av kapacitetens minnesgräns.
Så här behåller du resultatuppsättningar hanterbara:
- Ange
resultsetRowcountLimiti begärandetexten. Detta framtvingar en radgräns på serversidan per resultatuppsättning. Om du vet att din konsument bara behöver 10 000 rader anger du gränsen explicit. - Använd
TOPNi DIN DAX-fråga.TOPNbegränsar rader på motornivå, vilket är mer effektivt än att begränsa på klientsidan. - Bearbeta dataposter batcherna stegvis. Arrow-svar delas upp i postbatchar med upp till 100 000 rader. I Python itererar du över batchar med
reader.read_next_batch()i stället för att anropareader.read_all()när du arbetar med stora resultat för att hålla minnesanvändningen konstant.
Skydda din tjänst på mellannivå
Om du skapar en tjänst på mellannivå som är en proxytjänst för DAX-frågor till nedströmskonsumenter:
- Verifiera uppringarens identitet. Autentisera inkommande begäranden med Microsoft Entra ID eller en annan identitetsprovider innan du vidarebefordrar frågor till Power BI. Exponera aldrig API-slutpunkten "Execute DAX Queries" som en öppen proxy.
- Framtvinga minsta behörighet. Bevilja tjänstens huvudkonto endast de behörigheter som krävs (Bygga och läsa på specifika semantiska modeller). Använd inte administratörs- eller klientorganisationsadministratörsroller för API-åtkomst.
- Bädda inte in autentiseringsuppgifter i kod. Lagra klienthemligheter i Azure Key Vault eller använd hanterade identiteter. Rotera hemligheter enligt ett regelbundet schema.
- Sanera DAX-indata. Om ditt mellannivåssystem accepterar DAX-frågetext från anropare ska du validera indata för att förhindra injicering av oväntade operationer.
- Använd parametern
effectiveUsernamemed försiktighet. Den här parametern gäller Row-Level Säkerhet för en viss användares räkning. Kontrollera att den anropande identiteten har behörighet att personifiera den angivna användaren.
Övervaka och logga
Spåra hälsotillståndet och prestandan för din API-användning:
- Loggfrågasmetadata – Registrera frågetexten, svarsstorleken, HTTP-statusen och varaktigheten för varje begäran. Detta hjälper dig att identifiera långsamma frågor och oväntade feltoppar.
-
Övervaka begränsningsfrekvenser – Spåra
429svar som en procentandel av de totala begärandena. En ökande trend indikerar att du måste minska begärandefrekvensen eller sprida belastningen över tid. - Mät deserialiseringstiden – För Arrow-svar loggar du den tid som ägnas åt att läsa och materialisera postbatcherna separat från HTTP-tur och retur-tiden. Detta hjälper till att skilja nätverksfördröjning från bearbetning på klientsidan.
- Använd Application Insights eller motsvarande – Om mellannivån körs i Azure aktiverar du Application Insights för att hämta beroendespårning, felaviseringar och distribuerad spårning från slutpunkt till slutpunkt.
- Spåra träfffrekvenser för tokencache – Låga cacheträffar innebär frekventa tokenhämtningsanrop, vilket lägger till svarstid och är ett tecken på felkonfigurerad MSAL-cachelagring.