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

Concluído

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:

  1. Execute a seguinte consulta para obter os principais estados, por receita. Use a let instrução 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
    

    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.

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

  2. 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 tabela let USCustomerSales. Isso 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
    

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

    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 de seu estado, como uma porcentagem.

    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)
    

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

    Screenshot of the materialize function, showing the entire query.