Exercício – Otimizar consultas usando a função materialize

Concluído

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:

  1. Execute a consulta a seguir para obter os principais estados por receita. Use a instrução let para atribuir subconsultas às variáveis USCustomers e USCustomerSales.

    Executar a consulta

    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.

    Screenshot of the `materialize` function, showing the first block of the query.

  2. 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 tabela let. Essa ação executa a subconsulta atribuída apenas uma vez e armazena em cache os resultados.

    Executar a consulta

    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:

    Screenshot of the materialize function, showing the second block of the query.

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

    Executar a consulta

    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:

    Screenshot of the materialize function, showing the entire query.