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

Screenshot of a many-to-many relationship in the Edit relationship pane.

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:

Screenshot of ProductSales and Product table in Relationship view.

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

Screenshot of a Product table visual with two rows.

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

Screenshot of a Sales table visual with four rows.

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

Screenshot of a Visual displaying the product name, price, and quantity.

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.

    Screenshot of a Sales table displaying sales by state.

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

    Screenshot of a Sales table displaying city, state, and population.

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:

Screenshot of a hidden State table in Relationship view.

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

Screenshot showing a table with State, Population, and Sales data.

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:

Screenshot of a table showing State and city population and sales.

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:

Screenshot of a visual showing State, population, and sales visual.

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 :

Screenshot of the Edit relationship dialog box with Cardinality and Cross filter direction highlighted.

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:

Screenshot of a State, Population, and Sales table.

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:

    Screenshot of a script example. The example is, Sales total = Calculate(Sum('Sales'[Sales]), All('Sales')).

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

    Screenshot of a table visual showing State, Sales, and Sales total resulting from the formula.

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
  • SAP Business Warehouse
  • 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: