SunFruits Exports
POWER BI · INTERMEDIO–AVANZADO
Programa Power BI para SunFruits Exports · Módulo 2 · Día 6

Sesión 6
DAX avanzado e
inteligencia de tiempo

Iteradores, context transition, RANKX y time intelligence

Bloque A · DAX avanzadoBloque B · Inteligencia de tiempo

2 horas · 2 bloques de 45 min · nivel avanzado

Mapa de la sesión

🅰 Bloque A — 45 min

DAX avanzado

  • Iteradores (SUMX/AVERAGEX)
  • Context transition
  • RANKX / TOPN
  • Tablas virtuales y KEEPFILTERS

🅱 Bloque B — 45 min

Inteligencia de tiempo

  • YTD / QTD / MTD
  • YoY y % de crecimiento
  • Promedios móviles y MAT
  • Comparativa contra Metas

Requisito: tabla Calendario marcada como tabla de fechas (Sesión 3).

Objetivos de aprendizaje

Al terminar la sesión vas a poder…

Iterar

Usar SUMX/AVERAGEX y entender el context transition.

Rankear

Construir rankings y Top-N con RANKX y TOPN.

Comparar

Medir YTD, YoY, móviles y cumplimiento de metas.

💡 Idea fuerza

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.

De dónde venimos (Sesión 4)

Ya tienes

  • Medidas base: [Total Monto USD], [Total Kg], [N Pedidos]
  • CALCULATE, FILTER, ALL

Hoy subimos el nivel

Iteradores, rankings y todo el análisis temporal que el negocio de SunFruits necesita para decidir.

Bloque A · 45 min

DAX avanzado

Iteradores, transición de contexto y rankings

Repaso: fila vs filtro

Contexto de fila

"La fila actual". Vive en columnas calculadas e iteradores.

Contexto de filtro

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.

Iteradores: SUMX / AVERAGEX

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.

Context transition

Al invocar una medida dentro de un iterador, DAX aplica un CALCULATE implícito: la fila actual se vuelve filtro.

  • Es lo que hace que el cálculo "por categoría" funcione.
  • También la causa #1 de resultados inesperados.
// Suma del monto recalculado por producto
Monto x Producto =
SUMX(
  VALUES(Productos[Producto]),
  [Total Monto USD]   // transición
)

Rankings: RANKX y TOPN

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.

Tablas virtuales

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.

KEEPFILTERS

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"))
Bloque B · 45 min

Inteligencia de tiempo

YTD, YoY, móviles y metas

Requisito: la tabla Calendario

Sin una tabla de fechas marcada, las funciones de time intelligence dan resultados raros o no funcionan.

Acumulados: YTD / QTD / MTD

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.

Comparativa interanual (YoY)

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.

% de crecimiento

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.

Promedios móviles y MAT

// 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).

Comparativa contra Metas

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.

Caso SunFruits: tablero temporal

IndicadorPara qué
Monto YTDAvance acumulado del año
Crecimiento YoY %¿Crecemos vs el año pasado?
Monto MAT 12mTendencia limpia de estacionalidad
Cumplimiento Meta %¿Vamos a llegar a la meta?
Ranking ProductoQué fruta lidera las ventas

Buenas prácticas de DAX avanzado

Claridad

  • Usa VAR para nombrar pasos
  • Compón sobre medidas base
  • Comenta la intención

Rendimiento

  • Evita iteradores sobre el hecho completo si hay alternativa
  • Apóyate en agregaciones (Sesión 5)
  • Mide antes de optimizar (Sesión 7)

🛠 Taller de la sesión

Parte 1 — Avanzado

  • Monto Ponderado con SUMX.
  • Ranking de productos (RANKX) y Top 5 clientes (TOPN).

Parte 2 — Tiempo

  • Monto YTD, YoY y Crecimiento %.
  • MAT 12m y Promedio móvil 3m.
  • Cumplimiento Meta % en matriz por producto/año.

Resumen — puntos importantes

🅰 DAX avanzado

  • Iteradores recorren fila por fila
  • Context transition: medida dentro de iterador
  • RANKX/TOPN para rankings
  • Tablas virtuales y KEEPFILTERS

🅱 Tiempo

  • YTD/QTD/MTD acumulan
  • SAMEPERIODLASTYEAR / DATEADD para YoY
  • DATESINPERIOD para móviles/MAT
  • Cumplimiento vs Metas

🎯 Una idea: domina context transition y la tabla Calendario; con eso desbloqueas casi todo el DAX analítico.

Preguntas de repaso

Verifiquemos lo aprendido en esta sesión

1

¿Qué es el context transition y cuándo ocurre?

2

¿Por qué SUMX de (kg×precio) difiere de multiplicar los totales?

3

¿Qué requisito debe cumplir la tabla Calendario para el time intelligence?

4

¿Cómo calcularías el crecimiento YoY %?

5

¿Para qué sirve KEEPFILTERS dentro de CALCULATE?

Sun Fruits Exports · Programa Power BI

¡Gracias!

Gracias al equipo de SunFruits por su tiempo y participación

Edwin Barrientos Retuerto

Arquitecto de Inteligencia de Negocios & Cloud · Instructor

🌐 blog.arquitecturabi.pe

Nos vemos en la Sesión 7 — Rendimiento y visualizaciones avanzadas

1 / 24