我正在评估JasperReports和Jaspersoft Studio在我工作的公司中使用,我正在尝试构建一个包含来自2个不同数据库的信息的报告。
我配置了2个数据适配器。
我的研究结果发现,唯一的方法是在主报告中包含列表,表格或子报表,但我仍然无法使其正常工作。
我采用了子报表方法,我有两个单独工作的报表,主要是在示例DB中执行此查询
select 1 from ORDERS limit 10
子报表在我拥有的Vertica数据库中运行这个:
select 1 from my_schema.my_table limit 10
如上所述,他们两人分开运作。
所以我转到mainreport并将一个SubReport元素添加到ColumnHeader band,然后向导打开:
第一个和第三个不是我想要的。
我尝试设置第二个,但我找不到一种方法来选择我配置的数据适配器。
最后一个不起作用(我收到一条消息说my_schema不存在,所以我认为它仍在尝试访问MainReport数据库。)
无论如何,我可以让子报表在主报表的不同数据库/数据源中运行查询吗?
答案 0 :(得分:1)
如果有人遇到同样的问题,我可以总结一下我的所作所为:
我做了概念证明(因此我没有代码了),但是我使用this tutorial创建了一个JRDataSource类,然后我手动访问数据库并返回行。然后我用它作为我的子报表/表的数据源。 不像我想的那么好,但有可能
答案 1 :(得分:0)
我猜this iReport文章也适用于jaspersoft studio设计的报告;您只需要使用给定的表达式定义子报表连接参数。
答案 2 :(得分:0)
也许,您可以自己从主报告中定义的两个参数寻求帮助。如:
$ P {MySubreport},类型为net.sf.jasperreport.engine.JasperReport;
$ P {MyDatasource},类型为net.sf.jasperreport.engine.JRDataSource;
将这两个参数分别与属性“表达式”和“数据源表达式”中的子报表元素相关联;
请编写实现接口JRDataSource的DataSource类。
然后,在servlet类中,将实际参数值(JasreReport用于子报表.jasper文件和DataSource对象)放入参数Map对象,并调用JasperFillManager.fillReport()
。