Latihan - Menggabungkan hasil tabel dengan menggunakan operator gabungan

Selesai

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.

  1. Jalankan kueri berikut untuk mendapatkan 10 baris arbitrer yang cocok dari tabel Pelanggan dan tabel SalesFact .

    Menjalankan kueri

    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 .

  2. Jalankan kueri berikut untuk meringkas tabel yang digabungkan untuk mendapatkan tiga negara/wilayah yang memiliki penjualan terbanyak.

    Menjalankan kueri

    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:

    Screenshot of the join operator query, showing the top three countries/regions by sales.

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

  1. Jalankan kueri berikut:

    Menjalankan kueri

    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:

    Screenshot of the join operator query, showing the countries/regions with the lowest revenues.

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

  1. Jalankan kueri berikut:

    Menjalankan kueri

    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:

    Screenshot of the join operator query, showing the total sales per product.

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

  1. Jalankan kueri berikut:

    Menjalankan kueri

    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:

    Screenshot of the join operator query, showing the number of products that don't sell in each product category.

    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 oleh join operator.