Exercício – Combinar os resultados da tabela usando o operador union
Neste exercício, você usa o operador union
para combinar fatos de vendas coletados de vários países/regiões.
Use o operador union
Sua equipe de vendas pede que você crie uma tabela individual que combine dez resultados de vendas arbitrários de cada um dos seguintes países/regiões: Austrália, Reino Unido e Estados Unidos.
Você usa a instrução let
para criar três expressões de tabela, cada uma com dez registros de um país/uma região específica na tabela SalesFact, para representar os dados de vendas de três países/regiões. Você pode pensar neles como três tabelas separadas.
Examinando essas tabelas, você pode ver que elas têm as mesmas colunas. A única diferença são os dados na coluna RegionCountryName
. Use o operador union
para combinar as tabelas de fatos de vendas do Reino Unido e dos Estados Unidos com a tabela de fatos de vendas da Austrália.
Execute a consulta a seguir.
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
Os resultados serão parecidos com a seguinte imagem:
Observe que você obtém todas as linhas das três tabelas. Tente modificar a consulta para adicionar dados simulados para a França e combiná-los com os dados dos outros países/das outras regiões.
Nas seções a seguir, você usará a instrução let
para criar tabelas ad hoc que simulam dados, com as colunas necessárias para os cenários.
Usar o operador union
com tabelas que têm colunas diferentes
No mês seguinte, sua equipe de vendas solicita novamente que você crie os dados de vendas dos três países/regiões. Ao examinar as tabelas desta vez, você percebe que elas têm colunas diferentes. O bom do operador union
é que ele combina tabelas mesmo que elas tenham colunas diferentes. Para essa consulta, você usará a sintaxe alternativa do operador union
, que não exige uma entrada canalizada.
Execute a consulta a seguir.
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
Os resultados serão parecidos com a seguinte imagem:
Observe que você obtém todas as linhas das três tabelas e todas as colunas que ocorrem em qualquer uma das tabelas. As células que não são definidas por uma linha de entrada são definidas como nulo. Tente modificar a consulta para adicionar mais colunas e ver como os valores delas são preenchidos nos resultados.
Use o operador union
com tabelas que têm colunas diferentes e retorne apenas as colunas que ocorrem em todas as tabelas
No mês seguinte, sua equipe de vendas solicita novamente que você crie os dados de vendas dos três países/regiões, mas desta vez ela só deseja obter as colunas que são comuns às três tabelas. Anteriormente, você viu que o operador union
retorna todas as colunas que ocorrem em qualquer uma das tabelas. Esse é o comportamento padrão do operador union
, chamado de união externa, embora seja uma prática recomendada sempre especificar explicitamente o tipo de união para maior clareza.
Para retornar apenas as colunas que ocorrem em todas as tabelas, use uma união interna nos mesmos dados simulados especificando o argumento kind=inner
:
Execute a consulta a seguir.
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
Os resultados serão parecidos com a seguinte imagem:
Observe que você obtém todas as linhas das três tabelas e somente as colunas que ocorrem em todas as tabelas.
Agora tente modificar a consulta para adicionar colunas mais comuns estendendo cada tabela com uma coluna de mesmo nome. Em seguida, veja como seus valores são preenchidos nos resultados.