SELECTEDVALUE() con Parámetros de Campo en Power BI

Exploraremos cómo manejar el error que se genera al usar SELECTEDVALUE() con parámetros de campo en Power BI.

Publicado: 15 Ago. 2025
Categorías:

Power BI

Publicado por:

Junior Salvador

Contexto

Imaginemos que deseamos aplicar un formato de estilo condicional en un gráfico de barras de Power BI basado en parámetros de campo. En este caso, buscamos que las barras se muestren en azul cuando la medida corresponde al género Masculino y en rosado cuando corresponde al género Femenino.

Para entender cómo implementar esta lógica, primero revisemos la estructura de la tabla de parámetros de campo utilizada en este ejemplo:


								ParámetroFallecidos = {
									("Hombres Fallecidos", NAMEOF('Medidas'[TOTAL FALLECIDOS M]), 0),
									("Mujeres Fallecidas", NAMEOF('Medidas'[TOTAL FALLECIDOS F]), 1)
								}
							

En la imagen mostrada se observa la disposición de la tabla generada junto con sus columnas. Con esta estructura en mente, lo natural sería emplear la función SELECTEDVALUE() dentro de una medida, de modo que permita realizar una comparación simple y devolver el color correspondiente según la selección de género. A continuación se muestra la medida que, en teoría, debería funcionar correctamente al devolver el color en formato hexadecimal para dos posibles valores:


								COLOR DINAMICO = 
								VAR CampoActual = SELECTEDVALUE('ParámetroFallecidos'[Totales Fallecidos])
								VAR Color = SWITCH(
												CampoActual,
												"Hombres Fallecidos", "#4E79A7",
												"Mujeres Fallecidas", "#D37295",
												BLANK()
											)
								RETURN
									Color
							

Sin embargo, lo anterior no funcionará. Es más, romperá el gráfico si lo aplicamos como formato condicional. Veremos el siguiente error:

"Error de cálculo en la medida 'Medidas'[COLOR DINAMICO]: La columna [Totales Fallecidos] forma parte de la clave compuesta, pero no todas las columnas de dicha clave se incluyen en la expresión o en su expresión dependiente."

Tampoco es que se entienda mucho lo que dice con tanto tecnicismo, pero la idea es que DAX no puede evaluar la columna [Totales Fallecidos] y eso es lo que nos interesa corregir.

El problema

Cuando creamos una tabla con parámetros de campo, la columna de nombres (la primera columna de dicha tabla), que en nuestro caso es [Totales Fallecidos], no es una columna usual como cualquier otra.

[Totales Fallecidos] tiene aplicada una propiedad interna llamada Group By Columns haciendo que internamente el motor de DAX la trate como si formara parte de una clave compuesta. Al usar SELECTEDVALUE() sobre esa columna, DAX no puede evaluarla sola y rompe el gráfico mostrando un error.

La solución

Hay varias formas de solucionar este inconveniente, presentaré un par de ellas.

Opción 1: SELECTEDVALUE() aplicado a la segunda columna

Esta es la solución inmediata y más sencilla. En lugar de aplicar SELECTEDVALUE() sobre la primera columna, la aplicamos sobre la segunda columna de la tabla de parámetros de campo, es decir, sobre [Totales Fallecidos Campos], ya que ésta sí es una columna "normal" y DAX puede evaluarla sin problemas. La medida sería la siguiente:


								COLOR DINAMICO = 
								VAR CampoRef = SELECTEDVALUE('ParámetroFallecidos'[Totales Fallecidos Campos])
								VAR Color = SWITCH(
												CampoRef,
												NAMEOF('Medidas'[TOTAL FALLECIDOS M]), "#4E79A7",
												NAMEOF('Medidas'[TOTAL FALLECIDOS F]), "#D37295",
												BLANK()
											)
								RETURN
									Color
							

Existen unos cambios sutiles como que ahora la variable CampoRef almacena el valor de la segunda columna [Totales Fallecidos Campos] y en la función SWITCH() comparamos con los nombres de las medidas utilizando la función NAMEOF(), que devuelve el nombre de la medida como texto. El resultado es el esperado y el gráfico funciona correctamente.

Opción 2: No usar SELECTEDVALUE()

Supongamos que sí o sí queremos usar la primera columna [Totales Fallecidos]. En ese caso, usar SELECTEDVALUE() no es una opción viable. Una alternativa sencilla es usar una función de agregación como MAX(). ¿Por qué MAX()? En realidad, puede ser cualquier función de agregación como MIN(), SUM(), etc. La idea es que al usar una función de agregación, DAX ya no intentará evaluar la columna "sola" y no se producirá el error. La medida quedaría así:


								COLOR DINAMICO = 
								VAR CampoActual = MAX('ParámetroFallecidos'[Totales Fallecidos])
								VAR Color = SWITCH(
												CampoActual,
												"Hombres Fallecidos", "#4E79A7",
												"Mujeres Fallecidas", "#D37295",
												BLANK()
											)
								RETURN
									IF(COUNTROWS('ParámetroFallecidos') = 1, Color)
							

Expliquemos. La variable CampoActual ahora usa MAX() aplicado a la columna [Totales Fallecidos]. La función MAX() devuelve el valor máximo de la columna en el contexto actual. Dado que en este caso el contexto es un único valor, pues la tabla de parámetros de campo quedó filtrada a una única fila por el segmentador, MAX() devolverá ese único valor presente: el nombre del campo. La función SWITCH() sigue siendo la misma del inicio. Finalmente, la función IF() añade una capa extra de seguridad para asegurarse de que solo se devuelva un color, por eso verificamos que, en el contexto actual, el número de filas en la tabla de parámetros de campo sea igual a 1, es decir, una única selección en el parámetro. Solucionado. Veamos el resultado:

Extras

Por si te preguntas cómo aplicar la medida como formato condicional al gráfico de barras, pues es sencillo. En las opciones de formato de Barras del gráfico, damos clic en fx de la propiedad Color. En la ventana emergente seleccionamos Reglas de la lista "Estilo de formato" y en la opción "¿En qué campo debemos basar esto?" seleccionamos la medida que hemos creado COLOR DINAMICO. Finalmente, establecemos las reglas como se muestra en la imagen:

Contáctame

Comentarios