Clasificación en estrellas con SVG

Clasificación en estrellas con SVG

Preguntaban en el canal de telegram @PowerBIEspanol, fuente inagotable de consultas, si se podía utilizar la clasificación de estrellas ajustándola aun más a los decimales, de manera que los rangos fueran más pequeños utilizando para ello estrellas a la mitad.

Con la medida que se crea en las medidas rápidas se puede obtener la siguiente clasificación:

Como vemos, 4,6 se muestra como 5 estrellas, 4,3 como 4, etc.

La medida rápida es muy sencilla de realizar con el cuadro de diálogo de medidas rápidas:

Y el código DAX resultante es el siguiente:

Clasificación por estrellas: Promedio de Nota = 
VAR __MAX_NUMBER_OF_STARS = 5
VAR __MIN_RATED_VALUE = 0
VAR __MAX_RATED_VALUE = 5
VAR __BASE_VALUE = AVERAGE('Tabla'[Nota])
VAR __NORMALIZED_BASE_VALUE =
	MIN(
		MAX(
			DIVIDE(
				__BASE_VALUE - __MIN_RATED_VALUE,
				__MAX_RATED_VALUE - __MIN_RATED_VALUE
			),
			0
		),
		1
	)
VAR __STAR_RATING = ROUND(__NORMALIZED_BASE_VALUE * __MAX_NUMBER_OF_STARS, 0)
RETURN
	IF(
		NOT ISBLANK(__BASE_VALUE),
		REPT(UNICHAR(9733), __STAR_RATING)
			& REPT(UNICHAR(9734), __MAX_NUMBER_OF_STARS - __STAR_RATING)
	)

Sin embargo, vamos a ir un paso más allá y vamos a configurar rangos más pequeños. En este caso ya no podemos utilizar los UNICHAR ya que el UNICHAR de la estrella a la mitad no funciona en Power BI. En su defecto lo que haremos es crear imágenes en SVG para todos los rangos de la clasificación.

Con un editor de fotografía construimos las imágenes que vamos a necesitar:

Así todas las combinaciones desde 0 a 5 con intervalos de 0,5.

Una vez que tenemos todas las imágenes en PNG utilizaré un conversor de SVG, en este caso me he decantado por el conversor gratuito de NCH Software Pixilium.

Convertimos las imágenes a SVG, las abrimos en el navegador y con botón derecho ver código fuente de la página obtenemos el código SVG de la imagen:

Ese código SVG lo insertamos en una variable precedido de «data:image/svg+xml;utf8, y teniendo en cuenta que debemos sustituir en el código las comillas dobles por simples.

Vamos extrayendo todos los códigos de las imágenes en variables DAX y para finalizar hacemos en el return el siguiente SWITCH:

VAR __CalificacionMedia= AVERAGE(Tabla[Nota])

RETURN

SWITCH (TRUE(),
__CalificacionMedia>0 && __CalificacionMedia<=0.25 , __STAR_0, __CalificacionMedia>0.25 && __CalificacionMedia<=0.75 , __STAR_05, __CalificacionMedia>0.75 && __CalificacionMedia<=1.25 , __STAR_1, __CalificacionMedia>1.25 && __CalificacionMedia<=1.75 , __STAR_15, __CalificacionMedia>1.75 && __CalificacionMedia<=2.25 , __STAR_2, __CalificacionMedia>2.25 && __CalificacionMedia<=2.75 , __STAR_25, __CalificacionMedia>2.75 && __CalificacionMedia<=3.25 , __STAR_3, __CalificacionMedia>3.25 && __CalificacionMedia<=3.75 , __STAR_35, __CalificacionMedia>3.75 && __CalificacionMedia<=4.25 , __STAR_4, __CalificacionMedia>4.25 && __CalificacionMedia<=4.75 , __STAR_45, __CalificacionMedia>4.75 && __CalificacionMedia<=5 , __STAR_5,
blank())

La medida resultante deberemos formatearla como dirección URL de la imagen:

La medida resultante es la siguiente:

Y el resultado final de nuestra medida la podemos ver en el anterior ejemplo:

FranM

Deja una respuesta