Latihan - Mengoptimalkan kueri dengan menggunakan fungsi materialisasi

Selesai

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:

  1. Jalankan kueri berikut untuk mendapatkan status teratas, menurut pendapatan. let Gunakan pernyataan untuk menetapkan subkueri ke variabel USCustomers dan USCustomerSales.

    Menjalankan kueri

    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.

    Screenshot of the `materialize` function, showing the first block of the query.

  2. 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 tabel let USCustomerSales. Melakukannya menjalankan subkueri yang ditetapkan hanya sekali dan menyimpan hasilnya.

    Menjalankan kueri

    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:

    Screenshot of the materialize function, showing the second block of the query.

  3. Jalankan kueri berikut untuk menghasilkan kolom untuk laporan dan menghitung kontribusi pelanggan teratas ke penjualan status mereka, sebagai persentase.

    Menjalankan kueri

    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:

    Screenshot of the materialize function, showing the entire query.