Упражнение - Оптимизация запросов с использованием функции материализации

Завершено

В этом упражнении вы используете функцию materialize для оптимизации запросов.

Помните, что функция materialize кэширует результаты вложенных запросов при выполнении, чтобы другие части запроса могли ссылаться на частичный результат.

Используйте функцию materialize

В нашем сценарии розничной компании ваша команда по продажам просит вас предоставить информацию о лучших клиентах в 10 лучших штатах, по объему выручки и о том, сколько они вносят в процентном отношении к продажам этих штатов.

Чтобы предоставить эти сведения, необходимо разбить запрос на этапы, чтобы вы могли видеть результаты на каждом этапе, как показано ниже.

  1. Выполните следующий запрос, чтобы получить ведущие штаты по объему доходов. Используйте инструкцию let для назначения вложенных запросов переменным USCustomers и USCustomerSales.

    Выполнить запрос

    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
    

    Просмотрите полученный список. Обратите внимание, что таблица содержит столбцы для StateProvinceName и USTotalStateSales. Вы хотите отобразить название провинции в результатах, поэтому необходимо присоединить таблицу Customers к результатам.

    снимок экрана функции

  2. Выполните следующий запрос, чтобы добавить провинцию и сведения о лучших клиентах в штатах в результаты. Вы добавите эти данные, присоединив вложенный запрос USCustomerSales к результатам предыдущего запроса.

    Теперь оптимизируйте запрос, используя функцию materialize в таблице из инструкции USCustomerSales let. Это позволяет выполнить назначенный подзапрос только один раз и сохранить результаты в кэше.

    Запустите запрос

    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
    

    Результаты должны выглядеть следующим образом:

    Скриншот функции 'материализация', показывающий второй блок запроса.

  3. Выполните следующий запрос, чтобы вывести столбцы отчета и вычислить вклад лучших клиентов в продажи их штата в процентах.

    Запустите запрос

    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)
    

    Результаты должны выглядеть следующим образом:

    скриншот функции materialize, показывающий весь запрос.