Övning – Optimera frågor med hjälp av funktionen materialisera

Slutförd

I den här övningen materialize använder du funktionen för att optimera dina frågor.

Kom ihåg att materialize funktionen cachelagrar resultatet av en underfråga när den körs, så att andra delar av frågan kan referera till det partiella resultatet.

Använda materialize-funktionen

I vårt detaljhandelsföretagsscenario ber säljteamet dig om de främsta kunderna i de 10 främsta delstaterna, efter intäkter och hur mycket de i procent bidrar till delstaternas försäljning.

Om du vill ange den här informationen vill du dela upp frågan i faser så att du kan se resultat i varje steg på följande sätt:

  1. Kör följande fråga för att hämta de översta tillstånden, efter intäkter. Använd -instruktionen let för att tilldela underfrågor till variablerna USCustomers och USCustomerSales.

    Kör frågan

    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
    

    Ta en titt på den resulterande listan. Observera att tabellen innehåller kolumner för StateProvinceName och USTotalStateSales. Du vill visa provinsnamnet i resultatet, så du måste ansluta tabellen Kunder till resultatet.

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

  2. Kör följande fråga för att lägga till provinsen och information om de främsta kunderna i delstaterna i resultatet. Du lägger till dessa data genom att koppla USCustomerSales underfrågan till resultatet från föregående fråga.

    Optimera frågan med hjälp materialize av funktionen i tabellsatsen let USCustomerSales. På så sätt körs den tilldelade underfrågan bara en gång och cachelagrar resultatet.

    Kör frågan

    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
    

    Dina resultat bör se ut så här i följande bild:

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

  3. Kör följande fråga för att mata ut kolumnerna för rapporten och beräkna de främsta kundernas bidrag till deras tillståndsförsäljning i procent.

    Kör frågan

    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)
    

    Dina resultat bör se ut så här i följande bild:

    Screenshot of the materialize function, showing the entire query.