Latihan - Menggabungkan hasil tabel dengan menggunakan operator gabungan
Dalam latihan ini, Anda mempelajari cara menggunakan join
operator. Ingat bahwa join
operator menggabungkan baris dua tabel dengan mencocokkan nilai kolom yang ditentukan dari setiap tabel.
Mari kita gunakan hasil join
operator untuk menjawab pertanyaan tentang penjualan.
Menggunakan operator join
Dalam skenario perusahaan ritel kami, tim Anda meminta Anda untuk mencantumkan tiga negara/wilayah yang memiliki penjualan terbanyak.
Saat Anda mulai memeriksa tabel SalesFact , Anda melihat bahwa angka yang Anda butuhkan tersedia di kolom SalesAmount , tetapi tabel tidak berisi data negara/wilayah apa pun. Memeriksa tabel lain, Anda melihat bahwa data negara/wilayah tersedia di kolom RegionCountryName di tabel Pelanggan . Anda juga melihat bahwa kedua tabel memiliki kolom CustomerKey .
Karena data tersebar di dua tabel, Anda memerlukan data pelanggan dan data penjualan untuk menulis kueri yang menyediakan informasi yang diminta. Untuk menulis kueri, Anda menggunakan join
operator dan kolom CustomerKey untuk mencocokkan baris dari kedua tabel.
Sekarang Anda siap untuk menulis kueri. Gunakan bagian join
dalam untuk mendapatkan semua baris yang cocok dari kedua tabel. Untuk performa terbaik, gunakan tabel dimensi pelanggan sebagai tabel kiri dan tabel fakta penjualan sebagai tabel kanan.
Dalam prosedur berikut, Anda membuat kueri secara bertahap untuk memberi diri Anda pemahaman yang lebih baik tentang hasil penggunaan join
operator.
Jalankan kueri berikut untuk mendapatkan 10 baris arbitrer yang cocok dari tabel Pelanggan dan tabel SalesFact .
Customers | join kind=inner SalesFact on CustomerKey | take 10
Lihatlah daftar yang dihasilkan. Perhatikan bahwa tabel berisi kolom dari tabel Pelanggan , diikuti dengan kolom yang cocok dari tabel SalesFact .
Jalankan kueri berikut untuk meringkas tabel yang digabungkan untuk mendapatkan tiga negara/wilayah yang memiliki penjualan terbanyak.
Customers | join kind=inner SalesFact on CustomerKey | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName | top 3 by TotalAmount
Hasil Anda akan terlihat seperti yang ada di gambar berikut:
Lihatlah daftar yang dihasilkan. Coba ubah kueri untuk juga memperlihatkan total biaya dan laba yang sesuai untuk negara/wilayah ini.
Tim Anda kemudian meminta Anda untuk mengidentifikasi negara/wilayah dengan pendapatan terendah dalam tahun terakhir yang dicatat, menurut bulan. Untuk mendapatkan data ini, Anda menggunakan kueri serupa. Tetapi kali ini, Anda menggunakan startofmonth()
fungsi untuk memfasilitasi pengelompokan menurut bulan. Anda juga menggunakan arg_min()
fungsi agregasi untuk menemukan negara/wilayah dengan pendapatan terendah dalam setiap bulan.
Jalankan kueri berikut:
Customers | join kind=inner SalesFact on CustomerKey | summarize TotalAmount = round(sum(SalesAmount)) by Month = startofmonth(DateKey), RegionCountryName | summarize arg_min(TotalAmount, RegionCountryName) by Month | top 12 by Month desc
Hasil Anda akan terlihat seperti yang ada di gambar berikut:
Lihat setiap baris. Perhatikan bahwa kolom pertama menunjukkan bulan-bulan dalam setahun terakhir, dalam urutan turun, diikuti oleh kolom yang menunjukkan total penjualan untuk negara/wilayah dengan angka penjualan terendah bulan itu.
Menggunakan jenis rightouter join
Tim penjualan Anda ingin mengetahui total penjualan berdasarkan kategori produk. Ketika Anda mulai meninjau data yang tersedia, Anda menyadari bahwa Anda memerlukan tabel Produk untuk mendapatkan daftar kategori produk dan tabel SalesFact untuk mendapatkan data penjualan. Anda juga menyadari bahwa Anda ingin menghitung penjualan untuk setiap kategori dan mencantumkan semua kategori produk.
Setelah menganalisis permintaan, Anda memilih untuk menggunakan rightouterjoin
, karena mengembalikan semua rekaman penjualan dari tabel kanan, diperkaya dengan kategori produk data yang cocok dari tabel kiri. Anda menulis kueri dengan menggunakan tabel Produk sebagai tabel dimensi kiri, mencocokkan data dari tabel fakta SalesFact , dan mengelompokkan hasil berdasarkan kategori produk.
Jalankan kueri berikut:
Products | join kind=rightouter SalesFact on ProductKey | summarize TotalSales = count() by ProductCategoryName | order by TotalSales desc
Hasil Anda akan terlihat seperti yang ada di gambar berikut:
Perhatikan bahwa waktu eksekusi adalah 0,834 detik, meskipun kali ini mungkin bervariasi di antara eksekusi. Kueri ini adalah salah satu cara untuk mendapatkan jawaban ini dan merupakan contoh kueri yang baik yang tidak dioptimalkan untuk performa. Nantinya, Anda dapat membandingkan waktu ini dengan waktu eksekusi kueri yang setara dengan menggunakan
lookup
operator, yang dioptimalkan untuk jenis data ini.
Gunakan jenis rightanti join
Demikian pula, tim penjualan Anda ingin mengetahui jumlah produk yang tidak terjual di setiap kategori produk. Anda dapat menggunakan rightantijoin
untuk mendapatkan semua baris dari tabel Produk yang tidak cocok dengan baris apa pun dalam tabel SalesFacts, lalu mengelompokkan hasilnya menurut kategori produk.
Jalankan kueri berikut:
SalesFact | join kind=rightanti Products on ProductKey | summarize Count = count() by ProductCategoryName | order by Count desc
Hasil Anda akan terlihat seperti yang ada di gambar berikut:
Lihat setiap baris. Hasilnya menunjukkan jumlah produk yang tidak terjual per kategori produk. Perhatikan bahwa rightanti
join
hanya memilih produk yang tidak memiliki fakta penjualan, yang menunjukkan bahwa tidak ada penjualan untuk produk yang dikembalikan olehjoin
operator.