2011-09-28 12 views
9

Estoy tratando de encontrar la mejor manera de hacer informes con un gráfico y luego una tabla que representa el mismo conjunto de datos. Necesito superar el posicionamiento del resumen en la parte inferior, así que pretendo usar subinformes y subinformes de tabla. Estoy experimentando con dos tablas y una tabla en una banda de detalles.Cómo utilizar el mismo origen de datos dos veces en JasperReports/iReport

Si configuro datasourceexpression para $P{REPORT_DATA_SOURCE}, solo el cuadro muestra datos (presumiblemente el primer elemento de tipo de subinforme) y las tablas están vacías. ¿Parece que los datos se pueden consumir solo una vez?

Si utilizo un Dataset para consultar la base de datos, funciona sin embargo ejecuta la consulta tres veces, una para cada tabla/gráfico. Eso será una sobrecarga masiva.

Obviamente, no estoy haciendo esto bien pero no puedo encontrar ejemplos de utilizar el mismo conjunto de datos más de una vez.

Respuesta

3

No hay una respuesta sencilla por lo que han planteado una solicitud de función http://jasperforge.org/projects/jasperreports/tracker/view.php?id=5487

Las soluciones sugeridas fueron:

  • implementar un ejecutor consulta personalizada para recuperar datos de un origen de datos en caché
  • generar un rebobinado origen de datos basado en el conjunto de resultados recuperados

Gracias a sanda aka shertage en el jasperfo rge foro para estas sugerencias.

+0

¿Cómo puedo generar un origen de datos reutilizable? – Ricardo

+0

No lo he hecho, ni siquiera lo he investigado, pero creo que implementa net.sf.jasperreports.engine.JRRewindableDataSource, consulte [JasperReports - Data Source Sample (versión 4.7.0)] (http://jasperreports.sourceforge.net /sample.reference/datasource/index.html) – KCD

0

Una solución alternativa, la clonación del conjunto de datos:

http://code.google.com/p/cloning/

Cloner clonador = new Cloner();

ArrayList clone = cloner.deepClone (getSomeArrayList());

final JRDataSource ds = new JRBeanCollectionDataSource (AnotherBean);

HashMap parameters = new HashMap();

parameters.put ("PARAM_A", nuevo JRBeanCollectionDataSource (getSomeArrayList()));

parameters.put ("PARAM_B", nuevo JRBeanCollectionDataSource (clon));

Cuestiones relacionadas