
Iteradores, context transition, RANKX y time intelligence
2 horas · 2 bloques de 45 min · nivel avanzado
DAX avanzado
Inteligencia de tiempo
Requisito: tabla Calendario marcada como tabla de fechas (Sesión 3).
Al terminar la sesión vas a poder…
Usar SUMX/AVERAGEX y entender el context transition.
Construir rankings y Top-N con RANKX y TOPN.
Medir YTD, YoY, móviles y cumplimiento de metas.
El DAX avanzado es contexto + iteración. Cuando una medida vive dentro de un iterador, ocurre la magia (y la confusión): el context transition.
[Total Monto USD], [Total Kg], [N Pedidos]Iteradores, rankings y todo el análisis temporal que el negocio de SunFruits necesita para decidir.
Iteradores, transición de contexto y rankings
"La fila actual". Vive en columnas calculadas e iteradores.
Los filtros activos del visual. Lo que ve una medida.
La clave de hoy: cuando llamas una medida dentro de un iterador, el contexto de fila se convierte en contexto de filtro → context transition.
Recorren una tabla fila por fila y agregan al final. Ideal para cálculos que dependen de cada línea.
// Monto ponderado real (kg × precio por línea), no un promedio simple
Monto Ponderado = SUMX(Ventas, Ventas[Kg Netos] * Ventas[Precio USD x Kg])
Precio Prom Ponderado = DIVIDE([Monto Ponderado], [Total Kg])
El cálculo se hace por fila y luego se suma: distinto a multiplicar totales.
Al invocar una medida dentro de un iterador, DAX aplica un CALCULATE implícito: la fila actual se vuelve filtro.
// Suma del monto recalculado por producto
Monto x Producto =
SUMX(
VALUES(Productos[Producto]),
[Total Monto USD] // transición
)Ranking Producto =
RANKX(ALL(Productos[Producto]), [Total Monto USD], , DESC, Dense)
// Monto de los 5 mejores clientes en el contexto actual
Monto Top5 Clientes =
SUMX(TOPN(5, VALUES(Clientes[Cliente]), [Total Monto USD]), [Total Monto USD])
ALL en RANKX quita el filtro de la propia columna para rankear sobre todo el universo.
Construye tablas en memoria con SUMMARIZE/ADDCOLUMNS y opera sobre ellas.
Productos sobre meta =
VAR t = ADDCOLUMNS(VALUES(Productos[Producto]), "m", [Total Monto USD])
RETURN COUNTROWS(FILTER(t, [m] > 1000000))
Pensar en tablas virtuales es el salto mental hacia el DAX experto.
CALCULATE normalmente reemplaza el filtro de una columna. KEEPFILTERS lo añade respetando el existente.
Útil cuando ya hay un filtro en el visual que no quieres pisar.
Monto Uva (kf) =
CALCULATE(
[Total Monto USD],
KEEPFILTERS(
Productos[Producto] = "Uva"))YTD, YoY, móviles y metas
Ventas[Fecha Pedido].Sin una tabla de fechas marcada, las funciones de time intelligence dan resultados raros o no funcionan.
Monto YTD = TOTALYTD([Total Monto USD], Calendario[Date])
Monto QTD = TOTALQTD([Total Monto USD], Calendario[Date])
Monto MTD = TOTALMTD([Total Monto USD], Calendario[Date])
YTD reinicia cada 1 de enero. Ponlo en una matriz por mes para ver la curva acumulada.
Monto Año Anterior =
CALCULATE([Total Monto USD], SAMEPERIODLASTYEAR(Calendario[Date]))
// Equivalente con DATEADD
Monto AA (dateadd) =
CALCULATE([Total Monto USD], DATEADD(Calendario[Date], -1, YEAR))
Compara 2025 contra 2024 respetando el periodo del contexto.
Crecimiento YoY % =
VAR act = [Total Monto USD]
VAR ant = [Monto Año Anterior]
RETURN DIVIDE(act - ant, ant)
Da formato de porcentaje y agrégale un indicador (KPI / icono) para resaltar caídas y subidas.
// Acumulado anual móvil (últimos 12 meses)
Monto MAT 12m =
CALCULATE([Total Monto USD],
DATESINPERIOD(Calendario[Date], MAX(Calendario[Date]), -12, MONTH))
// Promedio móvil de 3 meses
Prom Móvil 3m =
AVERAGEX(DATESINPERIOD(Calendario[Date], MAX(Calendario[Date]), -3, MONTH), [Total Monto USD])
Suavizan la estacionalidad fuerte de la fruta (campañas).
Cumplimiento Meta % =
VAR m = [Total Monto USD]
VAR meta = SUM(Metas[Meta Monto USD])
RETURN DIVIDE(m - meta, meta)
La tabla Metas está a nivel año/producto: cuida la granularidad al cruzar.
| Indicador | Para qué |
|---|---|
| Monto YTD | Avance acumulado del año |
| Crecimiento YoY % | ¿Crecemos vs el año pasado? |
| Monto MAT 12m | Tendencia limpia de estacionalidad |
| Cumplimiento Meta % | ¿Vamos a llegar a la meta? |
| Ranking Producto | Qué fruta lidera las ventas |
VAR para nombrar pasos🎯 Una idea: domina context transition y la tabla Calendario; con eso desbloqueas casi todo el DAX analítico.
Verifiquemos lo aprendido en esta sesión
¿Qué es el context transition y cuándo ocurre?
¿Por qué SUMX de (kg×precio) difiere de multiplicar los totales?
¿Qué requisito debe cumplir la tabla Calendario para el time intelligence?
¿Cómo calcularías el crecimiento YoY %?
¿Para qué sirve KEEPFILTERS dentro de CALCULATE?
Gracias al equipo de SunFruits por su tiempo y participación
Arquitecto de Inteligencia de Negocios & Cloud · Instructor
🌐 blog.arquitecturabi.pe
Nos vemos en la Sesión 7 — Rendimiento y visualizaciones avanzadas