Bagikan melalui


Terapkan hubungan banyak ke banyak di Power BI Desktop

Dengan hubungan dengan kardinalitas banyak ke banyak di Power BI Desktop, Anda dapat menggabungkan tabel yang menggunakan kardinalitas banyak-ke-banyak. Anda dapat membuat model data dengan lebih mudah dan intuitif yang berisi dua sumber data atau lebih. Hubungan dengan kardinalitas banyak ke banyak adalah bagian dari kemampuan model komposit yang lebih besar dalam Power BI Desktop. Untuk informasi selengkapnya tentang model komposit, lihat Menggunakan model komposit di Power BI Desktop

Cuplikan layar hubungan banyak ke banyak di panel Edit hubungan.

Apa yang dipecahkan oleh hubungan dengan kardinalitas banyak-ke-banyak

Sebelum hubungan dengan kardinalitas banyak ke banyak tersedia, hubungan antara dua tabel ditentukan dalam Power BI. Setidaknya salah satu kolom tabel yang terlibat dalam hubungan harus berisi nilai unik. Namun, sering kali, tidak ada kolom yang berisi nilai unik.

Misalnya, dua tabel mungkin memiliki kolom berlabel CountryRegion. Namun, nilai CountryRegion tidak unik dalam salah satu tabel. Untuk menggabungkan tabel tersebut, Anda harus membuat solusi. Salah satu solusinya mungkin adalah memperkenalkan tabel tambahan dengan nilai unik yang diperlukan. Dengan hubungan dengan kardinalitas banyak ke banyak, Anda dapat bergabung dengan tabel tersebut secara langsung, jika Anda menggunakan hubungan dengan kardinalitas banyak-ke-banyak.

Menggunakan hubungan dengan kardinalitas banyak ke banyak

Saat Anda menentukan hubungan antara dua tabel dalam Power BI, Anda harus menentukan kardinalitas hubungan. Misalnya, hubungan antara ProductSales dan Product—menggunakan kolom ProductSales[ProductCode] dan Product[ProductCode]—akan didefinisikan sebagai Many-1. Kami mendefinisikan hubungan dengan cara ini, karena setiap produk memiliki banyak penjualan, dan kolom dalam tabel Produk (ProductCode) unik. Saat Anda menentukan kardinalitas hubungan sebanyak Banyak-1, 1-Banyak, atau 1-1, Power BI memvalidasinya, sehingga kardinalitas yang Anda pilih cocok dengan data aktual.

Misalnya, lihat model sederhana dalam gambar ini:

Cuplikan layar tabel ProductSales dan Product dalam tampilan Hubungan.

Sekarang, bayangkan tabel Produk hanya menampilkan dua baris, seperti yang ditunjukkan:

Cuplikan layar visual tabel Produk dengan dua baris.

Bayangkan juga bahwa tabel Penjualan hanya memiliki empat baris, termasuk baris untuk produk C. Karena baris C produk tidak ada dalam tabel Produk , ada kesalahan integritas referensial.

Cuplikan layar visual tabel Penjualan dengan empat baris.

ProductName dan Price (dari tabel Produk), bersama dengan total Qty untuk setiap produk (dari tabel ProductSales), akan ditampilkan seperti yang ditunjukkan:

Cuplikan layar Visual yang menampilkan nama produk, harga, dan kuantitas.

Seperti yang Anda lihat di gambar sebelumnya, baris ProductName kosong dikaitkan dengan penjualan untuk produk C. Baris kosong ini memperkirakan pertimbangan berikut:

  • Baris apa pun dalam tabel ProductSales yang tidak ada baris terkait dalam tabel Produk. Ada masalah integritas referensial, seperti yang kita lihat untuk produk C dalam contoh ini.

  • Setiap baris dalam tabel ProductSales yang kolom kunci asingnya adalah null.

Untuk alasan ini, baris kosong dalam kedua kasus memperkirakan penjualan di mana ProductName dan Price tidak diketahui.

Terkadang tabel digabungkan oleh dua kolom, namun tidak ada kolom yang unik. Misalnya, mempertimbangkan dua tabel ini:

  • Tabel Penjualan menampilkan data penjualan menurut Status, dan setiap baris berisi jumlah penjualan untuk jenis penjualan dalam status tersebut. Negara bagian termasuk CA, WA, dan TX.

    Cuplikan layar tabel Penjualan yang menampilkan penjualan menurut status.

  • Tabel CityData menampilkan data tentang kota, termasuk populasi dan negara bagian (seperti CA, WA, dan New York).

    Cuplikan layar tabel Penjualan yang menampilkan kota, status, dan populasi.

