Ćwiczenie — optymalizowanie zapytań przy użyciu funkcji materializowania

Ukończone

W tym ćwiczeniu użyjesz materialize funkcji , aby zoptymalizować zapytania.

Pamiętaj, że materialize funkcja buforuje wyniki podzapytania podczas jego uruchamiania, aby inne części zapytania mogły odwoływać się do wyniku częściowego.

Korzystanie z funkcji materialize

W naszym scenariuszu firmy zajmującej się sprzedażą detaliczną twój zespół sprzedaży prosi cię o najlepszych klientów w 10 najlepszych stanach, według przychodów i tego, ile przyczyniają się, jako procent, do sprzedaży stanów.

Aby podać te informacje, chcesz podzielić zapytanie na etapy, aby zobaczyć wyniki na każdym etapie w następujący sposób:

  1. Uruchom następujące zapytanie, aby uzyskać najważniejsze stany według przychodu. Użyj instrukcji , let aby przypisać podzapytania do zmiennych USCustomers i USCustomerSales.

    Uruchamianie zapytania

    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
    

    Przyjrzyj się wynikowej liście. Zwróć uwagę, że tabela zawiera kolumny StateProvinceName i USTotalStateSales. Chcesz wyświetlić nazwę prowincji w wynikach, więc musisz dołączyć tabelę Customers do wyników.

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

  2. Uruchom następujące zapytanie, aby dodać prowincję i szczegółowe informacje o najlepszych klientach w stanach do wyników. Te dane są dodawane przez dołączenie podzapytania USCustomerSales do wyników z poprzedniego zapytania.

    Teraz zoptymalizuj zapytanie przy użyciu materialize funkcji w instrukcji tabeli let USCustomerSales. Spowoduje to uruchomienie przypisanej podzapytania tylko raz i buforowanie wyników.

    Uruchamianie zapytania

    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
    

    Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:

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

  3. Uruchom następujące zapytanie, aby wyprowadzić kolumny raportu i obliczyć wkład klientów w sprzedaż swojego stanu jako wartość procentową.

    Uruchamianie zapytania

    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)
    

    Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:

    Screenshot of the materialize function, showing the entire query.