Übung: Optimieren von Abfragen mithilfe der materialize-Funktion
In dieser Übung verwenden Sie die materialize
-Funktion, um Ihre Abfragen zu optimieren.
Erinnern Sie sich daran, dass die materialize
-Funktion die Ergebnisse einer Unterabfrage während der Ausführung zwischenspeichert, sodass andere Teile der Abfrage auf das Teilergebnis verweisen können.
Verwenden der materialize
-Funktion
Im diesem Szenario des Einzelhandelsunternehmens fragt Ihr Verkaufsteam Sie nach den umsatzstärksten Kund*innen in den 10 umsatzstärksten Bundesstaaten und nach dem prozentualen Anteil, den sie am Umsatz des Bundesstaats haben.
Um diese Informationen bereitzustellen, sollten Sie die Abfrage wie folgt in Phasen unterteilen, damit Sie Ergebnisse in jeder Phase sehen können:
Führen Sie die folgende Abfrage aus, um die Bundesstaaten mit den höchsten Umsätzen abzurufen. Verwenden -Sie die
let
-Anweisung, um den VariablenUSCustomers
undUSCustomerSales
Unterabfragen zuzuweisen.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
Sehen Sie sich die resultierende Liste an. Beachten Sie, dass die resultierende Tabelle Spalten aus StateProvinceName und USTotalStateSales enthält. Sie wollen den Provinznamen in den Ergebnissen anzeigen, daher müssen Sie die Kunden-Tabelle mit den Ergebnissen verknüpfen.
Führen Sie die folgende Abfrage aus, um die Provinz und Details zu den umsatzstärksten Kund*innen in den Bundesstaaten den Ergebnissen hinzuzufügen. Sie fügen diese Daten hinzu, indem Sie die
USCustomerSales
-Unterabfrage mit den Ergebnissen aus der vorherigen Abfrage verknüpfen.Optimieren Sie jetzt die Abfrage mithilfe der
materialize
-Funktion in derlet
-Anweisung der Tabelle USCustomerSales. Dadurch wird die zugewiesene Unterabfrage nur einmal ausgeführt, und die Ergebnisse werden zwischengespeichert.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
Die Ergebnisse sollten wie im folgenden Bild aussehen:
Führen Sie die folgende Abfrage aus, um die Spalten für den Bericht auszugeben und den Anteil zu berechnen, den die umsatzstärksten Kund*innen zum Umsatz ihres Bundesstaats beitragen.
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)
Die Ergebnisse sollten wie im folgenden Bild aussehen: