Jasper reports Jasper报表根据不同的动态值运行不同的查询
我有三个不同的查询,希望按照jasper报告中的值运行它们。查询是在Jrxml文件本身中编写的。如何基于不同的动态值运行不同的查询 比如(它只是一个sudo代码)Jasper reports Jasper报表根据不同的动态值运行不同的查询,jasper-reports,jasperserver,Jasper Reports,Jasperserver,我有三个不同的查询,希望按照jasper报告中的值运行它们。查询是在Jrxml文件本身中编写的。如何基于不同的动态值运行不同的查询 比如(它只是一个sudo代码) 非常感谢您的帮助。在mainReport.jrxml中定义参数$p{a} 生成子报表subreport1.jrxml(查询1),subreport2.jrxml(查询2) 将子报表1和子报表2放入mainReport.jrxml的标题栏中 在主报表中使用PrintWhenExpression作为子报表的属性(窗口->属性) 在主报表中
非常感谢您的帮助。在mainReport.jrxml中定义参数
$p{a}
生成子报表subreport1.jrxml(查询1),subreport2.jrxml(查询2)
将子报表1和子报表2放入mainReport.jrxml的标题栏中
在主报表中使用PrintWhenExpression作为子报表的属性(窗口->属性)
在主报表中为子报表1设置PrintWhenExpression:$p{a}.equals(“德国”)
为子报表2在主报表中设置PrintWhenExpression:
$P{a}.equals(“印度”)
将
$p{a}
从应用程序传递到mainReport中您可以尝试使用DynamicReports。这是一个基于JasperReports的库,让我们直接从java代码构建报告。
这是一个例子
有一个.setDataSource()方法可以接受字符串+连接对象。根据一些小逻辑,您可以在那里设置查询。
.setDataSource()重载,它甚至可以接受ResultSet对象。因此,您甚至可以使用Statement/PreparedStatement对象传递不同的查询和值,然后将它们的结果作为报表的源传递。
希望有帮助
注:该示例使用maven依赖项,但您也可以下载.jar并将其添加到您的类路径中以使其工作从query1和query2返回的字段是否不同?是的,实际上字段和值是不同的abd基于执行的字段查询。我有一点疑问。这是否意味着要执行N个这样的查询,我们必须创建新的子报表???。另一种方法是使用子数据集。但是子数据集有一些局限性
If($(a) == "Germany")
run query 1
If($(a) == "India")
run query 2