Refresh yang disempurnakan dengan Power BI REST API
Anda dapat menggunakan bahasa pemrograman apa pun yang mendukung panggilan REST untuk melakukan operasi refresh model semantik dengan menggunakan Rest API Himpunan Data Refresh Power BI.
Refresh yang dioptimalkan untuk model partisi besar dan kompleks secara tradisional dipanggil dengan metode pemrograman yang menggunakan TOM (Model Objek Tabular), cmdlet PowerShell, atau TMSL (Bahasa Pembuatan Skrip Model Tabular). Namun, metode ini memerlukan koneksi HTTP yang berjalan lama yang tidak dapat diandalkan.
Rest API Himpunan Data Refresh Power BI dapat melakukan operasi refresh model secara asinkron, sehingga koneksi HTTP yang berjalan lama dari aplikasi klien tidak diperlukan. Dibandingkan dengan operasi refresh standar, refresh yang disempurnakan dengan REST API menyediakan lebih banyak opsi kustomisasi dan fitur berikut yang berguna untuk model besar:
- Penerapan batch
- Refresh tingkat partisi dan tabel
- Menerapkan kebijakan refresh bertahap
GET
detail refresh- Refresh pembatalan
Catatan
- Sebelumnya, refresh yang ditingkatkan disebut refresh asinkron dengan REST API. Namun, refresh standar yang menggunakan Refresh Dataset REST API juga berjalan secara asinkron berdasarkan sifatnya yang melekat.
- Operasi refresh Power BI REST API yang disempurnakan tidak secara otomatis me-refresh cache petak peta. Cache petak peta hanya di-refresh saat pengguna mengakses laporan.
URL Dasar
URL dasar dalam format berikut:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes
Anda dapat menambahkan sumber daya dan operasi ke URL dasar berdasarkan parameter. Dalam diagram berikut, Grup, Himpunan Data, dan Refresh adalah koleksi. Grup, Himpunan Data, dan Refresh adalah objek.
Persyaratan
Anda memerlukan persyaratan berikut untuk menggunakan REST API:
- Model semantik di Power BI Premium, Premium per pengguna, atau Power BI Embedded.
- ID grup dan ID himpunan data untuk digunakan dalam URL permintaan.
- Cakupan izin Dataset.ReadWrite.All .
Jumlah refresh dibatasi per batasan umum untuk refresh berbasis API untuk model Pro dan Premium.
Autentikasi
Semua panggilan harus mengautentikasi dengan token Microsoft Entra ID OAuth 2 yang valid di header Otorisasi. Token harus memenuhi persyaratan berikut:
- Jadilah token pengguna atau perwakilan layanan aplikasi.
- Atur audiens dengan benar ke
https://api.powerbi.com
. - Digunakan oleh pengguna atau aplikasi yang memiliki izin yang memadai pada model.
Catatan
Modifikasi REST API tidak mengubah izin yang saat ini ditentukan untuk refresh model.
POST /refreshes
Untuk melakukan refresh, gunakan kata kerja POST pada koleksi /refreshes untuk menambahkan objek refresh baru ke koleksi. Header Lokasi dalam respons menyertakan requestId
. Karena operasi ini tidak sinkron, aplikasi klien dapat memutuskan sambungan dan menggunakan requestId
untuk memeriksa status nanti jika perlu.
Kode berikut menunjukkan contoh permintaan:
POST https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes
Isi permintaan mungkin menyerupai contoh berikut:
{
"type": "Full",
"commitMode": "transactional",
"maxParallelism": 2,
"retryCount": 2,
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Catatan
Layanan hanya menerima satu operasi refresh pada satu waktu untuk model. Jika ada refresh yang sedang berjalan dan permintaan lain dikirimkan, 400 Bad Request
kode status HTTP akan ditampilkan.
Parameter
Untuk melakukan operasi refresh yang ditingkatkan, Anda harus menentukan satu atau beberapa parameter dalam isi permintaan. Parameter yang ditentukan dapat menentukan nilai default atau opsional. Saat permintaan menentukan parameter, semua parameter lain berlaku untuk operasi dengan nilai defaultnya. Jika permintaan tidak menentukan parameter, semua parameter menggunakan nilai defaultnya, dan operasi refresh standar terjadi.
Nama | Jenis | Default | Deskripsi |
---|---|---|---|
type |
Enum | automatic |
Jenis pemrosesan yang akan dilakukan. Jenis selaras dengan jenis perintah refresh TMSL: full , , clearValues , dataOnly calculate , automatic , dan defragment . add Jenis tidak didukung. |
commitMode |
Enum | transactional |
Menentukan apakah akan menerapkan objek dalam batch atau hanya ketika selesai. Mode adalah transactional dan partialBatch . Saat menggunakan partialBatch operasi refresh tidak terjadi dalam satu transaksi. Setiap perintah diterapkan satu per satu. Jika ada kegagalan, model mungkin kosong atau hanya menyertakan subset data. Untuk melindungi dari kegagalan dan menyimpan data yang ada dalam model sebelum operasi dimulai, jalankan operasi dengan commitMode = transactional . |
maxParallelism |
Int | 10 |
Menentukan jumlah maksimum utas yang dapat menjalankan perintah pemrosesan secara paralel. Nilai ini selaras dengan MaxParallelism properti yang dapat diatur dalam perintah TMSL Sequence atau dengan menggunakan metode lain. |
retryCount |
Int | 0 |
Berapa kali operasi mencoba kembali sebelum gagal. |
objects |
Array | Seluruh model | Array objek yang akan diproses. Setiap objek mencakup table saat memproses seluruh tabel, atau table dan partition saat memproses partisi. Jika tidak ada objek yang ditentukan, seluruh model akan di-refresh. |
applyRefreshPolicy |
Boolean | true |
Jika kebijakan refresh bertahap ditentukan, menentukan apakah akan menerapkan kebijakan. Mode adalah true atau false . Jika kebijakan tidak diterapkan, proses penuh membuat definisi partisi tidak berubah, dan sepenuhnya me-refresh semua partisi dalam tabel. Jika commitMode adalah transactional , applyRefreshPolicy bisa atau true false . Jika commitMode adalah partialBatch , applyRefreshPolicy tidak true didukung, dan applyRefreshPolicy harus diatur ke false . |
effectiveDate |
Date | Tanggal saat ini | Jika kebijakan refresh bertahap diterapkan, parameter effectiveDate akan mengambil alih tanggal saat ini. Jika tidak ditentukan, UTC digunakan untuk menentukan hari ini. |
Respons
202 Accepted
Respons juga menyertakan Location
bidang header respons untuk mengarahkan pemanggil ke operasi refresh yang dibuat dan diterima. Location
adalah lokasi sumber daya baru yang dibuat permintaan, yang mencakup requestId
yang diperlukan beberapa operasi refresh yang disempurnakan. Misalnya, dalam respons berikut, requestId
adalah pengidentifikasi terakhir dalam respons 87f31ef7-1e3a-4006-9b0b-191693e79e9e
.
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 /refreshes
Gunakan kata kerja GET pada koleksi /refreshes untuk mencantumkan operasi refresh historis, saat ini, dan tertunda.
Isi respons mungkin terlihat seperti contoh berikut:
[
{
"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"
}
]
Catatan
Power BI mungkin menghilangkan permintaan jika ada terlalu banyak permintaan dalam waktu singkat. Power BI melakukan refresh, mengantrekan permintaan berikutnya, dan menghilangkan semua permintaan lainnya. Secara desain, Anda tidak dapat mengkueri status pada permintaan yang dihilangkan.
Properti respons
Nama | Tipe | Deskripsi |
---|---|---|
requestId |
Guid | Pengidentifikasi permintaan refresh. Anda perlu requestId mengkueri status operasi refresh individual atau membatalkan operasi refresh yang sedang berlangsung. |
refreshType |
String | OnDemand menunjukkan refresh dipicu secara interaktif melalui portal Power BI.Scheduled menunjukkan bahwa jadwal refresh model memicu refresh. ViaApi menunjukkan bahwa panggilan API memicu refresh. ViaEnhancedApi menunjukkan bahwa panggilan API memicu refresh yang ditingkatkan. |
startTime |
String | Tanggal dan waktu mulai refresh. |
endTime |
String | Tanggal dan waktu refresh berakhir. |
status |
String | Completed menunjukkan operasi refresh berhasil diselesaikan. Failed menunjukkan operasi refresh gagal. Unknown menunjukkan bahwa status penyelesaian tidak dapat ditentukan. Dengan status ini, endTime kosong. Disabled menunjukkan bahwa refresh dinonaktifkan oleh refresh selektif. Cancelled menunjukkan bahwa refresh berhasil dibatalkan. |
extendedStatus |
String | status Menambah properti untuk memberikan informasi lebih lanjut. |
Catatan
Di Azure Analysis Services, hasil yang selesai status
adalah succeeded
. Jika Anda memigrasikan solusi Azure Analysis Services ke Power BI, Anda mungkin harus mengubah solusi Anda.
Batasi jumlah operasi refresh yang dikembalikan
Rest API Power BI mendukung pembatasan jumlah entri yang diminta dalam riwayat refresh dengan menggunakan parameter opsional $top
. Jika tidak ditentukan, defaultnya adalah semua entri yang tersedia.
GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes?$top={$top}
GET /refreshes/<requestId>
Untuk memeriksa status operasi refresh, gunakan kata kerja GET pada objek refresh dengan menentukan requestId
. Jika operasi sedang berlangsung, status
mengembalikan InProgress
, seperti dalam contoh isi respons berikut:
{
"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"
}
]
}
HAPUS /refreshes/<requestId>
Untuk membatalkan operasi refresh yang sedang berlangsung, gunakan kata kerja DELETE pada objek refresh dengan menentukan requestId
.
Contohnya,
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
Pertimbangan dan batasan
Operasi refresh memiliki pertimbangan dan batasan berikut:
Operasi refresh standar
- Anda tidak dapat membatalkan refresh model manual terjadwal atau sesuai permintaan dengan menggunakan
DELETE /refreshes/<requestId>
. - Refresh model manual terjadwal dan sesuai permintaan tidak mendukung mendapatkan detail operasi refresh dengan menggunakan
GET /refreshes/<requestId>
. - Dapatkan detail dan Batalkan adalah operasi baru untuk refresh yang disempurnakan saja. Refresh standar tidak mendukung operasi ini.
Power BI Embedded
Jika kapasitas dijeda secara manual di portal Power BI atau dengan menggunakan PowerShell, atau terjadi pemadaman sistem, status operasi refresh yang ditingkatkan yang sedang berlangsung tetap InProgress
selama maksimal enam jam. Jika kapasitas dilanjutkan dalam waktu enam jam, operasi refresh akan dilanjutkan secara otomatis. Jika kapasitas dilanjutkan setelah lebih dari enam jam, operasi refresh mungkin mengembalikan kesalahan waktu habis. Anda kemudian harus memulai ulang operasi refresh.
Pengeluaran model semantik
Power BI menggunakan manajemen memori dinamis untuk mengoptimalkan memori kapasitas. Jika model dikeluarkan dari memori selama operasi refresh, kesalahan berikut mungkin kembali:
{
"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"
}
]
}
Solusinya adalah menjalankan kembali operasi refresh. Untuk mempelajari selengkapnya tentang manajemen memori dinamis dan pengeluaran model, lihat Pengeluaran model.
Menyegarkan batas waktu operasi
Jumlah waktu maksimum untuk operasi refresh tunggal adalah lima jam. Jika operasi refresh tidak berhasil diselesaikan dalam batas lima jam, dan retryCount
tidak ditentukan atau ditentukan sebagai 0
(default) dalam isi permintaan, kesalahan waktu habis akan kembali.
Jika retryCount
menentukan 1
atau nomor lain, operasi refresh baru dengan batas lima jam dimulai. Jika operasi coba lagi ini gagal, layanan terus mencoba kembali operasi refresh hingga jumlah percobaan ulang terbesar yang ditentukan, atau batas waktu pemrosesan refresh yang retryCount
disempurnakan 24 jam dari awal permintaan refresh pertama.
Saat Anda merencanakan solusi refresh model yang disempurnakan dengan Refresh Himpunan Data REST API, penting untuk mempertimbangkan batas waktu dan parameter ini retryCount
. Penyelesaian refresh yang berhasil dapat melebihi lima jam jika operasi refresh awal gagal dan retryCount
menentukan 1
atau lebih.
Misalnya, jika Anda meminta operasi refresh dengan "retryCount": 1
, dan operasi coba lagi awal gagal empat jam dari waktu mulai, operasi refresh kedua untuk permintaan tersebut dimulai. Jika operasi refresh kedua berhasil dalam tiga jam, total waktu untuk keberhasilan eksekusi permintaan refresh adalah tujuh jam.
Jika operasi refresh gagal secara teratur, melebihi batas waktu lima jam, atau melebihi waktu operasi refresh yang berhasil yang Anda inginkan, pertimbangkan untuk mengurangi jumlah data yang di-refresh dari sumber data. Anda dapat membagi refresh menjadi beberapa permintaan, misalnya permintaan untuk setiap tabel. Anda juga dapat menentukan partialBatch
dalam commitMode
parameter .
Sampel kode
Untuk sampel kode C# untuk memulai, lihat RestApiSample di GitHub.
Untuk menggunakan sampel kode:
- Buat duplikat atau unduh repositori.
- Buka solusi RestApiSample.
- Temukan baris
client.BaseAddress = …
dan berikan URL dasar Anda.
Sampel ini menggunakan autentikasi perwakilan layanan.