lunes, 28 de diciembre de 2020

Buckets en gráficos

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)))

 Obsérvese las 4 comillas simples que rodean a “descripción” generan una única comilla. También se pueden sustituir las 4 comillas simples por CHR(39)

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))) 

 Observese que se han suprimido las 4 comillas.

 Curiosamente, si lo que queremos es colorear el fondo de un objeto de texto, podremos utilizar la misma fórmula usada para colorear el fondo de la expresión, o esta otra que no funciona en los gráficos:

=$(=Pick(Floor(SUM(Valoracion_Real)/SUM(Punt_Max_Elemento)*100)+1+1,$(=Concat (''''&Color&'''',', ',Valoracion_Elemento))))

 Observese aquí que la expresión comienza por $(=…. Y se siguen manteniendo las 4 comillas.

 

No hay comentarios:

Publicar un comentario