Visual Calculations Novedad 2024
Las funciones DAX que solo viven dentro de los visuals de Power BI — la mayor novedad de 2024
¿Qué son las Visual Calculations? 🤔
Las Visual Calculations son un tipo especial de cálculo DAX introducido en Power BI en 2024 que se define directamente sobre un visual (tabla, matriz, gráfico) en lugar de en el modelo de datos. La diferencia clave:
- Las MEDIDAS normales se calculan en el modelo → resultado independiente del visual
- Las VISUAL CALCULATIONS se calculan SOBRE la estructura del visual → pueden acceder a las filas de arriba, de abajo, al total del nivel, etc.
Imagina que las medidas normales son como un chef que cocina en la cocina central (el modelo). Las Visual Calculations son como una persona que está directamente en la mesa y puede ver exactamente lo que hay servido delante, a los lados y en el plato de al lado — y hacer cálculos con eso.
¿Por qué son tan útiles?
Antes de Visual Calculations, calcular un acumulado en una tabla que respetara el orden visual era MUY complicado en DAX (requería WINDOW, RANKX, etc.). Ahora con una línea: RUNNINGSUM([Ventas]).
Las Visual Calculations SOLO funcionan dentro de visuals de Power BI Desktop (tablas, matrices, gráficos). NO se pueden usar en medidas normales, columnas calculadas, tablas calculadas ni en expresiones de RLS. Son exclusivas del contexto visual.
¿Cómo se activan y crean?
Para crear una Visual Calculation, sigue estos pasos:
- Selecciona un visual de tabla o matriz en tu informe
- En el menú superior de Power BI Desktop, ve a "Calculations" (o "Cálculos")
- Haz clic en "New visual calculation"
- Se abre un editor DAX especial — aquí escribes tu fórmula
- La fórmula tiene acceso a las funciones especiales de Visual Calculations
Diferencia en el editor: en el editor de Visual Calculations verás una vista previa del visual con la nueva columna calculada añadida directamente.
Las Visual Calculations no aparecen en el panel de campos ni en el modelo. Son locales al visual donde las creas. Si quieres el mismo cálculo en otro visual, tienes que crearlo de nuevo — o usar una medida normal con WINDOW (más complejo pero reutilizable).
RUNNINGSUM — Totales acumulados
reset indica cuándo reiniciar el acumulado (NONE, LOWESTPARENT, HIGHESTPARENT, GRANDTOTAL o un nivel numérico).
Ejemplo básico:
// En una tabla con columnas: Mes | Ventas | (nueva columna visual)
// La columna "Ventas Acumuladas" se crea como Visual Calculation:
Ventas Acumuladas = RUNNINGSUM([Ventas])
// Resultado:
// Enero → 10.000
// Febrero → 25.000 (10.000 + 15.000)
// Marzo → 42.000 (25.000 + 17.000)
// ...
Ejemplo con reset en una matriz con años y meses:
// Reset en cada año (al llegar a enero del año siguiente, vuelve a 0)
Ventas Acumuladas YTD = RUNNINGSUM([Ventas], HIGHESTPARENT)
// 2023 / Enero → 10.000
// 2023 / Febrero → 25.000
// 2023 / Diciembre → 150.000
// 2024 / Enero → 12.000 ← reinicia!
// 2024 / Febrero → 28.000
Comparativa visual (antes vs después):
// ❌ ANTES (medida DAX compleja para el mismo resultado):
Ventas Acum Medida =
CALCULATE(
SUM('Ventas'[Importe]),
FILTER(
ALLSELECTED('Calendario'),
'Calendario'[Fecha] <= MAX('Calendario'[Fecha])
)
)
// ✅ AHORA con Visual Calculations:
Ventas Acumuladas = RUNNINGSUM([Ventas])
// ¡Una línea!
RUNNINGSUM es equivalente a TOTALYTD en algunos contextos, pero mucho más flexible porque trabaja sobre cualquier dimensión del visual, no solo fechas. Y no requiere tabla de calendario marcada. 🎉
MOVINGAVERAGE — Media móvil
Ejemplo básico (media móvil de 3 meses):
// Media de los últimos 3 meses (incluye el mes actual)
Media Móvil 3M = MOVINGAVERAGE([Ventas], 3)
// Enero → Ventas enero (solo hay 1 mes)
// Febrero → (enero + febrero) / 2
// Marzo → (enero + febrero + marzo) / 3
// Abril → (febrero + marzo + abril) / 3 ← ventana deslizante
Ejemplo (media móvil de 12 meses — tendencia anual):
// Tendencia de los últimos 12 meses
Tendencia 12M = MOVINGAVERAGE([Ventas], 12)
// Muy útil para eliminar la estacionalidad y ver la tendencia real
Comparativa con medida DAX equivalente:
// ❌ Medida DAX equivalente (mucho más compleja):
Media Móvil 3M Medida =
VAR FechaActual = MAX('Calendario'[Fecha])
VAR Ventana =
CALCULATETABLE(
VALUES('Calendario'[Mes]),
DATESINPERIOD('Calendario'[Fecha], FechaActual, -3, MONTH)
)
RETURN AVERAGEX(Ventana, CALCULATE(SUM('Ventas'[Importe])))
// ✅ Visual Calculation:
Media Móvil 3M = MOVINGAVERAGE([Ventas], 3)
COLLAPSE y EXPAND — Navegación por jerarquías
Estas funciones solo tienen sentido en matrices con jerarquías (como Año > Trimestre > Mes). Permiten acceder a valores de niveles superiores (padres) o inferiores (hijos) de la jerarquía directamente desde el visual.
Ejemplo — % sobre el total del año (padre del mes):
// En una matriz Año > Mes, columna "% del Año"
% del Año = DIVIDE([Ventas], COLLAPSE([Ventas], ROWS))
// Enero 2024 → 8,3% (ventas enero / total 2024)
// Febrero 2024 → 9,1%
// Total 2024 → 100% (se colapsa a sí mismo)
// COLLAPSEALL: % sobre el gran total
% del Total = DIVIDE([Ventas], COLLAPSEALL([Ventas], ROWS))
Ejemplo — Media de los hijos:
// En la fila "2024 Total": mostrar la media mensual
Media Hijos = EXPAND(AVERAGE([Ventas]), ROWS)
RANGE — Ventanas relativas personalizadas
Ejemplo — Total de los últimos 3 meses excluyendo el actual:
// Suma de las 3 filas anteriores (sin incluir la actual)
Ventas 3M Anteriores =
CALCULATE(
SUM([Ventas]),
RANGE(-3, -1)
)
// Marzo: suma de enero + febrero + (el que sea anterior a marzo)
¿Cuándo usar Visual Calculations vs medidas normales?
| CARACTERÍSTICA | MEDIDAS NORMALES | VISUAL CALCULATIONS |
|---|---|---|
| Dónde se definen | En el modelo (pestaña de datos) | Directamente sobre el visual |
| Reutilizables | ✅ En cualquier visual | ❌ Solo en ese visual |
| Acceso a filas vecinas | ❌ Complejo (WINDOW, OFFSET) | ✅ PREVIOUS, NEXT, FIRST, LAST |
| Rendimiento | ✅ Mejor para cálculos complejos | ⚠️ Limitado a datos ya en el visual |
| Disponible en RLS | ✅ Sí | ❌ No |
| Disponible en Export | ⚠️ Depende | ❌ No siempre |
| Nivel de dificultad | 🔴 Alto para acumulados | 🟡 Medio |
| Requiere tabla calendario | ✅ Para time intelligence | ❌ No siempre |
Si el cálculo lo vas a usar en UN solo visual y depende del orden o posición de las filas → Visual Calculations. Si lo vas a usar en varios visuals o necesitas reutilizarlo → Medida normal. Y si dudas, empieza con la medida — siempre puedes crear una Visual Calculation encima. 💡
Cosas importantes que debes saber
- Solo disponibles en Power BI Desktop — no en Report Builder ni Embedded antiguo
- No se exportan a Excel con todo su detalle
- No se pueden usar en expresiones de RLS
- No funcionan en todos los tipos de visual — principalmente tablas, matrices y algunos gráficos
- No son medidas del modelo — no aparecen en DAX Studio ni en el panel de campos para otros visuals
- El parámetro
[eje]puede ser ROWS o COLUMNS — en matrices bidimensionales hay que especificarlo bien - El parámetro
[reset]controla cuándo se reinicia el cálculo al cambiar de nivel en jerarquías
¡Enhorabuena! Ya conoces las Visual Calculations — una de las incorporaciones más esperadas de Power BI. Si quieres el control más fino sobre ventanas de filas desde el modelo (sin depender del visual), el siguiente paso son las Window Functions.