Jasper reports 如何使子报表访问与主报表不同的数据库?

Jasper reports 如何使子报表访问与主报表不同的数据库?,jasper-reports,Jasper Reports,我正在评估JasperReports和Jaspersoft Studio在我工作的公司中的使用情况,并试图构建一个包含来自两个不同数据库的信息的报告 我配置了2个数据适配器 我做了研究,发现唯一的方法就是在主报告中包含一个列表、表格或子报告,但我仍然无法让它工作 我采用子报表方法,我有两个单独工作的报表,主报表在示例数据库中执行此查询 从订单限额10中选择1 子报表在我拥有的Vertica数据库中运行此报表: select 1 from my_schema.my_table limit 10

我正在评估JasperReports和Jaspersoft Studio在我工作的公司中的使用情况,并试图构建一个包含来自两个不同数据库的信息的报告

我配置了2个数据适配器

我做了研究,发现唯一的方法就是在主报告中包含一个列表、表格或子报告,但我仍然无法让它工作

我采用子报表方法,我有两个单独工作的报表,主报表在示例数据库中执行此查询

从订单限额10中选择1

子报表在我拥有的Vertica数据库中运行此报表:

select 1 from my_schema.my_table limit 10
如前所述,它们都是分开运行的

因此,我转到mainreport并向ColumnHeader栏添加一个子报表元素,然后向导打开:

  • 在步骤1中,我从项目中选择子报告
  • 第二步是连接。我有以下选择:
    • 相同的JDBC连接
    • 使用其他连接
    • 使用空数据源
    • 使用JRDatasourceExpression
    • 不要使用任何连接
第一个和第三个不是我想要的

我试图设置第二个适配器,但找不到选择已配置的数据适配器的方法

最后一个不起作用(我收到一条消息,说我的_模式不存在,所以我认为它仍在尝试访问MainReport数据库)


是否可以让子报表在与主报表不同的数据库/数据源中运行查询?

我猜iReport文章也适用于jaspersoft studio中设计的报表;您只需要用给定的表达式定义子报表连接参数。

如果有人有相同的问题,我可以总结一下我所做的工作:

我做了一个概念证明(因此我不再有代码),但我使用创建了一个JRDataSource类,在那里我手动访问数据库并返回行。然后我将其用作子报表/表的数据源。
虽然没有我想要的那么好,但也有可能

也许,您可以向主报告中定义的两个参数寻求帮助。例如:

  • $p{MySubreport},类型为net.sf.jasperreport.engine.jasperreport

  • $p{MyDatasource},类型为net.sf.jasperreport.engine.JRDataSource

  • 将这两个参数分别关联到属性“Expression”和“datasourceexpression”中的子报表元素

  • 请编写实现接口JRDataSource的DataSource类。
    然后,在servlet类中,将实际参数值(子报表.jasper文件的JasperReport和数据源对象)放入参数映射对象中,并调用
    JasperFillManager.fillReport()

    您好,我看到了。但是如果你看一下标签,其中一个是“过时的”:(这项技术在JasperReports 6.1 API中还没有过时,但是他们正在离开iReport,因此可能已经过时。从编程角度来说,如果我需要在程序中使用它,我也可以这样做。在注意到过时的标记之前,我尝试了本文,但Jasper Studio没有识别$P{SUBREPORT_CONNECTION}参数可能重复的