Porcentajes en iReport

   Hace algún tiempo publique como hacer gráficos en iReport, pero hubo algo que nunca explique y es como mostrar porcentajes en los gráficos (chart) de iReport, entonces vamos a ello. Bien, asumiendo que saben utilizar iReport y montar un gráfico de torta, barra o cualquier otro, seguiré con la explicación avanzada de todo esto, entonces vamos a ello.

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





6 Comentarios

Escribir Comentario
Anónimo
AUTOR
26 de agosto de 2012, 17:18 delete

Acaso esto no es lo mismo que se hace con la propiedad "Label Format" con este valor: {2}

Responder
avatar
26 de agosto de 2012, 17:27 delete

Puedes, pero aquí explico como hacerlo sin agregarle... Además, esto es a modo de ejemplo, para explicar como funcionan las cosas, así se tiene una idea de donde se forman estas etiquetas....

Responder
avatar
Anónimo
AUTOR
27 de marzo de 2013, 15:05 delete

buena tarde tengo na duda como hago para sumar los porcentajes que eh sacado en un cuadro

Responder
avatar
27 de marzo de 2013, 16:29 delete

Con la función add() puedes sumar diferentes valores, lo que haces es una suma normal entre porcentajes para tener el total, por ejemplo:

$V{mi_variable_01}.add( $V{mi_variable_02} ).add( $V{mi_variable_0X} )...... Saludos!!!

Responder
avatar
Unknown
AUTOR
20 de noviembre de 2013, 0:33 delete

hice todo como tu y a la final me quedo así http://i1.minus.com/jHePPfduTDnbV.png :'(

Responder
avatar
20 de noviembre de 2013, 15:53 delete

Ha de ser algo con la sumas, mira el segundo ejemplo:

http://carlitoxenlaweb.blogspot.com/2012/07/porcentajes-en-ireport-continuacion.html

Allí saldrán tanto los porcentajes como la cantidad numérica que ese porcentaje representa, así puedes determinar de forma más simple donde esta la falla.....

Responder
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión