Exercício – Combinar os resultados da tabela usando o operador union

Concluído

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.

  1. Execute a consulta a seguir.

    Executar a consulta

    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:

    Screenshot of the union operator with tables that have the same columns, query, and results.

  2. 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.

  1. Execute a consulta a seguir.

    Executar a consulta

    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:

    Screenshot of the union operator, with tables that have different columns, query, and results.

  2. 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:

  1. Execute a consulta a seguir.

    Executar a consulta

    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:

    Screenshot of the union operator, returning common columns from tables that have different columns, query, and results.

    Observe que você obtém todas as linhas das três tabelas e somente as colunas que ocorrem em todas as tabelas.

  2. 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.