Упражнение. Объединение результатов таблицы с помощью оператора объединения
В этом упражнении вы используете оператор union
для объединения фактов продаж, собранных из различных стран или регионов.
Используйте оператор union
Ваша группа продаж просит вас создать одну таблицу, которая объединяет 10 произвольных результатов продаж из каждой из следующих стран и регионов: Австралия, Соединенное Королевство и Соединенные Штаты.
Используйте инструкцию let
для создания трех табличных выражений, каждый из которых содержит 10 записей из определенной страны или региона, в таблице SalesFact, чтобы представлять данные о продажах из трех стран или регионов. Их можно считать тремя отдельными таблицами.
Изучение этих таблиц можно увидеть, что они имеют одинаковые столбцы. Единственное различие — это данные в столбце RegionCountryName
. Используйте оператор union
, чтобы объединить таблицы фактов продаж для Соединенного Королевства и Соединенных Штатов с таблицей фактов продаж для Австралии.
Выполните следующий запрос.
let AustraliaSales = SalesFact // Sales facts from Australia | lookup Customers on CustomerKey | where RegionCountryName == 'Australia' | take 10; let UnitedKingdomSales = SalesFact // Sales facts from United Kingdom | lookup Customers on CustomerKey | where RegionCountryName == 'United Kingdom' | take 10; let UnitedStatesSales = SalesFact // Sales facts from United States | lookup Customers on CustomerKey | where RegionCountryName == 'United States' | take 10; AustraliaSales | union UnitedKingdomSales, UnitedStatesSales
Результаты должны выглядеть следующим образом:
Обратите внимание, что вы получаете все строки из трех таблиц. Попробуйте изменить запрос, чтобы добавить имитированные данные для Франции и объединить их с данными из других стран или регионов.
В следующих разделах вы используете инструкцию let
для создания нерегламентированных таблиц, которые имитируют данные с столбцами, необходимыми для сценариев.
Использование оператора union
с таблицами с разными столбцами
В следующем месяце ваша группа продаж снова просит вас создать данные о продажах из трех стран или регионов. При изучении таблиц на этот раз вы заметите, что они имеют разные столбцы. Приятно, что оператор union
объединяет таблицы, даже если они имеют разные столбцы. Для этого запроса используется альтернативный синтаксис для оператора union
, который не требует передачи данных через канал.
Выполните следующий запрос.
let AustraliaSales = SalesFact | lookup Customers on CustomerKey | where RegionCountryName == 'Australia' | take 10 | project SalesAmount, TotalCost, DateKey, RegionCountryName, CityName; let UnitedKingdomSales = SalesFact | lookup Customers on CustomerKey | where RegionCountryName == 'United Kingdom' | take 10 | project SalesAmount, TotalCost, DateKey, RegionCountryName, Occupation; let UnitedStatesSales = SalesFact | lookup Customers on CustomerKey | where RegionCountryName == 'United States' | take 10 | project SalesAmount, TotalCost, DateKey, RegionCountryName, StateProvinceName; union AustraliaSales, UnitedKingdomSales, UnitedStatesSales
Результаты должны выглядеть следующим образом:
Обратите внимание, что вы получаете все строки из трех таблиц и все столбцы, которые присутствуют в любой из таблиц. Ячейки, не определенные входной строкой, имеют значение NULL. Попробуйте изменить запрос, чтобы добавить дополнительные столбцы и узнать, как заполняются их значения в результатах.
Используйте оператор union
с таблицами с разными столбцами, чтобы возвращать только те столбцы, которые присутствуют во всех таблицах.
В следующем месяце ваша группа продаж снова просит вас создать данные о продажах из трех стран или регионов, но на этот раз они хотят только столбцы, которые являются общими для всех трех таблиц. Ранее вы видели, что оператор union
возвращает все столбцы, присутствующие в любой из таблиц. Это поведение по умолчанию оператора union
, называемого внешним объединением, хотя рекомендуется всегда явно указывать тип объединения для ясности.
Чтобы возвращать только столбцы, встречающиеся во всех таблицах, используйте внутреннее объединение для тех же имитированных данных, указав аргумент kind=inner
:
Выполните следующий запрос.
let AustraliaSales = SalesFact | lookup Customers on CustomerKey | where RegionCountryName == 'Australia' | take 10 | project SalesAmount, TotalCost, DateKey, RegionCountryName, CityName; let UnitedKingdomSales = SalesFact | lookup Customers on CustomerKey | where RegionCountryName == 'United Kingdom' | take 10 | project SalesAmount, TotalCost, DateKey, RegionCountryName, Occupation; let UnitedStatesSales = SalesFact | lookup Customers on CustomerKey | where RegionCountryName == 'United States' | take 10 | project SalesAmount, TotalCost, DateKey, RegionCountryName, StateProvinceName; union kind=inner AustraliaSales, UnitedKingdomSales, UnitedStatesSales
Результаты должны выглядеть следующим образом:
Обратите внимание, что вы получаете все строки из трех таблиц и только те столбцы, которые встречаются во всех таблицах.
Теперь попробуйте изменить запрос, чтобы добавить более распространенные столбцы, расширив каждую таблицу с таким же именем. Затем узнайте, как их значения заполняются в результатах.