Kolom untuk Status sekarang berada di kedua tabel. Sangat masuk akal untuk ingin melaporkan total penjualan berdasarkan negara bagian dan total populasi setiap negara bagian. Namun, ada masalah: kolom Status tidak unik di salah satu tabel.

Solusi sebelumnya

Sebelum rilis Power BI Desktop Juli 2018, Anda tidak dapat membuat hubungan langsung antara tabel ini. Solusi umumnya adalah:

  • Buat tabel ketiga yang hanya berisi ID Negara Bagian yang unik. Tabel bisa berupa salah satu atau semua dari:

    • Tabel terhitung (ditentukan dengan menggunakan Data Analysis Expressions [DAX]).
    • Tabel berdasarkan kueri yang ditentukan dalam Editor Power Query, yang dapat menampilkan ID unik yang digambar dari salah satu tabel.
    • Kumpulan lengkap gabungan.
  • Kemudian kaitkan dua tabel asli dengan tabel baru tersebut dengan menggunakan hubungan Banyak-1 umum.

Anda dapat membiarkan tabel solusi terlihat. Atau Anda mungkin menyembunyikan tabel solusi, sehingga tidak muncul di daftar Bidang . Jika Anda menyembunyikan tabel, hubungan Banyak-1 biasanya akan diatur untuk memfilter di kedua arah, dan Anda dapat menggunakan bidang Status dari salah satu tabel. Pemfilteran silang yang terakhir akan disebarkan ke tabel lain. Contoh ditunjukkan dalam gambar berikut:

Cuplikan layar tabel Status tersembunyi dalam tampilan Hubungan.

Visual yang menampilkan Status (dari tabel CityData), bersama dengan total Populasi dan total Penjualan, kemudian akan muncul sebagai berikut:

Cuplikan layar memperlihatkan tabel dengan data Status, Populasi, dan Penjualan.

Catatan

Karena status dari tabel CityData digunakan dalam solusi ini, hanya status dalam tabel tersebut yang tercantum, sehingga TX dikecualikan. Selain itu, tidak seperti hubungan Banyak-1, sementara baris total mencakup semua Penjualan (termasuk TX), detailnya tidak menyertakan baris kosong yang mencakup baris yang tidak cocok. Demikian pula, tidak ada baris kosong yang akan mencakup Penjualan yang nilainya null untuk Status.

Misalkan Anda juga menambahkan City ke visual tersebut. Meskipun populasi per Kota diketahui, Penjualan yang ditunjukkan untuk Kota hanya mengulangi Penjualan untuk Negara yang sesuai. Skenario ini biasanya terjadi ketika pengelompokan kolom tidak terkait dengan beberapa ukuran agregat, seperti yang ditunjukkan di sini:

Cuplikan layar tabel yang memperlihatkan populasi dan penjualan negara bagian dan kota.

Katakanlah Anda mendefinisikan tabel Penjualan baru sebagai kombinasi semua Status di sini, dan kami membuatnya terlihat dalam daftar Bidang. Visual yang sama akan menampilkan Status (pada tabel baru), total Populasi, dan total Penjualan:

Cuplikan layar visual memperlihatkan visual Status, populasi, dan penjualan.

Seperti yang Anda lihat, TX—dengan data Penjualan tetapi data Populasi yang tidak diketahui—dan New York—dengan data Populasi yang diketahui tetapi tidak ada data Penjualan —yang akan disertakan. Solusi ini tidak optimal, dan memiliki banyak masalah. Untuk hubungan dengan kardinalitas banyak-ke-banyak, masalah yang dihasilkan ditangani, seperti yang dijelaskan di bagian berikutnya.

Untuk informasi selengkapnya tentang menerapkan solusi ini, lihat Panduan hubungan banyak ke banyak.

Gunakan hubungan dengan kardinalitas banyak-ke-banyak alih-alih solusi

Anda dapat langsung menghubungkan tabel, seperti tabel yang kami jelaskan sebelumnya, tanpa harus menggunakan solusi serupa. Sekarang dimungkinkan untuk mengatur kardinalitas hubungan ke banyak-ke-banyak. Pengaturan ini menunjukkan bahwa tidak ada tabel yang berisi nilai unik. Untuk hubungan tersebut, Anda mungkin masih mengontrol tabel mana yang memfilter tabel lain. Atau Anda dapat menerapkan pemfilteran dua arah, di mana setiap tabel memfilter tabel lainnya.

