Oefening: query's optimaliseren met behulp van de materialize-functie
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:
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 variabelenUSCustomers
enUSCustomerSales
.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.
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
tabelinstructielet
USCustomerSales. Als u dit doet, wordt de toegewezen subquery slechts eenmaal uitgevoerd en worden de resultaten in de cache opgeslagen.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:
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.
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: