Oefening: query's optimaliseren met behulp van de materialize-functie

Voltooid

In deze oefening gebruikt u de materialize functie om uw query's te optimaliseren.

Zoals u weet, slaat de materialize functie de resultaten van een subquery op wanneer deze wordt uitgevoerd, zodat andere onderdelen van de query naar het gedeeltelijke resultaat kunnen verwijzen.

De functie materialize gebruiken

In ons retailbedrijfsscenario vraagt uw verkoopteam u naar de belangrijkste klanten in de top 10 staten, op omzet en hoeveel ze bijdragen, als percentage, aan de verkoop van de staten.

Als u deze informatie wilt opgeven, wilt u de query opsplitsen in fasen, zodat u de resultaten in elke fase als volgt kunt zien:

  1. Voer de volgende query uit om de belangrijkste statussen te verkrijgen op basis van omzet. Gebruik de let instructie om subquery's toe te wijzen aan de variabelen USCustomers en USCustomerSales.

    De query uitvoeren

    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
    

    Bekijk de resulterende lijst. U ziet dat de tabel kolommen bevat voor StateProvinceName en USTotalStateSales. U wilt de naam van de provincie weergeven in de resultaten, dus moet u de tabel Klanten toevoegen aan de resultaten.

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

  2. Voer de volgende query uit om de provincie en de details over de belangrijkste klanten in de staten toe te voegen aan de resultaten. U voegt deze gegevens toe door de USCustomerSales subquery toe te voegen aan de resultaten van de vorige query.

    Optimaliseer nu de query met behulp van de functie in de materialize tabelinstructie let USCustomerSales. Als u dit doet, wordt de toegewezen subquery slechts eenmaal uitgevoerd en worden de resultaten in de cache opgeslagen.

    De query uitvoeren

    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
    

    Uw resultaten moeten eruitzien zoals in de volgende afbeelding:

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

  3. Voer de volgende query uit om de kolommen voor het rapport uit te voeren en de belangrijkste bijdragen van klanten te berekenen aan de verkoop van hun staat, als percentage.

    De query uitvoeren

    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)
    

    Uw resultaten moeten eruitzien zoals in de volgende afbeelding:

    Screenshot of the materialize function, showing the entire query.