Exploramos el Formula y Storage Engine con una metáfora de un almacén que aclara el proceso desde la consulta hasta la recuperación de datos en consultas DAX.
Si trabajas con el Lenguaje DAX y utilizas Power BI, es crucial entender qué son el Formula y Storage Engine. Hoy vamos a descubrir mediante una analogía qué representan y cuál es su utilidad.
Es importante destacar que, si bien la explicación se basa en una consulta de Lenguaje DAX, que actualmente se puede realizar en Power BI a través de la vista de consultas, esta explicación se realizará desde DAX Studio. Esto es esencial, ya que es en DAX Studio donde veremos el desglose del rendimiento de una medida y, por supuesto, nos permitirá entender a fondo lo que son el Formula Engine y el Store Engine.
La Consulta DAX
Para ilustrar nuestro tema, utilizaremos el modelo de DisproductosLD famoso en el ámbito de Power Skill. Recordemos que este modelo incluye los hechos de Pedidos, que representan nuestras ventas, y diversas dimensiones: Productos, Fechas, Categoría de Producto y Descuentos. A continuación la consulta DAX
1 | DEFINE 2 | MEASURE Medidas[DiasDeEntregaPedidos] = 3 | CALCULATE ( 4 | SUMX ( Pedidos, INT ( Pedidos[FechaDeLlegada] - Pedidos[FechaDePedido] ) ), 5 | Pedidos[TipoDeCompra] = "Normal", 6 | ALLSELECTED () 7 | ) 8 | EVALUATE 9 | SUMMARIZECOLUMNS (10 | Fechas[Ano],11 | ROLLUPADDISSUBTOTAL ( Fechas[Mes], "MesSubtotal" ),12 | "@DiasDeEntregaPedidos", [DiasDeEntregaPedidos]13 | )14 | ORDER BY15 | Fechas[Ano],16 | Fechas[Mes]
Breve Explicación de la Consulta
En la sección EVALUATE, observamos un SUMMARIZECOLUMNS donde se agrupa por año y mes. También se define una medida llamada DiasDeEnteregaPedidos, la cual encontramos detallada en la sección de DEFINE.
Dentro de esta sección, hemos definido la medida DiasDeEntregaPedidos que emplea un cálculo específico. Este cálculo utiliza la función SUMX, que itera sobre la tabla Pedidos y realiza la resta entre la FechaDeLlegada y la FechaDePedido, proporcionando así los días de entrega. Importante destacar que se emplea la función INT para convertir el valor de fecha en valor numérico. Además, esta medida se restringe únicamente a lalos TiposDeCompra igual a Normal, y se usa la función ALLSELECTED para considerar todos los filtros aplicados.
Este proceso nos permite obtener el total de días de entrega para las compras normales, y queremos que este total se repita en todas las partes del informe. Esto es clave, ya que más adelante usaremos esta métrica en cálculos de participación o proporción, según el caso.
Finalmente, en nuestra sección de ORDER BY, hemos organizado los datos por año y por mes. Procederemos a ejecutar la consulta y observar en la parte inferior el resultado. Buscamos obtener ese mismo valor en todas las partes, ya que, como mencionamos, será fundamental para métricas futuras que calcularemos para analizar la participación.
La Metáfora del Almacén para el Formula y Storage Engine
Te invitamos a explorar nuestra infografía educativa, diseñada como una metáfora intuitiva, para desentrañar los conceptos del Formula Engine y del Storage Engine. Esta herramienta visual también destaca las métricas clave de Server Timing que exploraremos en DAX Studio, facilitando una comprensión más profunda de estos temas esenciales.
A continuación una explicación:
- Pedido (Cliente): Expresión DAX – Esta sección representa una consulta DAX, que es como un pedido hecho por un cliente en un almacén; en el contexto de datos, sería una solicitud para recuperar o calcular datos específicos.
- Gerente (Formula Engine) – Aquí se muestra el Formula Engine como un gerente que planifica y coordina qué datos (cajas) se necesitan para satisfacer la consulta DAX (pedido). Este motor es responsable de decidir los datos a recuperar y realizar cálculos complejos.
- Planificación (QueryPlan): Decide qué datos se necesitan para la consulta.
- Coordinación (Ejecución del Query Plan): Coordina con el Storage Engine para obtener los datos necesarios.
- Cálculos Complejos: Realiza operaciones más avanzadas una vez que los datos están disponibles.
- Área Rápida SE Cache – Este parece ser un espacio que permite un acceso más rápido a los datos comúnmente requeridos, reduciendo la necesidad de buscar datos frecuentemente.
- Datos (Cajas) – Representa los datos almacenados, equivalentes a las cajas en un almacén físico.
- Storage Engine (Núcleo) – Actúa como el conjunto de trabajadores en un almacén que efectivamente van y buscan las cajas (datos) que el gerente (Formula Engine) ha decidido que se necesitan. También es responsable del procesamiento básico de datos como agrupaciones o conteos.
- Recuperación de Datos: Busca los datos que el Formula Engine ha decidido que se necesitan.
- Procesamiento básico de datos: Realiza un procesamiento básico en los datos, como agruparlos por tipo o contarlos.
- Almacén de Cajas (Base de Datos) – La base de datos en sí, donde se almacenan todos los datos (cajas) que se pueden recuperar y procesar.
Conclusiones
Esperamos que esta información contribuya a un mejor entendimiento del Formula y Storage Engine, así como de las métricas generales de rendimiento, incluyendo SE Queries, SQ Cache y el multiplicador. Es importante destacar que estos detalles solo se pueden visualizar en DAX Studio hasta la fecha. Aunque Power BI ofrece el analizador de rendimiento, que entre otros aspectos indica cuánto tiempo tarda en ejecutarse una consulta, para un análisis más detallado necesitamos de DAX Studio. Aquí, podemos discernir cuánto tiempo corresponde al Formula Engine y cuánto al Storage Engine, además de otros detalles que nos dan pistas sobre dónde empezar a probar para mejorar el rendimiento de nuestras medidas. Cabe mencionar que DAX Studio ofrece aún más detalles, como la subclase de operación y el tiempo que tarda cada operación, entre otros, pero eso será conveniente explorarlo en otra publicación.