Este tutorial analizará la transición de contexto y los iteradores anidados. Aprenderá la importancia de estas entidades y cómo pueden ser una buena fuente de optimización.
Si recuerda, la transición de contexto ocurre cuando un contexto de fila cambia a un contexto de filtro equivalente. Debe estar al tanto de lo que sucede cuando se produce una transición de contexto en sus iteradores porque a menudo puede generar resultados lentos.
Tabla de contenido
Iteradores anidados versus CALCULAR
Si se invoca una transición de contexto durante una iteración, se crea una tabla de materialización. Esto significa que la transición de contexto se invoca a través de fórmulas en su DAX. La tabla son datos sin comprimir que se envían al motor de fórmulas.
Para demostrar, la primera medida es para Grandes Ventas que obtiene el Precio Actual si es mayor o igual a 500.

La siguiente medida es para el promedio de las Grandes Ventas con iteradores anidados.

La última medida obtiene el promedio de Big Sales sin un iterador anidado y un CallBackDataID.

Ejecute la medida con el iterador anidado. Asegúrese de borrar la memoria caché antes de ejecutar y, a continuación, active los tiempos del servidor y el plan de consulta.

Puede ver que generó 3 escaneos, 2 CallBackDataID y 15,003 filas. Esto es motivo de preocupación porque solo hay 101 filas para la salida. Esto sucedió porque la medida tiene dos iteradores o funciones X.
Esta es la forma completamente expandida de la medida que se ejecutó:

Está iterando la tabla Fact Sales con . Luego reitera nuevamente con CallBackDataID usando . implícita que invoca la transición de contexto y materializa la tabla. Es por eso que extrajo 15,003 filas, incluso si solo hay 101 filas para la salida.
Ejecute la otra medida que no tiene iteradores anidados. Todavía está iterando la tabla Fact Sales usando AVERAGEX pero el precio actual está fuera de la función. Filtra los productos donde el precio actual es mayor o igual a 500 y luego calcula el promedio.

Puede ver que solo tiene 2 escaneos, 104 filas y no tiene un CallBackDataID. Entonces, si usa CALCULATE , puede deshacerse de los iteradores anidados y CallBackDataID .
Funciones DAX en LuckyTemplates: uso de iteradores
Cómo usar una función de iteración en LuckyTemplates
Cálculo DAX: filtro de transiciones de contexto
Conclusión
Hay muchas causas para un DAX de rendimiento lento. Uno de ellos se debe a los iteradores anidados que provocan transiciones de contexto innecesarias. Estos iteradores materializan más filas de las necesarias, lo que hace que sus consultas se ralenticen.
La mejor solución para esto es colocarlo dentro de CALCULATE . Esto crea menos trabajo para el motor de fórmulas y maximiza las capacidades del motor de almacenamiento.