Dalam Power BI Desktop, kardinalitas default ke banyak-ke-banyak ketika menentukan tidak ada tabel yang berisi nilai unik untuk kolom hubungan. Dalam kasus seperti itu, pesan peringatan mengonfirmasi bahwa Anda ingin mengatur hubungan, dan bahwa perubahan tersebut bukan efek yang tidak diinginkan dari masalah data.

Misalnya, saat Anda membuat hubungan langsung antara CityData dan Sales—di mana filter harus mengalir dari CityData ke Sales—Power BI Desktop menampilkan dialog Edit hubungan :

Cuplikan layar kotak dialog Edit hubungan dengan Kardinalitas dan Arah filter silang disorot.

Tampilan Hubungan yang dihasilkan kemudian akan menampilkan hubungan langsung dan banyak-ke-banyak antara kedua tabel. Tampilan tabel di daftar Bidang, dan perilakunya nanti saat visual dibuat, mirip dengan saat kami menerapkan solusinya. Dalam solusinya, tabel tambahan yang menampilkan data Status berbeda tidak dibuat terlihat. Seperti yang dijelaskan sebelumnya, visual yang memperlihatkan data Status, Populasi, dan Penjualan akan ditampilkan:

Cuplikan layar tabel Status, Populasi, dan Penjualan.

Perbedaan utama antara hubungan dengan kardinalitas banyak-ke-banyak dan hubungan Banyak-1 yang lebih khas adalah sebagai berikut:

  • Nilai yang diperlihatkan tidak menyertakan baris kosong yang menyumbang baris yang tidak cocok di tabel lain. Selain itu, nilai tidak memperkirakan baris di mana kolom yang digunakan dalam hubungan dalam tabel lain null.

  • Anda tidak dapat menggunakan fungsi RELATED(), karena lebih dari satu baris dapat terkait.

  • Menggunakan ALL() fungsi pada tabel tidak menghapus filter yang diterapkan ke tabel terkait lainnya oleh hubungan banyak ke banyak. Dalam contoh sebelumnya, ukuran yang didefinisikan seperti yang diperlihatkan di sini tidak akan menghapus filter pada kolom dalam tabel CityData terkait:

    Cuplikan layar contoh skrip. Contohnya adalah, Sales total = Calculate(Sum('Sales'[Sales]), All('Sales')).

    Visual yang memperlihatkan data Status, Penjualan, dan total Penjualan akan menghasilkan grafik ini:

    Cuplikan layar visual tabel memperlihatkan total Status, Penjualan, dan Penjualan yang dihasilkan dari rumus.

Dengan mempertimbangkan perbedaan sebelumnya, pastikan perhitungan yang menggunakan ALL(<Table>), seperti % dari total keseluruhan, mengembalikan hasil yang dimaksudkan.

Pertimbangan dan batasan

Ada beberapa batasan untuk rilis hubungan ini dengan kardinalitas banyak ke banyak dan model komposit.

Sumber Live Connect (multidmensi) berikut tidak dapat digunakan dengan model komposit:

  • SAP HANA
  • Gudang Bisnis SAP
  • SQL Server Analysis Services
  • Model semantik Power BI
  • Azure Analysis Services

Saat Anda tersambung ke sumber multidmensi ini dengan menggunakan DirectQuery, Anda tidak dapat tersambung ke sumber DirectQuery lain atau menggabungkannya dengan data yang diimpor.

Batasan penggunaan DirectQuery yang ada masih berlaku saat Anda menggunakan hubungan dengan kardinalitas banyak ke banyak. Banyak batasan sekarang per tabel, tergantung pada mode penyimpanan tabel. Misalnya, kolom terhitung pada tabel yang diimpor dapat merujuk ke tabel lain, tetapi kolom terhitung pada tabel DirectQuery masih hanya bisa merujuk ke kolom pada tabel yang sama. Batasan lain berlaku untuk seluruh model jika ada tabel dalam model yang merupakan DirectQuery. Misalnya, fitur QuickInsights dan Tanya Jawab tidak tersedia pada model jika ada tabel di dalamnya yang memiliki mode penyimpanan DirectQuery.

Untuk informasi selengkapnya tentang model komposit dan DirectQuery, lihat artikel berikut ini: