Lo primero de todo esto es definir el dataset, o sino utilizar el mismo del reporte principal como lo explica "esta entrada". Para nuestro ejemplos he creado 2 tablas, una con alumnos y otra con contenedores, aquí su código:
CREATE TABLE `alumnos` ( `nombre` varchar(45) NOT NULL, `edad` int(10) unsigned NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `alumnos` (`nombre`,`edad`) VALUES ('William',22), ('Vanessa',22), ('Karolina',25), ('Carlos',22), ('Alejandro',23), ('Miguel',23), ('Wilmer',25), ('Rafael',25), ('Manuel',25), ('Julian',24), ('Mayra',24); CREATE TABLE `contenedores` ( `nombre` varchar(45) NOT NULL, `peso` int(10) unsigned NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `contenedores` (`nombre`,`peso`) VALUES ('Contenedor A',20), ('Contenedor B',19), ('Contenedor C',17), ('Contenedor D',18), ('Contenedor E',16);
Luego de esto agregamos la conexión (o si ya esta creada la seleccionamos), tal como lo explica "esta entrada", ahora solo nos queda editar la consulta del "dataset" o del reporte en sí, para ello nos vamos a "edit query". Si se quiere facilidad, podemos utilizar una variable que sumara el total y así hacer una simple regla de 3 para obtener el porcentaje por grupo. Así que para ello hacemos click derecho en "Variables" y creamos una con las siguientes características:
Yo la he llamado "total", pero puedes usar el nombre que gustes, pero como aquí se trata de aprender, no utilizaré esas variables, sino que sacaré el total desde MySQL con la función SUM... Y ahora si, vamos con el ejemplo primer ejemplo.
En este ejemplo tomaremos las edades de varios alumnos y las agruparemos por las mismas, saber cuantos hay de cada edad y cual es su porcentaje grupal, para ello utilizamos la siguiente consulta (query):
SELECT alumnos.`edad`, COUNT(nombre) AS nombre, ( SELECT SUM(nombre) FROM ( SELECT edad,COUNT(nombre) AS nombre,COUNT(edad) AS ce FROM alumnos GROUP BY edad ) AS S ) AS total FROM alumnos GROUP BY edad
Luego editamos la data del gráfico, hacemos click en "char data" y se nos expandira un cuadro mas o menos como el siguiente:
Justo allí deberemos tener definido lo siguiente:
- Key exp: $F{edad}+" años de edad"
- Value exp: $F{nombre}
- Label exp: new java.text.DecimalFormat("0.00").format(($F{nombre}.doubleValue()*100)/$F{total})+"%"
Ahora explico lo que significa todo eso que vemos en el label, y es para que se vea en forma de porcentaje delimitandolo a 2 decimales:
- new java.text.DecimalFormat("0.00"): es la clase para formatear el decimal, para mas decimales podemos colocar mas 'ceros' luego del delimitador.
- format(): le da el formato que definimos arriba al número definido.
- $F{nombre}.doubleValue() * 100) / $F{total}: esta es la simple regla de 3 para obtener el dato numérico.
- +"%": agrega el símbolo de porcentaje al gráfico
Y con esto ya hemos terminado nuestro gráfico, al final debemos ver algo como esto...
Recibe notificaciones por correo