Cómo usar la función SWITCH en DAX: paso a paso
La función SWITCH en DAX permite sustituir varios IF anidados por una expresión limpia y fácil de leer. Es ideal para convertir códigos en etiquetas, crear categorías personalizadas o clasificar valores por niveles, todo dentro de una única medida o columna calculada. A continuación verás dos patrones prácticos de SWITCH en DAX que resuelven la mayoría de los casos del día a día.
Requisitos previos
- Power BI Desktop instalado (o acceso al Power BI Service).
- Un modelo con al menos una tabla de datos cargada.
- Nociones básicas de medidas y columnas calculadas en DAX.
- Una columna con valores para categorizar — por ejemplo, una prioridad numérica o un total de ventas.
Paso 1: Entender la sintaxis de SWITCH
La función SWITCH evalúa una expresión y la compara con una lista de pares valor/resultado. Cuando encuentra el primer valor igual, devuelve el resultado correspondiente. El último argumento, opcional y sin par, funciona como valor predeterminado (el else).
SWITCH(
<expresión>,
<valor1>, <resultado1>,
<valor2>, <resultado2>,
...
<valor predeterminado> // opcional
)
Piensa en ella como una alternativa más legible a escribir muchos IF unos dentro de otros.
Paso 2: Crear una columna con un SWITCH simple
Este primer ejemplo de SWITCH en DAX convierte un código numérico en una etiqueta de texto. Imagina una tabla Tareas con la columna Prioridad rellenada con 1, 2 o 3. Crea una nueva columna calculada:
Etiqueta Prioridad =
SWITCH(
Tareas[Prioridad],
1, "Alta",
2, "Media",
3, "Baja",
"No definida"
)
Si Prioridad es 1, la columna muestra "Alta"; si es 2, muestra "Media"; y así sucesivamente. Cualquier otro valor (como 4 o un campo vacío) cae en el valor predeterminado "No definida". Es una forma rápida de hacer que los datos técnicos sean legibles para el usuario final.
Paso 3: Usar SWITCH(TRUE()) para niveles
Un SWITCH simple solo compara valores exactos. Cuando necesitas rangos o condiciones (mayor que, menor que), usa el patrón SWITCH(TRUE()). En lugar de un valor, evalúas condiciones lógicas de arriba abajo y devuelves la primera que sea verdadera. Crea esta medida:
Nivel de Ventas =
VAR TotalVentas = SUM( Ventas[Importe] )
RETURN
SWITCH(
TRUE(),
TotalVentas >= 100000, "Oro",
TotalVentas >= 50000, "Plata",
TotalVentas >= 10000, "Bronce",
"Por debajo del mínimo"
)
Aquí la medida suma las ventas en la variable TotalVentas y luego la clasifica. El orden es fundamental: como SWITCH devuelve la primera condición verdadera, las reglas más exigentes deben ir primero. Un total de 120 000 es "Oro", aunque también cumpla las reglas siguientes.
Paso 4: Definir el valor predeterminado y evitar errores comunes
Incluye siempre un valor predeterminado al final. Sin él, las filas que no coinciden con ninguna condición devuelven BLANK(), lo que suele confundir a quien lee el informe. Hay además dos errores frecuentes que conviene evitar:
- Mezclar tipos de datos en los resultados (texto en un caso, número en otro). Mantén todos los resultados del mismo tipo.
- Intentar usar rangos en un SWITCH simple, como
SWITCH(Ventas[Importe], > 100, ...). Eso no funciona — para condiciones, usa siempre SWITCH(TRUE()).
Consejo: en el patrón SWITCH(TRUE()), coloca las condiciones más restrictivas arriba. La función se detiene en la primera que sea verdadera.
Verificar el resultado
Para confirmar que funcionó, arrastra la columna Etiqueta Prioridad a un objeto visual de tabla junto a la columna Prioridad y comprueba que cada número muestra la etiqueta correcta. Para la medida Nivel de Ventas, colócala en una tarjeta o en una matriz con una dimensión (por ejemplo, por región) y observa cómo cambian los niveles. Prueba también un caso límite: una prioridad de 4 o un valor de ventas muy bajo deben caer en el valor predeterminado que definiste.
Conclusión
Con estos dos patrones — un SWITCH simple para asignar valores y SWITCH(TRUE()) para niveles — cubres la gran mayoría de las clasificaciones que necesitarás en Power BI, con fórmulas mucho más legibles que una cadena de IF. A partir de aquí, prueba a combinar SWITCH con variables para una lógica más compleja o úsalo en el formato condicional de un objeto visual. ¿Cuál es el IF anidado más confuso que has escrito — y cuánto más limpio se vería ahora con SWITCH?