Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara menggunakan partisi tabel panas dan dingin untuk mengoptimalkan model data yang sangat besar. Partisi menyediakan cara untuk membagi data tabel menjadi subset diskrit. Partisi tidak secara langsung diekspos di alat pemodelan data Power BI standar, tetapi Anda dapat memanfaatkan metode partisi tingkat lanjut dengan mengonfigurasi kebijakan penyegaran bertahap di Power BI Desktop. Refresh inkremental bergantung pada partisi, seperti yang dijelaskan dalam Refresh bertahap dan data real-time untuk himpunan data. Namun, mengonfigurasi partisi tabel aktif dan pasif melampaui apa yang dapat dicapai oleh kebijakan refresh bertahap dan memerlukan pemahaman tentang skema pemartisian tabel yang umum dan tool berbasiskan XMLA.
Prasyarat
Karena kompleksitas relatif dari teknik partisi ini, ini paling cocok untuk pengguna tingkat lanjut dengan pengalaman di area berikut:
Memahami konsep partisi tabel, cara kerja partisi mode pengimporan, mode DirectQuery, dan mode Dual.
Pengetahuan tentang cara membuat tabel hibrid menggunakan alat berbasis XMLA. Tabel hibrid menggunakan satu atau beberapa partisi mode impor dan satu partisi DirectQuery .
Pengetahuan tentang persyaratan fungsi DAX yang dapat Anda gunakan untuk menentukan
DataCoverageDefinition. Ini adalah properti baru untuk partisi DirectQuery untuk menjelaskan data apa yang dimuat partisi DirectQuery dari tabel hibrid sehingga mesin Power BI dapat mengecualikan partisi ini dari pemrosesan kueri jika sesuai. Mengecualikan partisi DirectQuery dapat membantu menghindari kueri sumber data yang tidak perlu dan meningkatkan performa pemrosesan kueri DAX.Memahami perbedaan antara hubungan tabel reguler dan terbatas. Misalnya, fungsi RELATED berguna jika Anda ingin menentukan cakupan data partisi tabel fakta berdasarkan nilai dari tabel dimensi tanggal terkait. Perlu diingat bahwa partisi tabel fakta adalah partisi DirectQuery dengan kemungkinan hubungan terbatas dengan tabel tanggal di mana fungsi RELATED tidak dapat mengambil nilai. Dalam skenario ini, RELATED hanya berfungsi jika tabel dimensi tanggal adalah tabel ganda. Tabel tanggal harus dalam mode DirectQuery atau Dual . Ini tidak bisa hanya diimpor.
Ketahuilah bahwa pengaturan DataCoverageDefinition yang salah dapat menyebabkan hasil yang keliru karena Power BI mungkin salah mengecualikan partisi DirectQuery dari pemrosesan kueri. Jadi, pastikan Anda membandingkan hasilnya dengan dan tanpa DataCoverageDefinition untuk memastikan hasilnya sesuai.
Kapan menggunakan partisi tabel panas dan dingin
Berikut adalah contoh di mana partisi panas dan dingin dapat membantu menyempurnakan tabel hibrid untuk analisis historis. Asumsikan Anda memiliki sumber data yang sangat besar, terakumulasi selama bertahun-tahun. Penggunaan utamanya adalah menganalisis data terbaru dari beberapa tahun terakhir. Terkadang, Anda juga ingin menganalisis data yang lebih lama. Mungkin Anda melihat peningkatan penjualan yang tajam baru-baru ini dari tahun ke tahun. Apakah itu pernah terjadi sebelumnya? Apakah lonjakan penjualan tertinggi sejak awal pelacakan penjualan?
Tanpa dukungan untuk partisi panas dan dingin, analisis historis semacam ini akan mengharuskan Anda untuk mengimpor semua data historis bersama dengan data yang lebih baru ke dalam tabel fakta. Yang terbaik, ini adalah penggunaan sumber daya yang tidak efisien karena analisis utama bahkan tidak menggunakan data historis yang lebih lama. Paling buruk, volume data sangat besar sehingga bahkan tidak dapat diimpor secara penuh. Anda harus mengalihkan model data ke mode DirectQuery dan menerima penalti performa dibandingkan dengan mode impor, atau Anda dapat membangun model terpisah dan memaksa pengguna Anda untuk beralih antar laporan. Tabel hibrid dengan partisi panas dan dingin memberi Anda pilihan yang lebih baik.
Cara menggunakan partisi tabel panas dan dingin
Pertama, konfigurasikan tabel penjualan dengan partisi mode impor panas untuk data terbaru dan simpan data lama dalam partisi DirectQuerydingin, seperti yang diilustrasikan diagram berikut untuk tabel FactInternetSales dari model data sampel AdventureWorks. Setiap baris dengan OrderDateKey yang lebih besar dari atau sama dengan 20200101 diimpor ke dalam model data melalui partisi mode impor panas. Baris dengan OrderDateKey kurang dari 20200101 dicakup melalui partisi DirectQuery dingin. Sekarang, Power BI dapat mengirimkan kasus penggunaan utama dengan cepat dengan mode impor, dan Anda tidak perlu mengimpor volume data historis yang luas yang hanya Anda analisis sesekali karena partisi DirectQuery telah membahas hal ini.
Jika Anda memiliki gudang data sampel AdventureWorks dan ingin mengikutinya, berikut adalah langkah-langkah umumnya:
Buat himpunan data. Gunakan Power BI Desktop untuk membuat himpunan data dan laporan AdventureWorks. Sertakan semua tabel dalam mode DirectQuery murni. Kemudian, konversikan semua tabel kecuali tabel
FactInternetSaleske Mode Dual.FactInternetSalesBiarkan tabel dalam mode DirectQuery.Unggah himpunan data. Gunakan ruang kerja yang dihosting di Power BI Premium dengan titik akhir XMLA diaktifkan untuk operasi tulis.
Perbarui tingkat kompatibilitas. Buka ruang kerja dengan himpunan data AdventureWorks Anda di SQL Server Management Studio (SSMS). Klik kanan himpunan data AdventureWorks>>Script Database sebagai Buat atau Ganti, dan pilih Jendela editor kueri baru. Atur properti compatibilityLevel ke 1603 (atau lebih tinggi). Pilih Jalankan atau tekan F5. Verifikasi bahwa operasi berhasil diselesaikan.
Konfigurasikan partisi tabel FactInternetSales. Klik kanan himpunan data AdventureWorks>Skrip>Skrip Basis Data sebagaiBuat atau Ganti ke, dan pilih jendela editor kueri baru. Ganti seluruh bagian partisi dengan bagian berikut. Pastikan Anda memperbarui baris Sql.Database untuk mengarahkan ke database AdventureWorksDW di lingkungan Anda. Pilih Jalankan atau tekan F5. Verifikasi bahwa operasi berhasil diselesaikan.
"partitions": [ { "name": "FactInternetSales-DQ-Partition", "mode": "directQuery", "dataView": "full", "source": { "type": "m", "expression": [ "let", " Source = Sql.Database(\"demo.database.windows.net\", \"AdventureWorksDW\"),", " dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data],", " #\"Filtered Rows\" = Table.SelectRows(dbo_FactInternetSales, each [OrderDateKey] < 20200101)", "in", " #\"Filtered Rows\"" ] } }, { "name": "FactInternetSales-Import-Partition", "mode": "import", "source": { "type": "m", "expression": [ "let", " Source = Sql.Database(\"demo.database.windows.net\", \"AdventureWorksDW\"),", " dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data],", " #\"Filtered Rows\" = Table.SelectRows(dbo_FactInternetSales, each [OrderDateKey] >= 20200101)", "in", " #\"Filtered Rows\"" ] } } ],Memproses model data. Di portal Power BI, buka ruang kerja dengan himpunan data AdventureWorks Anda dan lakukan refresh set data sesuai permintaan untuk memuat partisi impor dengan data.
Verifikasi bahwa laporan menunjukkan data terbaru dan historis. Buka AdventureWorks Anda dan verifikasi bahwa laporan dapat menampilkan hasil untuk transaksi penjualan sebelum dan sesudah 1 Jan 2020, seperti pada cuplikan layar berikut.
Menentukan cakupan data partisi DirectQuery
Solusi ini bekerja dengan mulus melalui data terbaru dan historis. Namun, secara default Power BI meminta semua partisi tabel, karena tidak tahu data apa yang dicakup setiap partisi. Oleh karena itu, Power BI masih meminta partisi DirectQuery bahkan untuk tahun-tahun yang tidak dicakup partisi DirectQuery. Data penjualan dengan mudah tersedia di partisi impor dan partisi DirectQuery tidak berkontribusi pada baris apa pun, tetapi kueri sumber yang tak diperlukan ini masih dapat menyebabkan beban nyata pada sumber data dan menyebabkan keterlambatan dalam pemrosesan DAX query. Untuk menghindari kueri sumber berlebihan ini, gunakan DataCoverageDefinition.
Seperti yang ditunjukkan oleh cuplikan layar berikut, laporan Power BI masih mengirim beberapa kueri SQL yang tidak perlu untuk 2020 ke sumber data karena setiap kueri DAX visual menyebabkan Power BI melakukan kueri pada partisi DirectQuery.
Dengan mengatur dataCoverageDefinition properti pada partisi DirectQuery seperti dalam cuplikan TMSL berikut, kueri SQL ini dihindari. Namun, perlu diingat bahwa Anda harus merefresh himpunan data setelah menerapkan atau mengubah definisi cakupan data. Evaluasi ulang proses sudah cukup untuk menilai definisi cakupan data. Jika Anda lupa langkah ini, kueri yang menyentuh partisi akan gagal dengan pesan kesalahan yang berbunyi "DataCoverageDefinition untuk partisi DQ dalam tabel '[Nama Tabel]' belum dihitung sejak perubahan terbaru. Ini perlu diolah ulang".
{
"name": "FactInternetSales-DQ-Partition",
"mode": "directQuery",
"dataView": "full",
"source": {
"type": "m",
"expression": [
"let",
" Source = Sql.Database(\"demopm.database.windows.net\", \"AdventureWorksDW2020\"),",
" dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data],",
" #\"Filtered Rows\" = Table.SelectRows(dbo_FactInternetSales, each [OrderDateKey] < 20200101)",
"in",
" #\"Filtered Rows\""
]
},
"dataCoverageDefinition": {
"description": "DQ partition with all sales from 2017, 2018, and 2019.",
"expression": "RELATED('DimDate'[CalendarYear]) IN {2017,2018,2019}"
}
}
Seperti disebutkan sebelumnya, dataCoverageDefinition properti membantu menghilangkan beban sumber data yang tidak perlu. Ini juga meningkatkan performa analisis untuk data terbaru karena sekarang Power BI dapat mengecualikan partisi DirectQuery dari pemrosesan kueri DAX jika sesuai. Anda dapat menentukan ekspresi cakupan data langsung untuk nilai tunggal serta rentang dengan operator AND, OR, dan NOT sederhana. Anda juga dapat menggunakan fungsi RELATED untuk menentukan cakupan data berdasarkan kolom dari tabel dimensi yang memiliki hubungan reguler dengan tabel fakta. Jika ekspresi cakupan data menggunakan kolom dari tabel dimensi, pastikan tabel dimensi dalam modus dual . Anda juga dapat menentukan cakupan data berdasarkan kolom dari tabel fakta itu sendiri. Lihat tabel berikut untuk operasi yang didukung, dikategorikan ke dalam tiga grup.
| Tipe | Komentar | Examples |
|---|---|---|
| Predikat tunggal (berbasis nilai) | Kesetaraan, ketidaksetaraan, dan operator IN Mendukung tabel dimensi dan fakta |
RELATED('Date'[Year]) = 2020 NOT RELATED('Date'[Year]) = 2020 RELATED('Date'[Year]) IN {2020, 2021, 2022} InternetSales'[SalesAmt] = CURRENCY(100.0) NOT InternetSales'[SalesAmt] = CURRENCY(100.0) InternetSales'[SalesAmt] DALAM {CURRENCY(100.0), CURRENCY(200.0)} |
| Predikat tunggal (berbasis rentang) | Bisa menjadi operator perbandingan seperti >, , <>=, <= Mengharuskan tabel dimensi berada dalam mode Ganda |
RELATED('Date'[Year]) > 2020 RELATED('Date'[Year]) <= 2020 |
| Beberapa predikat | Kesetaraan, ketidaksetaraan, dan perbandingan Tidak mendukung operator IN Terbatas pada tabel dimensi tunggal dalam mode ganda |
RELATED('Date'[Year]) > 2010 && RELATED('Date'[Year]) > 2020 RELATED('Date'[Year]) = 2020 && RELATED('Date'[Calendar Quarter]) = 1 RELATED('Date'[Year]) > 2020 && NOT RELATED('Date'[Calendar Quarter]) = 1 RELATED('Date'[Year]) > 2020 && RELATED('Date'[Calendar Quarter]) < 3 RELATED('Date'[Year]) > 2020 && (RELATED('Date'[Calendar Quarter]) = 1 || RELATED('Date'[Calendar Quarter]) = 2) |
Properti DataCoverageDefinition pada partisi DirectQuery memungkinkan Anda mengoptimalkan bahkan model data Power BI terbesar berdasarkan partisi panas dalam mode impor dan partisi dingin dalam mode DirectQuery dengan menghindari kueri sumber data yang tidak perlu.
Pengurangan kueri sumber ini membantu meningkatkan performa laporan saat menganalisis data panas. Ini juga membantu mengurangi beban pada sumber data, dan dengan cara ini membantu memaksimalkan skala sumber data Anda. Namun, perlu diingat bahwa mengoptimalkan model data dengan menggunakan dataCoverageDefinition properti masih merupakan skenario lanjutan. Pastikan Anda memverifikasi hasilnya dengan cermat.
Pertimbangan dan keterbatasan
Saat ini,
DataCoverageDefinitionproperti pada partisi DirectQuery memerlukan nilai statis, seperti RELATED('Date'[Year]) = 2020 atau RELATED('Date'[Year]) DI {2020, 2021, 2022}. Penugasan dinamis tidak didukung, seperti RELATED('Date'[DateKey]) = TODAY().Refresh inkremental dengan data real-time tidak menggunakan properti
DataCoverageDefinition. Jika Anda menerapkan definisi cakupan data ke partisi DirectQuery (real-time), Refresh Bertahap akan menghilangkan definisi cakupan data saat membuat ulang partisi.