Exercício – Otimizar consultas usando a função materialize
Neste exercício, você usará a função materialize
para otimizar suas consultas.
Lembre-se de que a função materialize
armazena em cache os resultados de uma subconsulta quando ela é executada, de modo que outras partes da consulta possam referenciar o resultado parcial.
Usar a função materialize
No cenário da empresa de varejo, sua equipe de vendas pergunta a você qual são os principais clientes nos dez principais estados por receita e quanto eles contribuem, como um percentual, para as vendas dos estados.
Para fornecer essas informações, queira dividir a consulta em estágios para que possa ver os resultados em cada fase, como segue:
Execute a consulta a seguir para obter os principais estados por receita. Use a instrução
let
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
Confira a 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 consulta a seguir para adicionar aos resultados a província e os detalhes sobre os principais clientes nos estados. Você adiciona esses dados unindo a subconsulta
USCustomerSales
aos resultados da consulta anterior.Agora, otimize a consulta usando a função
materialize
na instrução USCustomerSales da tabelalet
. Essa ação 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
Os resultados serão parecidos com a seguinte imagem:
Execute a consulta a seguir para gerar as colunas do relatório e calcular as contribuições dos principais clientes para as vendas dos respectivos estados, como um percentual.
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)
Os resultados serão parecidos com a seguinte imagem: