Übung: Optimieren von Abfragen mithilfe der materialize-Funktion

Abgeschlossen

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:

  1. Führen Sie die folgende Abfrage aus, um die Bundesstaaten mit den höchsten Umsätzen abzurufen. Verwenden -Sie die let-Anweisung, um den Variablen USCustomers und USCustomerSales Unterabfragen zuzuweisen.

    Abfrage ausführen

    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.

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

  2. 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 der let-Anweisung der Tabelle USCustomerSales. Dadurch wird die zugewiesene Unterabfrage nur einmal ausgeführt, und die Ergebnisse werden zwischengespeichert.

    Abfrage ausführen

    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:

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

  3. 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.

    Abfrage ausführen

    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:

    Screenshot of the materialize function, showing the entire query.