Exercício - Otimizar consultas usando a função materialize
Neste exercício, você usa a materialize
função para otimizar suas consultas.
Lembre-se de que a função armazena materialize
em cache os resultados de uma subconsulta quando é executada, para que outras partes da consulta possam fazer referência ao resultado parcial.
Utilizar a função materialize
Em nosso cenário de empresa de varejo, sua equipe de vendas pergunta para você os principais clientes nos 10 principais estados, por receita e quanto eles contribuem, em porcentagem, para as vendas dos estados.
Para fornecer essas informações, você deseja dividir a consulta em etapas para que você possa ver os resultados em cada etapa, da seguinte maneira:
Execute a seguinte consulta para obter os principais estados, por receita. Use a
let
instrução para atribuir subconsultas às variáveisUSCustomers
eUSCustomerSales
.let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey; USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName
Dê uma olhada na lista resultante. Observe que a tabela contém colunas para StateProvinceName e USTotalStateSales. Você deseja mostrar o nome da província nos resultados, portanto, precisa unir a tabela Clientes aos resultados.
Execute a seguinte consulta para adicionar a província e os detalhes sobre os principais clientes nos estados aos resultados. Você adiciona esses dados unindo a
USCustomerSales
subconsulta aos resultados da consulta anterior.Agora, otimize a consulta usando a
materialize
função na instrução da tabelalet
USCustomerSales. Isso executa a subconsulta atribuída apenas uma vez e armazena em cache os resultados.let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = materialize( SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey); USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName | lookup ( USCustomerSales | summarize arg_max(USTotalCustomerSales, *) by StateProvinceName ) on StateProvinceName | top 10 by USTotalStateSales
Seus resultados devem ser parecidos com os da imagem a seguir:
Execute a consulta a seguir para gerar as colunas do relatório e calcular as contribuições dos principais clientes para as vendas de seu estado, como uma porcentagem.
let Pcent = (portion: real, total: real) { round(100 * portion / total, 2) }; let USCustomers = Customers | where RegionCountryName == 'United States'; let USCustomerSales = materialize( SalesFact | summarize USTotalCustomerSales = sum(SalesAmount) by CustomerKey | join kind=inner USCustomers on CustomerKey); USCustomerSales | summarize USTotalStateSales = round(sum(USTotalCustomerSales)) by StateProvinceName | lookup ( USCustomerSales | summarize arg_max(USTotalCustomerSales, *) by StateProvinceName ) on StateProvinceName | top 10 by USTotalStateSales | project StateProvinceName, StateSales = USTotalStateSales, TopCustomerFirstName = FirstName, TopCustomerLastName = LastName, TopCustomerSales = round(USTotalCustomerSales), TopCustomerPercentage = Pcent(USTotalCustomerSales, USTotalStateSales)
Seus resultados devem ser parecidos com os da imagem a seguir: