Crear medidas eficientes en DAX es esencial para que los informes tengan un rendimiento optimizado. Dos buenas prácticas ayudan mucho en esto: usar VAR y usar SWITCH, cada una con un papel diferente.
SWITCH se usa para simplificar expresiones condicionales que deben devolver diferentes valores según varias condiciones.
Considera la siguiente medida DAX, que evalúa el desempeño de una medida llamada [Variance]:
Variance KPI = IF([Variance] > 0.80, "Amazing!", IF([Variance] > 0.60, "Good", "Bad"))
Aunque funciona correctamente, se nota que hay varios IF anidados y que la medida [Variance] se llama más de una vez en esta expresión.
Esto aumenta el procesamiento innecesario, sobre todo en modelos con grandes volúmenes de datos. Esta fórmula puede ser más eficiente — y también más legible.
La solución con SWITCH y VAR
Reestructurando la medida con SWITCH(TRUE()) y una variable intermedia, obtenemos la versión optimizada:
VAR Calc = [Variance]
RETURN
SWITCH
(
TRUE(),
Calc > 0.80, "Amazing!",
Calc > 0.60, "Good",
"Bad"
)
La variable Calc almacena el valor de [Variance] una sola vez, y eso elimina la necesidad de nuevas llamadas a esta medida.
Cada recurso tiene su papel:
- VAR → rendimiento: el valor se calcula una sola vez y se reutiliza. De aquí viene la mejora de rendimiento.
- SWITCH(TRUE()) → legibilidad: por sí solo, SWITCH no es más rápido que los IF anidados. Lo que aporta es un código más limpio: las condiciones quedan alineadas, en el orden en que se evalúan, y son fáciles de leer, entender y mantener en el futuro.
Un ejemplo más: clasificando el cumplimiento de una meta
Mira una medida que clasifica el resultado de ventas frente a una meta. En la versión con IF anidados, tanto [Ventas Totales] como [Meta] se llaman varias veces, y la lógica queda escondida entre paréntesis:
Estado de la Meta =
IF([Ventas Totales] >= [Meta] * 1.2, "Superó",
IF([Ventas Totales] >= [Meta], "Cumplió",
IF([Ventas Totales] >= [Meta] * 0.8, "Casi", "Por debajo")))
Reescribiéndola con VAR y SWITCH(TRUE()):
Estado de la Meta =
VAR VentasActuales = [Ventas Totales]
VAR MetaActual = [Meta]
RETURN
SWITCH(
TRUE(),
VentasActuales >= MetaActual * 1.2, "Superó",
VentasActuales >= MetaActual, "Cumplió",
VentasActuales >= MetaActual * 0.8, "Casi",
"Por debajo"
)
Qué cambió:
- Rendimiento (VAR): cada medida se calcula una sola vez, en lugar de tres llamadas a
[Ventas Totales]y tres a[Meta]en la versión anterior. - Legibilidad (SWITCH): las cuatro franjas aparecen una debajo de la otra, y para cambiar una regla basta con editar una línea.
- El orden importa: SWITCH(TRUE()) devuelve el resultado de la primera condición verdadera, así que las franjas deben ir de la más restrictiva a la más amplia (de
>= MetaActual * 1.2hasta>= MetaActual * 0.8).
Buenas prácticas con SWITCH y variables en DAX
- Prioriza el uso de variables: Siempre que sea posible, guarda los valores en variables para evitar cálculos repetitivos. De aquí viene la mejora de rendimiento.
- Cambia varios IF por SWITCH(TRUE()): Esto vuelve el código más legible, ordenado y fácil de mantener.
- Prueba tus medidas: En modelos grandes, cambios simples pueden generar mejoras significativas de eficiencia. Compara antes y después con el Performance Analyzer de Power BI Desktop.
📚 Este artículo se basó en una pregunta del simulacro de la Microsoft para el examen DP-600.