Jasper reports 如何在JasperReports/iReport中两次使用同一数据源
我正试图找出如何最好地使用图表,然后使用表示相同数据集的表来生成报告。我需要克服摘要位于底部的定位,因此打算使用子报表和表子报表。我正在试验一个细节带中的两个表格和一个图表 如果我将的Jasper reports 如何在JasperReports/iReport中两次使用同一数据源,jasper-reports,ireport,Jasper Reports,Ireport,我正试图找出如何最好地使用图表,然后使用表示相同数据集的表来生成报告。我需要克服摘要位于底部的定位,因此打算使用子报表和表子报表。我正在试验一个细节带中的两个表格和一个图表 如果我将的datasourceexpression设置为$p{REPORT\u DATA\u SOURCE},则只有图表显示数据(可能是第一个子报表类型项),表为空。似乎数据只能使用一次 如果我使用数据集查询数据库,它会工作,但它会执行三次查询,每个表/图表执行一次。这将是一个巨大的开销 显然我做得不对,但我找不到任何多次使
datasourceexpression
设置为$p{REPORT\u DATA\u SOURCE}
,则只有图表显示数据(可能是第一个子报表类型项),表为空。似乎数据只能使用一次
如果我使用数据集查询数据库,它会工作,但它会执行三次查询,每个表/图表执行一次。这将是一个巨大的开销
显然我做得不对,但我找不到任何多次使用同一数据集的示例。没有简单的答案,因此我提出了一个功能请求 建议的解决办法是:
- 实现自定义查询执行器以从缓存的数据源检索数据
- 根据检索到的结果集生成可倒带的数据源
感谢Jasperge论坛上的sanda aka shertage提出这些建议。另一种解决方案是克隆数据集: 克隆人克隆人=新克隆人() ArrayList clone=cloner.deepClone(getSomeArrayList()) 最终JRDasource ds=新的JRBeanCollectionDataSource(另一个bean) HashMap参数=新的HashMap() parameters.put(“PARAM_A”,新的JRBeanCollectionDataSource(getSomeArrayList())
parameters.put(“PARAM_B”,新的JRBeanCollectionDataSource(克隆)) 如何生成可倒带数据源?我还没有做过,甚至没有研究过,但我相信您实现了net.sf.jasperreports.engine.JRRewindableDataSource。我认为这不是一个好的解决方案。但是您不需要克隆
ArrayList
本身。只需传递相同的对象,如parameters.put(“PARAM_C”,新的JRBeanCollectionDataSource(getSomeArrayList())代码>应该可以做到这一点。