Volviendo entonces a nuestro título dinámico, nuestra última implementación era la siguiente:
VAR __selectedCountry = SELECTEDVALUE(Geography[Country])
VAR __numberSelectedCountries = DISTINCTCOUNT(Geography[Country])
VAR __numberAllCountries =
CALCULATE(
DISTINCTCOUNT(Geography[Country]),
ALL(Geography)
)
RETURN
IF(
__numberSelectedCountries = __numberAllCountries,
"Sales evolution",
"Sales evolution in " & __selectedCountry
)
Es decir, en el bloque RETURN comprobábamos si el número de países seleccionados coincidía con el número total de países y, en caso positivo, devolvíamos un texto genérico (“Sales evolution”). En caso negativo presuponíamos que se había seleccionado un único país y devolvíamos un texto del tipo “Sales evolution in Germany” (o en el país que hubiésemos seleccionado).
Ahora ya tenemos las herramientas suficientes para mejorar este resultado. Lo primero que debemos hacer es modificar nuestra función IF para que, si no habíamos seleccionado todos los países, se compruebe si se había seleccionado solo uno, en cuyo caso sí nos sirve el texto mencionado (“Sales evolution in Germany”). Si no es el caso (es decir, si no hemos seleccionado ni todos los países ni uno solo) el texto debería ser algo como “Sales evolution in Spain, Germany”. Es decir, nuestra función IF quedaría así (escrita parcialmente en pseudo-código):
__numberSelectedCountries = __numberAllCountries,
"Sales evolution",
IF(
__numberSelectedCountries = 1,
"Sales evolution in " & __selectedCountry,
Se-han-seleccionado-más-de-un-país-pero-no-todos # else
)
)
Como podemos ver, estamos anidando dos funciones IF. En un caso así, probablemente sea mejor recurrir a la función SWITCH:
TRUE(),
__numberSelectedCountries = 1, "Sales evolution in " & __selectedCountry,
__numberSelectedCountries = __numberAllCountries, "Sales evolution",
Se-han-seleccionado-más-de-un-país-pero-no-todos
)
Como el primer argumento es TRUE(), la función está devolviendo el resultado de la primera condición que se cumpla: Si el número de países seleccionados es uno, devolvemos un texto del tipo “Sales evolution in Germany”. Si, por el contrario, se han seleccionado todos los países, devolvemos el texto “Sales evolution”. Si no se cumple ninguna de las dos condiciones anteriores, es que se ha seleccionado más de un país, pero no todos y queremos devolver un texto como el ya mencionado “Sales evolution in Spain, Germany”.
Este texto no es más que la concatenación de “Sales evolution in ” con el listado de países que se han seleccionado separados por una coma y un espacio en blanco, cosa que podemos conseguir con las funciones VALUES y CONCATENATEX.
Concretamente, si creamos en nuestra medida una variable con el siguiente contenido:
CONCATENATEX(
VALUES(Geography[Country]),
Geography[Country],
", "
)
estamos generando una tabla con los países visibles (función VALUES) y estamos recorriendo esta tabla (función CONCATENATEX) extrayendo el nombre del país y concatenándolos todos separándolos con una coma y un espacio. Si habíamos seleccionado “Spain” y “Germany”, esta variable devolverá el texto “Spain, Germany”.
Es decir, nuestra medida quedaría del siguiente modo:
VAR __selectedCountry = SELECTEDVALUE(Geography[Country])
VAR __numberSelectedCountries = DISTINCTCOUNT(Geography[Country])
VAR __numberAllCountries =
CALCULATE(
DISTINCTCOUNT(Geography[Country]),
ALL(Geography)
)
VAR __selectedCountries =
CONCATENATEX(
VALUES(Geography[Country]),
Geography[Country],
", "
)
RETURN
SWITCH(
TRUE(),
__numberSelectedCountries = 1,
"Sales evolution in " & __selectedCountry,
__numberSelectedCountries = __numberAllCountries,
"Sales evolution",
"Sales in " & __selectedCountries
)
Probémosla seleccionando varios países en nuestra segmentación: