Esercizio - Ottimizzare le query usando la funzione materialize

Completato

In questo esercizio si usa la materialize funzione per ottimizzare le query.

Tenere presente che la funzione materialize memorizza nella cache i risultati di una sottoquery durante l'esecuzione, in modo che altre parti della query possano fare riferimento al risultato parziale.

Usare la funzione materialize

Nello scenario della società di vendita al dettaglio, il team di vendita chiede quali sono i principali clienti nei 10 stati migliori, in base ai ricavi e quanto contribuiscono, in percentuale, alle vendite degli stati.

Per fornire queste informazioni, è necessario suddividere la query in fasi in modo da visualizzare i risultati in ogni fase, come indicato di seguito:

  1. Eseguire la query seguente per ottenere gli stati principali, in base ai ricavi. Usare l'istruzione let per assegnare sottoquery alle variabili USCustomers e USCustomerSales.

    Eseguire la query

    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
    

    Esaminare l'elenco risultante. La tabella contiene colonne per StateProvinceName e USTotalStateSales. Si vuole visualizzare il nome della provincia nei risultati, quindi è necessario aggiungere la tabella Customers ai risultati.

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

  2. Eseguire la query seguente per aggiungere la provincia e i dettagli sui principali clienti negli stati ai risultati. È possibile aggiungere questi dati unendo la USCustomerSales sottoquery ai risultati della query precedente.

    Ora, ottimizzare la query usando la materialize funzione nell'istruzione della tabella let USCustomerSales. In questo modo viene eseguita la sottoquery assegnata una sola volta e i risultati vengono memorizzati nella cache.

    Eseguire la query

    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
    

    I risultati dovrebbero essere simili a quelli nell'immagine seguente:

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

  3. Eseguire la query seguente per restituire le colonne per il report e calcolare i contributi dei clienti principali alle vendite del relativo stato, come percentuale.

    Eseguire la query

    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)
    

    I risultati dovrebbero essere simili a quelli nell'immagine seguente:

    Screenshot of the materialize function, showing the entire query.