Informes Crosstab con iReport

6
63438

Informes Crosstab con iReport

Introducción

iReport es una herramienta gratuita (http://jasperforge.org/sf/projects/ireport)
escrita en Java que nos permite diseñar informes (jrxml) para
posteriormente poder usuarlos con JasperReport.
Actualmente existe en Adictosaltrabajo.com
varios tutoriales relacionados con esta herramienta:

Con este tutorial vamos a ampliar el nivel de conocimiento sobre esta herramienta
enseñando como hacer un informe usando crosstab
o tablas dinámicas. Pero ¿qué es realmente
un informe crosstab? un informe crosstab no es nada más
que un informe en el cual tenemos una tabla sencilla en la que las filas, columnas
y valores son recuperados dinámicamente apartir de un
determinado datasource o conexión a base de datos.

Como suele pasar en la mayoría de las veces, donde mejor se ve es con
un ejemplo práctico paso a paso.

Entorno

  • iReport 3.0.0
  • JDK 1.6
  • Sistema Operativo Windows XP Pro.

Ejemplo práctico

Lo primero que vamos a hacer es plantear un determinado problema
que usaremos como base para el ejemplo práctico.

Una empresa llamada X vende determinados componentes informáticos
a varios países y desea tener un informe dinámico que le permita
saber al instante el número de unidades vendidas de cada componente
agrupados por países.

La solución más eficiente para solucionar este
problema es crear un informe con iReport usando una tabla dinámica
o crosstab en la que tendremos que hacer diferentes agrupaciones
(group by) de datos para conseguir el objetivo.

Lo primero que tenemos que hacer es diseñar un informe
básico.

Como se puede ver en la imagen anterior hemos eliminado (estableciendo para
cada banda un alto de 0 píxeles) todas las bandas del informe menos
«title» y «summary«.
Esto lo hemos hecho porque el objeto crosstab SOLO
funciona cuando se coloca en la banda de «summary«.

Después del diseño inicial del informe tenemos que establecer
una conexión con nuestra base de datos y definir una consulta SQL para
el informe. Hay que señalar que, como se puede ver en la imagen siguiente,
en la definición de la consulta SQL no tenemos ninguna agrupación
(group by) ya que ésta la definiremos posteriormente al configurar
el objeto crosstab. Aquí
os dejo un script SQL con las tablas y datos usandos en el ejemplo.

Luego tendremos que insertar un objeto crosstab en nuestro informe
(banda «summary«) pulsando sobre el icono correspondiente
(la traducción al castellano es «Tabla de ref. cruzadas»)
y seleccionando el área donde queremos colocarlo.

Al hacer esto nos aparecerá una ventana donde tendremos que configurar
nuestra tabla dinámica o crosstab. Pasos:

  1. Elegimos un conjunto de datos, en nuestro caso ya lo tenemos
    definido ya que hemos creado una consulta SQL para nuestro informe que nos
    devuelve dicho conjunto de datos.
  2. En el siguiente paso tenemos que definir una agrupación
    (group by) para las filas de la tabla, en nuestro ejemplo será
    el campo «pais«.
  3. Para la columna elegimos el campo «componente«.
  4. En la pantalla siguiente tenemos que establecer qué
    datos se visualizarán en el interior de la tabla. En nuestro caso
    como queremos ver el número de componentes vendidos tendremos que
    seleccionar el campo «id» (identifica
    un determinado componente) y la función (función de agregación
    en SQL) «Count«.
  5. Para finalizar nos aparece una última pantalla donde
    podremos decir si queremos filas/columnas exteriores con la suma total/parcial.

Tras pulsar sobre el botón de «Terminar» ya tendremos configurado
nuestro crosstab, ahora vamos a cambiar un poco el aspecto final
de la tabla pulsando en la pestaña que aparece al lado del informe
principal (pestaña crosstab-1crosstab-N). En esa
pestaña podremos modificar los aspectos visuales de la tabla dinámica,
en nuestro ejemplo hemos puesto bordes, color de fondo, textos, etc.

Ahora solo nos queda compilar y ejecutar nuestro informe para ver el resultado…

Ejemplo práctico Extended

Ahora vamos a ver una versión extendida de ejemplo anterior…

La empresa X quiere modificar el informe para que le permita
saber al instante el número de unidades vendidas de cada componente
agrupados por países y CONTINENTES. Para ello tendremos
que establecer dos agrupaciones (group by) de datos en las filas
de nuestra tabla dinámica.

Al igual que el anterior ejemplo tenemos que seguir todos los
pasos hasta que llegemos a la configuración del crosstab.
En la pantalla donde se define la agrupación de las filas vamos a seleccionar
como primera agrupación el campo «continente»
y como segunda agrupación el campo «pais«.
Lo demás es igual que en el ejemplo básico.

 

Despúes de configurarlo le cambiamos un poco el aspecto, como con
el anterior ejemplo, para que quede bonito. Lo ejecutamos y vemos el resultado
final…

 

Aquí dejo el informe jrxml
usado en el ejemplo.

Conclusión

Antes de leer este tutorial o de conocer los componentes crosstab
de iReport es muy probable que ante el problema anteriormente expuesto pensásemos
que con iReport no lo podríamos resolver, pero efectivamente si.

En este tutorial hemos podido ver otra funcionalidad interesante
que nos aporta iReport a la hora de generar informes dinámicos. Si
bien tiene algunas limitaciones en cuanto al aspecto visual, sin duda esta
funcionalidad de tablas dinámicas o crosstab nos puede ayudar
a resolver determinados problemas en muy pocos minutos y sin mucho esfuerzo.

Un saludo, espero que os haya parecido útil este tutorial.

Alfonso Blanco Criado – ablanco@autentia.com

6 Comentarios

  1. Hola muchas gracias por el tutorial, es una ayuda positiva, podrias indicarme como puedo hacer cuando en columnas requiero mostrar variables distintas, grupos distintos…uno en cada columna

  2. Hola, Primero que todo gracias por el tutorial de verdad me sacaste de un lio, una pregunta hay forma de ponerle titulo a la columna rowGroup en tu ejemplo seria ponerle titulo la columna pais

Dejar respuesta

Please enter your comment!
Please enter your name here