Továbbfejlesztett frissítés a Power BI REST API-val
Bármely olyan programozási nyelvet használhat, amely támogatja a REST-hívásokat szemantikai modellfrissítési műveletek végrehajtásához a Power BI Refresh Dataset REST API használatával.
A nagy és összetett particionált modellek optimalizált frissítését hagyományosan tom (táblázatos objektummodell), PowerShell-parancsmagok vagy TMSL (táblázatos modellszkriptnyelv) használó programozási módszerekkel hívjuk meg. Ezek a módszerek azonban hosszú ideig futó HTTP-kapcsolatokat igényelnek, amelyek megbízhatatlanok lehetnek.
A Power BI Refresh Dataset REST API aszinkron módon hajthatja végre a modellfrissítési műveleteket, így az ügyfélalkalmazásokból származó, hosszú ideig futó HTTP-kapcsolatokra nincs szükség. A standard frissítési műveletekhez képest a REST API-val végzett továbbfejlesztett frissítés további testreszabási lehetőségeket és a nagy modellekhez hasznos alábbi funkciókat nyújt:
- Kötegelt véglegesítések
- Tábla- és partíciószintű frissítés
- Növekményes frissítési szabályzatok alkalmazása
GET
frissítés részletei- Frissítés lemondása
Feljegyzés
- Korábban a bővített frissítést aszinkron frissítésnek nevezték a REST API-val. Az adathalmaz rest API-t használó standard frissítés azonban aszinkron módon is fut a természetéből adódóan.
- A bővített Power BI REST API-frissítési műveletek nem frissítik automatikusan a csempék gyorsítótárait. A csempegyorsítótárak csak akkor frissülnek, ha egy felhasználó hozzáfér egy jelentéshez.
Kiindulási URL-cím
Az alap URL-cím formátuma a következő:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes
Az erőforrásokat és műveleteket paraméterek alapján hozzáfűzheti az alap URL-címhez. Az alábbi ábrán a Csoportok, az Adatkészletek és a Frissítések gyűjtemények. A csoportosítás, az adatkészlet és a frissítés objektumok.
Követelmények
A REST API használatához a következő követelmények szükségesek:
- Szemantikai modell a Power BI Premiumban, felhasználónkénti Premium vagy Power BI Embeddedben.
- A kérelem URL-címében használandó csoportazonosító és adatkészlet-azonosító.
- Dataset.ReadWrite.All engedély hatóköre.
A frissítések száma a Pro- és Premium-modellek API-alapú frissítéseinek általános korlátozásai szerint korlátozott.
Hitelesítés
Minden hívásnak hitelesítenie kell magát egy érvényes Microsoft Entra ID OAuth 2 jogkivonattal az Engedélyezés fejlécben. A jogkivonatnak meg kell felelnie a következő követelményeknek:
- Legyen felhasználói jogkivonat vagy alkalmazásszolgáltatás-tag.
- Állítsa be a célközönséget helyesen a következőre
https://api.powerbi.com
: . - Olyan felhasználó vagy alkalmazás használhatja, amely rendelkezik a modellre vonatkozó megfelelő engedélyekkel.
Feljegyzés
A REST API-módosítások nem módosítják a modellfrissítések jelenleg definiált engedélyeit.
POST /refreshs
Frissítéshez a /refreshes gyűjtemény POST parancsával adjon hozzá egy új frissítési objektumot a gyűjteményhez. A válaszBan a Hely fejléc tartalmazza a requestId
. Mivel a művelet aszinkron, az ügyfélalkalmazások leválaszthatják a kapcsolatot, és szükség requestId
esetén később ellenőrizhetik az állapotot.
Az alábbi kód egy mintakérést mutat be:
POST https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes
A kérelem törzse a következő példához hasonlíthat:
{
"type": "Full",
"commitMode": "transactional",
"maxParallelism": 2,
"retryCount": 2,
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Feljegyzés
A szolgáltatás egyszerre csak egy frissítési műveletet fogad el egy modellhez. Ha folyamatban van egy aktuális frissítés, és egy másik kérés is el van küldve, egy 400 Bad Request
HTTP-állapotkód jelenik meg.
Paraméterek
Továbbfejlesztett frissítési művelet végrehajtásához meg kell adnia egy vagy több paramétert a kérelem törzsében. A megadott paraméterek megadhatják az alapértelmezett vagy nem kötelező értéket. Amikor a kérelem paramétereket ad meg, az összes többi paraméter az alapértelmezett értékekkel érvényes a műveletre. Ha a kérés nem ad meg paramétereket, az összes paraméter az alapértelmezett értékeket használja, és egy szabványos frissítési művelet történik.
Név | Típus | Alapértelmezett | Leírás |
---|---|---|---|
type |
Enum | automatic |
A végrehajtandó feldolgozás típusa. A típusok a TMSL frissítési parancstípusaihoz igazodnak: full , clearValues , calculate , dataOnly , automatic és defragment . A add típus nem támogatott. |
commitMode |
Enum | transactional |
Meghatározza, hogy kötegekben vagy csak akkor véglegesítse az objektumokat, ha befejeződött. A módok és partialBatch a transactional . A frissítési művelet használata partialBatch nem egy tranzakción belül történik. Az egyes parancsok külön-külön lesznek véglegesve. Hiba esetén előfordulhat, hogy a modell üres, vagy csak az adatok egy részhalmazát tartalmazza. A hiba elleni védelem érdekében és a modellben a művelet megkezdése előtt tárolt adatok megőrzéséhez hajtsa végre a műveletet a következővel commitMode = transactional : . |
maxParallelism |
Int | 10 |
Meghatározza azoknak a szálaknak a maximális számát, amelyek párhuzamosan futtathatják a feldolgozási parancsokat. Ez az MaxParallelism érték a TMSL Sequence parancsban vagy más metódusok használatával beállítható tulajdonsághoz igazodik. |
retryCount |
Int | 0 |
Hányszor próbálkozik újra a művelet a sikertelenség előtt. |
objects |
Tömb | Teljes modell | Feldolgozandó objektumok tömbje. Minden objektum magában foglalja table egy teljes tábla feldolgozását, vagy partition table egy partíció feldolgozását. Ha nincs megadva objektum, a teljes modell frissül. |
applyRefreshPolicy |
Logikai | true |
Ha növekményes frissítési szabályzat van definiálva, meghatározza, hogy alkalmazza-e a szabályzatot. A módok a következők: true vagy false . Ha a szabályzat nincs alkalmazva, a teljes folyamat változatlanul hagyja a partíciódefiníciókat, és teljes mértékben frissíti a tábla összes partícióját. Ha commitMode igen transactional , applyRefreshPolicy lehet true vagy false . Ha commitMode igen partialBatch , applyRefreshPolicy az értéke true nem támogatott, és applyRefreshPolicy a következőre kell állítani: false . |
effectiveDate |
Dátum | Aktuális dátum | Növekményes frissítési szabályzat alkalmazása esetén a effectiveDate paraméter felülírja az aktuális dátumot. Ha nincs megadva, az UTC az aktuális nap meghatározására szolgál. |
Válasz
202 Accepted
A válasz tartalmaz egy Location
válaszfejmezőt is, amely a hívót a létrehozott és elfogadott frissítési műveletre mutatja. A Location
kérelem által létrehozott új erőforrás helye, amely magában foglalja a requestId
továbbfejlesztett frissítési műveletekhez szükséges helyet. Az alábbi válaszban requestId
például a válasz 87f31ef7-1e3a-4006-9b0b-191693e79e9e
utolsó azonosítója.
x-ms-request-id: 87f31ef7-1e3a-4006-9b0b-191693e79e9e
Location: https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes/87f31ef7-1e3a-4006-9b0b-191693e79e9e
GET /refreshs
A /refreshes gyűjtemény GET parancsával listázhatja a korábbi, az aktuális és a függőben lévő frissítési műveleteket.
A válasz törzse a következő példához hasonlóan nézhet ki:
[
{
"requestId": "1344a272-7893-4afa-a4b3-3fb87222fdac",
"refreshType": "ViaEnhancedApi",
"startTime": "2020-12-07T02:06:57.1838734Z",
"endTime": "2020-12-07T02:07:00.4929675Z",
"status": "Completed",
"extendedStatus": "Completed"
},
{
"requestId": "474fc5a0-3d69-4c5d-adb4-8a846fa5580b",
"startTime": "2020-12-07T01:05:54.157324Z",
"refreshType": "ViaEnhancedApi",
"endTime": "2020-12-07T01:05:57.353371Z",
"status": "Unknown"
}
{
"requestId": "85a82498-2209-428c-b273-f87b3a1eb905",
"refreshType": "ViaEnhancedApi",
"startTime": "2020-12-07T01:05:54.157324Z",
"endTime": "2020-12-07T01:05:57.353371Z",
"status": "Unknown",
"extendedStatus": "NotStarted"
}
]
Feljegyzés
A Power BI elvetheti a kérelmeket, ha rövid időn belül túl sok kérés van. A Power BI elvégzi a frissítést, várólistára állítja a következő kérést, és elveti az összes többit. Terv szerint nem kérdezheti le az elvetett kérelmek állapotát.
Választulajdonságok
Név | Típus | Leírás |
---|---|---|
requestId |
GUID | A frissítési kérelem azonosítója. Le kell kérdeznie az egyes frissítési műveletek állapotát, vagy le kell requestId mondania egy folyamatban lévő frissítési műveletet. |
refreshType |
Sztring | OnDemand azt jelzi, hogy a frissítés interaktív módon aktiválódott a Power BI portálon.Scheduled azt jelzi, hogy egy modellfrissítési ütemezés aktiválta a frissítést. ViaApi azt jelzi, hogy egy API-hívás aktiválta a frissítést. ViaEnhancedApi azt jelzi, hogy egy API-hívás továbbfejlesztett frissítést váltott ki. |
startTime |
Sztring | A frissítés kezdete és időpontja. |
endTime |
Sztring | A frissítés befejezésének dátuma és időpontja. |
status |
Sztring | Completed azt jelzi, hogy a frissítési művelet sikeresen befejeződött. Failed azt jelzi, hogy a frissítési művelet meghiúsult. Unknown azt jelzi, hogy a befejezési állapot nem határozható meg. Ezzel az állapottal üres endTime . Disabled azt jelzi, hogy a frissítés szelektív frissítéssel lett letiltva. Cancelled azt jelzi, hogy a frissítés sikeresen megszakadt. |
extendedStatus |
Sztring | Bővíti a status tulajdonságot, hogy további információt nyújtson. |
Feljegyzés
Az Azure Analysis Servicesben a befejezett status
eredmény az succeeded
. Ha migrál egy Azure Analysis Services-megoldást a Power BI-ba, előfordulhat, hogy módosítania kell a megoldásait.
A visszaadott frissítési műveletek számának korlátozása
A Power BI REST API támogatja a frissítési előzményekben kért bejegyzések számának korlátozását az opcionális $top
paraméter használatával. Ha nincs megadva, az alapértelmezett érték az összes elérhető bejegyzés.
GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes?$top={$top}
GET /refreshes/<requestId>
A frissítési művelet állapotának ellenőrzéséhez használja a GET parancsot a frissítési objektumon a requestId
beállítás megadásával. Ha a művelet folyamatban van, status
a következő példaválasz törzséhez hasonlóan ad vissza eredményt InProgress
:
{
"startTime": "2020-12-07T02:06:57.1838734Z",
"endTime": "2020-12-07T02:07:00.4929675Z",
"type": "Full",
"status": "InProgress",
"currentRefreshType": "Full",
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer",
"status": "InProgress"
},
{
"table": "DimDate",
"partition": "DimDate",
"status": "InProgress"
}
]
}
DELETE /refreshes/<requestId>
A folyamatban lévő bővített frissítési művelet megszakításához használja a DELETE parancsot a frissítési objektumon a requestId
következő megadásával:
Például:
DELETE https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes/1344a272-7893-4afa-a4b3-3fb87222fdac
Szempontok és korlátozások
A frissítési művelet a következő szempontokat és korlátozásokat tartalmazza:
Standard frissítési műveletek
- Az ütemezett vagy igény szerinti manuális modellfrissítéseket nem szakíthatja meg a használatával
DELETE /refreshes/<requestId>
. - Az ütemezett és igény szerinti manuális modellfrissítések nem támogatják a frissítési művelet részleteinek lekérését a használatával
GET /refreshes/<requestId>
. - A részletek lekérése és a Mégse funkció csak a továbbfejlesztett frissítéshez használható új műveletek. A standard frissítés nem támogatja ezeket a műveleteket.
Power BI Embedded
Ha a kapacitást manuálisan szünetelteti a Power BI portálon vagy a PowerShell használatával, vagy rendszerkimaradás történik, a folyamatban lévő továbbfejlesztett frissítési műveletek állapota legfeljebb hat óráig tart InProgress
. Ha a kapacitás hat órán belül újraindul, a frissítési művelet automatikusan folytatódik. Ha a kapacitás hat óránál tovább folytatódik, a frissítési művelet időtúllépési hibát eredményezhet. Ezután újra kell indítania a frissítési műveletet.
Szemantikai modell kizárása
A Power BI dinamikus memóriakezelést használ a kapacitásmemória optimalizálásához. Ha a modell egy frissítési művelet során ki van távolítva a memóriából, a következő hiba fordulhat elő:
{
"messages": [
{
"code": "0xC11C0020",
"message": "Session cancelled because it is connected to a database that has been evicted to free up memory for other operations",
"type": "Error"
}
]
}
A megoldás a frissítési művelet újrafuttatása. A dinamikus memóriakezelésről és a modellkilakoltatásról további információt a Modell kizárása című témakörben talál.
A frissítési művelet időkorlátjai
Egyetlen frissítési művelet maximális időtartama öt óra. Ha a frissítési művelet nem fejeződik be az öt órás korláton belül, és retryCount
nincs megadva, vagy a kérés törzsében (alapértelmezettként) van megadva 0
, időtúllépési hiba jelenik meg.
Ha retryCount
megadja 1
vagy egy másik számot, egy új, ötórás korláttal rendelkező frissítési művelet indul el. Ha ez az újrapróbálkozási művelet meghiúsul, a szolgáltatás továbbra is újrapróbálkozza a frissítési műveletet a megadott legnagyobb számú újrapróbálkozásig retryCount
, vagy az első frissítési kérelem kezdetétől számítva 24 órás bővített frissítésfeldolgozási időkorlátig.
Ha a továbbfejlesztett modellfrissítési megoldást a Refresh Dataset REST API-val tervezi, fontos figyelembe venni ezeket az időkorlátokat és a paramétert retryCount
. A sikeres frissítés végrehajtása öt órát is meghaladhat, ha egy kezdeti frissítési művelet meghiúsul, és retryCount
megadja 1
vagy tovább.
Ha például frissítési műveletet "retryCount": 1
kér, és a kezdeti újrapróbálkozási művelet a kezdési időponttól számítva négy órával meghiúsul, megkezdődik a kérés második frissítési művelete. Ha a második frissítési művelet három órán belül sikeres lesz, a frissítési kérelem sikeres végrehajtásának teljes időtartama hét óra.
Ha a frissítési műveletek rendszeresen sikertelenek, túllépik az ötórás időtartamot, vagy túllépik a kívánt sikeres frissítési művelet időtartamát, érdemes lehet csökkenteni az adatforrásból frissítendő adatok mennyiségét. A frissítést több kérelemre is feloszthatja, például az egyes táblákra vonatkozó kéréseket. A paraméterben commitMode
is megadhatópartialBatch
.
Kódminta
Az első lépésekhez C#-kódmintát a RestApiSample a GitHubon című témakörben talál.
A kódminta használata:
- Klónozza vagy töltse le az adattárat.
- Nyissa meg a RestApiSample-megoldást.
- Keresse meg a sort
client.BaseAddress = …
, és adja meg az alap URL-címet.
A kódminta szolgáltatásnév-hitelesítést használ.