Упражнение. Объединение результатов таблицы с помощью оператора соединения

Завершено

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

Давайте будем использовать результаты join оператора, чтобы ответить на вопросы о продажах.

Использовать оператор join.

В нашем сценарии розничной компании ваша команда просит вас перечислить три страны или регионы с наибольшим объемом продаж.

При начале проверки таблицы SalesFact вы заметите, что нужные цифры доступны в столбце SalesAmount , но таблица не содержит данных страны или региона. Изучая другие таблицы, обратите внимание, что данные страны или региона доступны в столбце RegionCountryName в таблице Customers . Вы также заметите, что обе таблицы имеют столбец CustomerKey .

Так как данные распределяются по двум таблицам, необходимо как данные клиента, так и данные о продажах для записи запроса, предоставляющего запрошенные сведения. Чтобы написать запрос, используйте join оператор и столбец CustomerKey для сопоставления строк из обеих таблиц.

Теперь вы готовы написать запрос. Используйте внутреннюю join строку, чтобы получить все соответствующие строки из обеих таблиц. Чтобы повысить производительность, используйте таблицу измерений клиентов в качестве левой таблицы и таблицу фактов продаж в качестве правой таблицы.

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

  1. Выполните следующий запрос, чтобы получить 10 совпадающих произвольных строк из таблицы Customers и таблицы SalesFact .

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

    Customers
    | join kind=inner SalesFact on CustomerKey
    | take 10
    

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

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

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

    Customers
    | join kind=inner SalesFact on CustomerKey
    | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName
    | top 3 by TotalAmount
    

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

    Screenshot of the join operator query, showing the top three countries/regions by sales.

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

Затем ваша команда просит вас определить страны или регионы с наименьшими доходами за последний зарегистрированный год, по месяцам. Чтобы получить эти данные, используйте аналогичный запрос. Но на этот раз вы используете startofmonth() функцию для упрощения группировки по месяцам. Вы также используете функцию arg_min() агрегирования, чтобы найти страны или регионы с наименьшими доходами в каждом месяце.

  1. Выполните следующий запрос.

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

    Customers
    | join kind=inner SalesFact on CustomerKey
    | summarize TotalAmount = round(sum(SalesAmount))
        by Month = startofmonth(DateKey), RegionCountryName
    | summarize arg_min(TotalAmount, RegionCountryName) by Month
    | top 12 by Month desc
    

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

    Screenshot of the join operator query, showing the countries/regions with the lowest revenues.

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

Использование типа справа join

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

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

  1. Выполните следующий запрос.

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

    Products
    | join kind=rightouter SalesFact on ProductKey
    | summarize TotalSales = count() by ProductCategoryName
    | order by TotalSales desc
    

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

    Screenshot of the join operator query, showing the total sales per product.

  2. Обратите внимание, что время выполнения составляет 0,834 секунды, хотя на этот раз может отличаться между выполнением. Этот запрос является одним из способов получить этот ответ и является хорошим примером запроса, который не оптимизирован для производительности. Позже вы можете сравнить это время с временем выполнения эквивалентного запроса с помощью lookup оператора, оптимизированного для этого типа данных.

Использование типа rightanti join

Аналогичным образом, ваша команда продаж хочет знать количество продуктов, которые не продаются в каждой категории продуктов. Вы можете использовать правой кнопкой мышиjoin для получения всех строк из таблицы Products , которые не соответствуют ни одной строке в таблице SalesFacts , а затем группировать результаты по категориям продукта.

  1. Выполните следующий запрос.

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

    SalesFact
    | join kind=rightanti Products on ProductKey
    | summarize Count = count() by ProductCategoryName
    | order by Count desc
    

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

    Screenshot of the join operator query, showing the number of products that don't sell in each product category.

    Посмотрите на каждую строку. В результатах показано количество нераспроданных продуктов на категорию продуктов. Обратите внимание, что справа join выбирает только продукты, не имеющие фактов продаж, указывая на отсутствие продаж для продуктов, возвращаемых оператором join .