Panduan hubungan aktif vs tidak aktif
Artikel ini menargetkan Anda sebagai pemodel data yang bekerja dengan Power BI Desktop. Ini memberi Anda panduan tentang kapan harus membuat hubungan model aktif atau tidak aktif. Secara default, hubungan aktif menyebarkan filter ke tabel lain. Hubungan tidak aktif hanya akan menyebarkan filter ketika suatu ekspresi DAX mengaktifkan (menggunakan) hubungan tersebut.
Nota
Pengantar hubungan model tidak tercakup dalam artikel ini. Jika Anda tidak sepenuhnya terbiasa dengan hubungan, propertinya, atau cara konfigurasinya, kami sarankan Anda terlebih dahulu membaca artikel Hubungan Model di Power BI Desktop.
Penting juga bahwa Anda memiliki pemahaman tentang desain skema bintang. Untuk informasi selengkapnya, lihat Memahami skema bintang dan pentingnya bagi Power BI.
Hubungan aktif
Umumnya, kami sarankan Anda menentukan hubungan aktif jika memungkinkan. Mereka memperluas cakupan dan potensi penggunaan model Anda bagi penulis laporan serta pengguna yang bekerja dengan Q&A.
Pertimbangkan contoh model impor yang dirancang untuk menganalisis ketepatan waktu penerbangan maskapai (OTP). Model ini memiliki tabel Flight
, yang merupakan tabel fakta yang menyimpan satu baris per penerbangan. Setiap baris mencatat tanggal penerbangan, nomor penerbangan, bandara keberangkatan dan kedatangan, dan waktu penundaan apa pun (dalam menit). Ada juga tabel Airport
, yang merupakan tabel dimensi yang menyimpan satu baris per bandara. Setiap baris menjelaskan kode bandara, nama bandara, dan negara atau wilayah.
Berikut adalah diagram model parsial dari dua tabel.
Ada dua hubungan model antara tabel Flight
dan Airport
. Dalam tabel Flight
, kolom DepartureAirport
dan ArrivalAirport
terkait dengan kolom Airport
tabel Airport
. Dalam desain skema bintang, tabel Airport
digambarkan sebagai dimensi yang memainkan peran. Dalam model ini, kedua peran tersebut adalah bandara keberangkatan dan bandara kedatangan .
Meskipun desain ini berfungsi dengan baik untuk desain skema bintang relasional, desain ini tidak berfungsi dengan baik untuk model Power BI. Itu karena hubungan model adalah jalur untuk penyebaran filter, dan jalur ini harus deterministik. Untuk informasi selengkapnya tentang memastikan bahwa jalur propagasi filter deterministik, lihat untuk mengatasi ambiguitas jalur hubungan. Oleh karena itu, seperti yang disajikan dalam contoh ini, satu hubungan aktif sementara hubungan lainnya tidak aktif (diwakili oleh garis putus-putus). Secara khusus, ini adalah hubungan dengan kolom ArrivalAirport
yang aktif, yang berarti filter yang diterapkan ke tabel Airport
secara otomatis disebarluaskan ke kolom ArrivalAirport
tabel Flight
.
Desain model ini memberlakukan batasan parah tentang bagaimana data dapat dilaporkan. Secara khusus, tidak mungkin untuk memfilter tabel Airport
untuk mengisolasi secara otomatis detail penerbangan untuk bandara keberangkatan. Karena laporan perlu memfilter (atau mengelompokkan) berdasarkan bandara keberangkatan dan kedatangan pada saat yang sama, diperlukan dua hubungan aktif. Menerjemahkan persyaratan ini ke dalam desain model Power BI berarti model harus memiliki dua tabel bandara.
Berikut adalah desain model yang ditingkatkan.
Model sekarang memiliki dua tabel bandara: Departure Airport
dan Arrival Airport
. Setiap hubungan model antara tabel ini dan tabel Flight
aktif. Perhatikan juga bahwa nama kolom dalam tabel Departure Airport
dan Arrival Airport
diawali dengan kata Keberangkatan atau Kedatangan.
Desain model yang ditingkatkan mendukung produksi desain laporan berikut.
Halaman laporan difilter dengan Melbourne sebagai bandara keberangkatan, dan tampilan visual tabel dikelompokkan berdasarkan bandara kedatangan.
Nota
Untuk Model impor, penambahan tabel dimensi lain telah menghasilkan peningkatan ukuran model, dan waktu refresh yang lebih lama. Oleh karena itu, ini bertentangan dengan rekomendasi yang dijelaskan dalam artikel Teknik Reduksi Data untuk Pemodelan Impor. Namun, dalam contoh ini, persyaratan untuk hanya memiliki hubungan aktif mengutamakan rekomendasi ini.
Selanjutnya, biasanya tabel dimensi menyimpan jumlah baris rendah relatif terhadap jumlah baris tabel fakta. Jadi, peningkatan ukuran model dan waktu refresh tidak mungkin terlalu besar.
Metodologi pemfaktoran ulang
Berikut adalah metodologi untuk fungsi pemodelan ulang model dari tabel dengan satu dimensi peran, ke desain dengan satu tabel per peran.
Hapus hubungan yang tidak aktif.
Pertimbangkan untuk mengganti nama tabel dimensi peran untuk menggambarkan perannya dengan lebih baik. Dalam contoh dalam artikel ini, tabel
Airport
terkait dengan kolomArrivalAirport
tabelFlight
, sehingga diganti namanya menjadiArrival Airport
.Buat salinan tabel bermain peran, berikan nama yang mencerminkan perannya. Jika ini adalah tabel Impor, kami sarankan Anda menyusun tabel yang dihitung. Jika ini adalah tabel DirectQuery, Anda bisa menduplikasi kueri Power Query.
Dalam contoh, tabel
Departure Airport
dibuat dengan menggunakan definisi tabel terhitung berikut.Departure Airport = 'Arrival Airport'
Buat hubungan aktif untuk menghubungkan tabel baru.
Pertimbangkan untuk mengganti nama kolom dalam tabel sehingga secara akurat mencerminkan perannya. Dalam contoh dalam artikel ini, semua kolom diawali dengan kata Keberangkatan atau Kedatangan. Nama-nama ini memastikan visual laporan, secara default, akan memiliki label yang menjelaskan sendiri dan tidak ambigu. Ini juga meningkatkan pengalaman Q&A, memungkinkan pengguna untuk dengan mudah menulis pertanyaan yang akurat.
Pertimbangkan untuk menambahkan deskripsi ke tabel permainan peran. (Di panel Data, deskripsi muncul dalam tooltip ketika penulis laporan mengarahkan kursor mereka ke atas tabel.) Dengan cara ini, Anda dapat mengomunikasikan detail penyebaran filter lainnya kepada penulis laporan.
Hubungan tidak aktif
Dalam keadaan tertentu, hubungan yang tidak aktif dapat mengatasi kebutuhan pelaporan tertentu.
Pertimbangkan persyaratan model dan pelaporan yang berbeda:
- Model penjualan berisi tabel
Sales
yang memiliki dua kolom tanggal:OrderDate
danShipDate
. - Setiap baris dalam tabel
Sales
merekam satu urutan. - Filter tanggal hampir selalu diterapkan ke kolom
OrderDate
, yang selalu menyimpan tanggal yang valid. - Hanya satu langkah yang memerlukan penyebaran filter berdasarkan tanggal ke kolom
ShipDate
, yang dapat berisi kosong (sampai pesanan dikirim). - Tidak ada persyaratan untuk memfilter atau mengelompokkan periode tanggal pengiriman pesanan dan secara bersamaan.
Berikut adalah diagram model parsial dari dua tabel.
Ada dua hubungan model antara tabel Sales
dan Date
. Dalam tabel Sales
, kolom OrderDate
dan ShipDate
terkait dengan kolom Date
tabel Date
. Dalam model ini, dua peran untuk tabel Date
adalah tanggal pesanan dan tanggal pengiriman . Ini adalah hubungan dengan kolom OrderDate
yang aktif.
Semua dari enam pengukuran—kecuali satu—harus disaring berdasarkan kolom OrderDate
. Namun, ukuran Orders Shipped
harus difilter menurut kolom ShipDate
.
Berikut adalah definisi pengukuran Orders
. Ini hanya menghitung baris tabel Sales
dalam konteks filter. Filter apa pun yang diterapkan ke tabel Date
disebarkan ke kolom OrderDate
.
Orders = COUNTROWS(Sales)
Berikut adalah definisi ukuran Orders Shipped
. Ini menggunakan fungsi USERELATIONSHIP DAX, yang mengaktifkan propagasi filter untuk hubungan spesifik, tetapi hanya saat penilaian ekspresi. Dalam contoh ini, hubungan ke kolom ShipDate
digunakan.
Orders Shipped =
CALCULATE(
COUNTROWS(Sales)
,USERELATIONSHIP('Date'[Date], Sales[ShipDate])
)
Desain model ini mendukung produksi desain laporan berikut.
Halaman laporan memfilter menurut kuartal 2019 Q4. Visual tabel dikelompokkan menurut bulan dan menampilkan berbagai statistik penjualan. Langkah-langkah Orders
dan Orders Shipped
menghasilkan hasil yang berbeda. Masing-masing menggunakan logika ringkasan yang sama (baris hitungan tabel Sales
), tetapi penyebaran filter tabel Date
berbeda.
Perhatikan bahwa alat pemotong kuartal menyertakan opsi BLANK. Opsi pemotong ini muncul sebagai akibat dari ekspansi tabel . Meskipun setiap baris tabel Sales
memiliki tanggal pesanan yang valid, beberapa baris memiliki tanggal pengiriman BLANK—pesanan ini belum dikirim. Ekspansi tabel juga mempertimbangkan hubungan yang tidak aktif, sehingga BLANK dapat muncul karena adanya BLANK di sisi banyak dari hubungan tersebut (atau karena masalah integritas data).
Nota
Filter keamanan tingkat baris (RLS) hanya disebarluaskan melalui hubungan aktif. Filter RLS tidak pernah menyebar untuk hubungan yang tidak aktif, bahkan ketika definisi ukuran menggunakan fungsi USERELATIONSHIP DAX.
Rekomendasi
Kami menyarankan agar Anda menentukan hubungan aktif jika memungkinkan, terutama ketika peran RLS didefinisikan untuk model data Anda. Mereka memperluas cakupan dan potensi penggunaan model Anda baik oleh penulis laporan maupun pengguna yang bekerja dengan Q&A. Ini berarti bahwa tabel dimensi bermain peran harus diduplikasi dalam model Anda.
Namun, dalam keadaan tertentu, Anda dapat menentukan satu atau beberapa hubungan tidak aktif untuk tabel dimensi peran. Anda dapat mempertimbangkan pendekatan ini ketika:
- Tidak ada persyaratan bagi visual laporan untuk difilter secara bersamaan berdasarkan peran yang berbeda.
- Anda menggunakan fungsi USERELATIONSHIP DAX untuk mengaktifkan hubungan tertentu untuk perhitungan model yang relevan.
Konten terkait
Untuk informasi selengkapnya terkait artikel ini, lihat sumber daya berikut ini:
- Hubungan model di Power BI Desktop
- Memahami skema bintang dan pentingnya power BI
- panduan pemecahan masalah hubungan
- Pertanyaan? Coba tanyakan kepada Komunitas Fabric
- Saran? Beri kontribusi ide untuk meningkatkan Fabric