Exercício - Combine os resultados da tabela usando o operador de junção

Concluído

Neste exercício, você aprende a usar o join operador. Lembre-se de que o operador mescla join as linhas de duas tabelas combinando valores das colunas especificadas de cada tabela.

Vamos usar os resultados do join operador para responder a perguntas sobre vendas.

Utilize o join operador

No cenário da nossa empresa de retalho, a sua equipa pede-lhe que liste os três países/regiões que têm mais vendas.

Ao começar a inspecionar a tabela SalesFact , você percebe que os números necessários estão disponíveis na coluna SalesAmount , mas a tabela não contém dados de país/região. Examinando as outras tabelas, você percebe que os dados de país/região estão disponíveis na coluna RegionCountryName na tabela Clientes . Você também percebe que ambas as tabelas têm uma coluna CustomerKey .

Como os dados estão distribuídos em duas tabelas, você precisa dos dados do cliente e dos dados de vendas para escrever uma consulta que forneça as informações solicitadas. Para escrever a consulta, use o join operador e a coluna CustomerKey para corresponder às linhas de ambas as tabelas.

Agora você está pronto para escrever a consulta. Use um interno join para obter todas as linhas correspondentes de ambas as tabelas. Para obter o melhor desempenho, use a tabela de dimensões clientes como a tabela esquerda e a tabela de fatos de vendas como a tabela direita.

No procedimento a seguir, você cria a consulta em etapas para entender melhor o resultado do uso do join operador.

  1. Execute a consulta a seguir para obter 10 linhas arbitrárias correspondentes da tabela Customers e da tabela SalesFact .

    Executar a consulta

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

    Dê uma olhada na lista resultante. Observe que a tabela contém colunas da tabela Clientes , seguidas por colunas correspondentes da tabela SalesFact .

  2. Execute a consulta a seguir para resumir as tabelas unidas para obter os três países/regiões que têm mais vendas.

    Executar a consulta

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

    Seus resultados devem ser parecidos com os da imagem a seguir:

    Captura de ecrã da consulta do operador de junção, mostrando os três principais países/regiões por vendas.

  3. Dê uma olhada na lista resultante. Tente modificar a consulta para mostrar também o custo total e o lucro correspondentes para esses países/regiões.

A sua equipa pede-lhe então que identifique os países/regiões com as receitas mais baixas no último ano registado, por mês. Para obter esses dados, use uma consulta semelhante. Mas, desta vez, você usa a função para facilitar o startofmonth() agrupamento por mês. Você também usa a arg_min() função de agregação para encontrar os países/regiões com as menores receitas em cada mês.

  1. Execute a seguinte consulta.

    Executar a consulta

    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
    

    Seus resultados devem ser parecidos com os da imagem a seguir:

    Captura de ecrã da consulta do operador de junção, mostrando os países/regiões com as receitas mais baixas.

  2. Olhe para cada linha. Observe que a primeira coluna mostra os meses do ano passado, em ordem decrescente, seguida por colunas que mostram o total de vendas para o país/região com os menores números de vendas naquele mês.

Use o tipo rightouter join

Sua equipe de vendas quer saber o total de vendas por categoria de produto. Quando você começa a revisar os dados disponíveis, percebe que precisa da tabela Produtos para obter a lista de categorias de produtos e a tabela SalesFact para obter os dados de vendas. Você também percebe que deseja contar as vendas de cada categoria e listar todas as categorias de produtos.

Depois de analisar a solicitação, você opta por usar o rightouter join, porque ele retorna todos os registros de vendas da tabela direita, enriquecida com a categoria de produto de dados correspondente da tabela esquerda. Você escreve sua consulta usando a tabela Produtos como a tabela de dimensão esquerda, combinando dados da tabela de fatos SalesFact e agrupando o resultado por categoria de produto.

  1. Execute a seguinte consulta.

    Executar a consulta

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

    Seus resultados devem ser parecidos com os da imagem a seguir:

    Captura de tela da consulta do operador de junção, mostrando o total de vendas por produto.

  2. Observe que o tempo de execução é de 0,834 segundos, embora esse tempo possa variar entre as execuções. Essa consulta é uma maneira de obter essa resposta e é um bom exemplo de uma consulta que não está otimizada para desempenho. Mais tarde, você pode comparar esse tempo com o tempo de execução de uma consulta equivalente usando o lookup operador , que é otimizado para esse tipo de dados.

Use o tipo rightanti join

Da mesma forma, sua equipe de vendas quer saber o número de produtos que não vendem em cada categoria de produto. Você pode usar um rightanti join para obter todas as linhas da tabela Produtos que não correspondem a nenhuma linha na tabela SalesFacts e, em seguida, agrupar os resultados por categoria de produto.

  1. Execute a seguinte consulta.

    Executar a consulta

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

    Seus resultados devem ser parecidos com os da imagem a seguir:

    Captura de ecrã da consulta do operador de junção, mostrando o número de produtos que não são vendidos em cada categoria de produto.

    Olhe para cada linha. Os resultados mostram o número de produtos não vendidos por categoria de produto. Observe que o rightanti join seleciona apenas produtos que não possuem fatos de venda, indicando que não houve vendas para os produtos devolvidos pelo join operador.