Ejercicio: Optimización de consultas mediante la función materialize

Completado

En este ejercicio, usará la función materialize para optimizar sus consultas.

Recuerde que la función materialize almacena en caché los resultados de una subconsulta al ejecutarse para que otras partes de la consulta puedan hacer referencia al resultado parcial.

Usar la función materialize

En el caso de empresa minorista, el equipo de ventas le pregunta por el cliente principal en los 10 estados principales por facturación y en qué porcentaje contribuyen a las ventas de estos estados.

Para proporcionar esta información, quiere dividir la consulta en fases para ver los resultados en cada fase, tal como se indica a continuación:

  1. Ejecute la consulta siguiente para obtener los principales estados por ingresos. Use la instrucción let para asignar subconsultas a las variables USCustomers y USCustomerSales.

    Ejecución de la 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
    

    Eche un vistazo la lista resultante. Observe que la tabla contiene columnas para StateProvinceName y USTotalStateSales. Quiere mostrar el nombre de la provincia en los resultados, por lo que debe unir la tabla Clientes a los resultados.

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

  2. Ejecute la consulta siguiente para agregar la provincia y los detalles sobre los principales clientes en los estados a los resultados. Para agregar estos datos, una la subconsulta USCustomerSales a los resultados de la consulta anterior.

    Ahora, optimice la consulta mediante la función materialize en la instrucción let de tabla USCustomerSales. Al hacerlo, se ejecutará la subconsulta asignada una sola vez y los resultados se almacenarán en caché.

    Ejecución de la 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
    

    Los resultados deberían ser similares a los que aparecen en la imagen siguiente:

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

  3. Ejecute la consulta siguiente para generar las columnas del informe y calcular el porcentaje de contribuciones de los clientes principales a las ventas de su estado.

    Ejecución de la 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)
    

    Los resultados deberían ser similares a los que aparecen en la imagen siguiente:

    Screenshot of the materialize function, showing the entire query.