Bagikan melalui


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.

Diagram memperlihatkan model yang berisi dua tabel: Penerbangan dan Bandara. Desain hubungan dijelaskan dalam paragraf berikut.

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.

Diagram memperlihatkan model yang berisi empat tabel: Tanggal, Penerbangan, Bandara Keberangkatan, dan Bandara Kedatangan.

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.

Diagram memperlihatkan halaman laporan memiliki dua pisau filter dan tabel visual. Pisau filternya adalah Bulan dan Bandara Keberangkatan.

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.

  1. Hapus hubungan yang tidak aktif.

  2. Pertimbangkan untuk mengganti nama tabel dimensi peran untuk menggambarkan perannya dengan lebih baik. Dalam contoh dalam artikel ini, tabel Airport terkait dengan kolom ArrivalAirport tabel Flight, sehingga diganti namanya menjadi Arrival Airport.

  3. 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'
    
  4. Buat hubungan aktif untuk menghubungkan tabel baru.

  5. 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.

  6. 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 dan ShipDate.
  • 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.

Diagram memperlihatkan model yang berisi dua tabel: Penjualan dan Tanggal. Tabel Penjualan mencakup enam langkah.

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.

Diagram memperlihatkan halaman laporan dengan satu pemotong dan visual tabel. Pemotongnya adalah Quarter, dan visual tabel mencantumkan statistik penjualan bulanan.

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.

Untuk informasi selengkapnya terkait artikel ini, lihat sumber daya berikut ini: