Latihan - Mengoptimalkan kueri dengan menggunakan fungsi materialisasi
Dalam latihan ini, Anda menggunakan materialize
fungsi untuk mengoptimalkan kueri Anda.
Ingat bahwa fungsi menyimpan materialize
hasil subkueri saat dijalankan, sehingga bagian lain dari kueri dapat mereferensikan hasil parsial.
Gunakan fungsi materialize
Dalam skenario perusahaan ritel kami, tim penjualan Anda meminta Anda untuk pelanggan teratas di 10 negara bagian teratas, berdasarkan pendapatan dan berapa banyak kontribusi mereka, sebagai persentase, untuk penjualan negara bagian.
Untuk memberikan informasi ini, Anda ingin memecah kueri menjadi tahapan sehingga Anda bisa melihat hasil di setiap tahap, sebagai berikut:
Jalankan kueri berikut untuk mendapatkan status teratas, menurut pendapatan.
let
Gunakan pernyataan untuk menetapkan subkueri ke variabelUSCustomers
danUSCustomerSales
.let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey; USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName
Lihatlah daftar yang dihasilkan. Perhatikan bahwa tabel berisi kolom untuk StateProvinceName dan USTotalStateSales. Anda ingin menampilkan nama provinsi dalam hasil, jadi Anda perlu menggabungkan tabel Pelanggan ke hasil.
Jalankan kueri berikut untuk menambahkan provinsi dan detail tentang pelanggan teratas di status ke hasil. Anda menambahkan data ini dengan menggabungkan subkueri
USCustomerSales
ke hasil dari kueri sebelumnya.Sekarang, optimalkan kueri dengan menggunakan
materialize
fungsi dalam pernyataan tabellet
USCustomerSales. Melakukannya menjalankan subkueri yang ditetapkan hanya sekali dan menyimpan hasilnya.let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = materialize( SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey); USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName | lookup ( USCustomerSales | summarize arg_max(USTotalCustomerSales, *) by StateProvinceName ) on StateProvinceName | top 10 by USTotalStateSales
Hasil Anda akan terlihat seperti yang ada di gambar berikut:
Jalankan kueri berikut untuk menghasilkan kolom untuk laporan dan menghitung kontribusi pelanggan teratas ke penjualan status mereka, sebagai persentase.
let Pcent = (portion: real, total: real) { round(100 * portion / total, 2) }; let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = materialize( SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey); USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName | lookup ( USCustomerSales | summarize arg_max(USTotalCustomerSales, *) by StateProvinceName ) on StateProvinceName | top 10 by USTotalStateSales | project StateProvinceName, StateSales = USTotalStateSales, TopCustomerFirstName = FirstName, TopCustomerLastName = LastName, TopCustomerSales = round(USTotalCustomerSales), TopCustomerPercentage = Pcent(USTotalCustomerSales, USTotalStateSales)
Hasil Anda akan terlihat seperti yang ada di gambar berikut: