Crear buckets estáticos en el script es fácil. Basta con definir los rangos, darles un nombre y hacer un left join al campo que queremos clasificar, por tanto no profundizaremos más en la explicación. Pero hacer esto mismo desde un gráfico, dinámicamente, en función de los valores que en cada momento tome un campo y dependiendo de las selecciones realizadas en cada momento, es un poco más complicado.
Se trata de evitar crear expresiones en los gráficos de este
tipo:
IF($(vL.Puntuacion)=0, 'No disponible',
IF($(vL.Puntuacion) < 50 ,
'Disponible con deficiencias graves',
IF($(vL.Puntuacion) < 80 ,
'Disponible con deficiencias leves',
IF($(vL.Puntuacion) < 101 ,
'Disponible sin deficiencias'))))
Donde vL.Puntuacion es una variable que calcula un % y cuya expresión es:
(SUM(Valoracion_Real) / SUM(Punt_Max_Elemento)) * 100
A su vez Valoracion_Real es un campo del modelo de datos
Y Punt_Max_Elemento es un campo precalculado en el
script con la suma de Valoracion_Real, aunque también podríamos usar SUM({1} Valoracion_Real)
o SUM( TOTAL Valoracion_Real)
Estas expresiones representan 2 problemas: Por un lado los
IF son pesados de procesar, y por otro generan bastante trabajo de
mantenimiento porque obligan a buscar y corregir las expresiones gráfico a
gráfico cada vez que se añadan o modifiquen los intervalos, con el consiguiente
riesgo de que nos dejemos alguna
Primero preparamos la tabla en un Excel con los buckets:
Valoración |
Descripción |
Intervalo % |
Inter_Desde |
Inter_Hasta |
Color |
0 |
No disponible |
0% |
0 |
0 |
RGB(215,219,221) |
1 |
Disponible con deficiencias graves |
1%-49% |
1 |
49 |
RGB(241,148,138) |
2 |
Disponible con deficiencias leves |
50%-79% |
50 |
79 |
RGB(248,196,113) |
3 |
Disponible sin deficiencias |
80%-100% |
80 |
100 |
RGB(130,224,170) |
segundo preparamos el script para leer esa tabla y generar
una tabla con todos los posibles valores de los intervalos;
//*********************************************************************************************************
// DESCRIPCION VALORACIONES
DE ELEMENTOS
//*********************************************************************************************************
DESC_VAL_ELEMENTOS_TMP:
LOAD Valoración,
Descripción,
[Intervalo %],
Inter_Desde,
Inter_Hasta,
Margen_sup,
Color
FROM [import\Plantilla
Servicios.xlsx]
(ooxml, embedded labels, table is [Valoracion
Elementos]);
For i=1 to NoOfRows('DESC_VAL_ELEMENTOS_TMP')
let
vlimite_desde=Peek('Inter_Desde',-$(i),'DESC_VAL_ELEMENTOS_TMP');
//aquí
toma el margen superior de cada intervalo.
let
vlimite_hasta=Peek('Inter_Hasta',-$(i),'DESC_VAL_ELEMENTOS_TMP');
//aquí
toma el margen superior de cada intervalo.
For j=$(vlimite_desde) To $(vlimite_hasta)
DESC_VAL_ELEMENTOS:
LOAD
Peek('Valoración',-$(i),'DESC_VAL_ELEMENTOS_TMP') AS Valoración,
Peek('Descripción',-$(i),'DESC_VAL_ELEMENTOS_TMP') AS Descripción,
Peek('Intervalo
%',-$(i),'DESC_VAL_ELEMENTOS_TMP') AS [Intervalo
%],
Peek('Color',-$(i),'DESC_VAL_ELEMENTOS_TMP') AS Color,
$(j) AS Valoracion_Elemento
Autogenerate 1;
Next j
Next i
DROP TABLE DESC_VAL_ELEMENTOS_TMP;
Esto genera la tabla:
Después la expresión del gráfico es:
=Pick(Floor(SUM(Valoracion_Real)/SUM(Punt_Max_Elemento)*100)+1,$(=Concat(''''&Descripción&'''',',
',Valoracion_Elemento)))
Y para el color de fondo, editamos la propiedad de color de
fondo de la expresión y ponemos esta fórmula:
=Pick(Floor(SUM(Valoracion_Real)/SUM(Punt_Max_Elemento)*100)+1,$(=Concat(Color,',
',Valoracion_Elemento)))
=$(=Pick(Floor(SUM(Valoracion_Real)/SUM(Punt_Max_Elemento)*100)+1+1,$(=Concat (''''&Color&'''',',
',Valoracion_Elemento))))
No hay comentarios:
Publicar un comentario