Ejercicio: Optimización de consultas mediante la función materialize
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:
Ejecute la consulta siguiente para obtener los principales estados por ingresos. Use la instrucción
let
para asignar subconsultas a las variablesUSCustomers
yUSCustomerSales
.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.
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ónlet
de tabla USCustomerSales. Al hacerlo, se ejecutará la subconsulta asignada una sola vez y los resultados se almacenarán en caché.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:
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.
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: