Exercício - Combine os resultados da tabela usando o operador de junção
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.
Execute a consulta a seguir para obter 10 linhas arbitrárias correspondentes da tabela Customers e da tabela SalesFact .
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 .
Execute a consulta a seguir para resumir as tabelas unidas para obter os três países/regiões que têm mais vendas.
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:
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.
Execute a seguinte 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:
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.
Execute a seguinte 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:
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.
Execute a seguinte 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:
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 pelojoin
operador.