Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jasper reports Jasper报表根据不同的动态值运行不同的查询_Jasper Reports_Jasperserver - Fatal编程技术网

Jasper reports Jasper报表根据不同的动态值运行不同的查询

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作为子报表的属性(窗口->属性) 在主报表中

我有三个不同的查询,希望按照jasper报告中的值运行它们。查询是在Jrxml文件本身中编写的。如何基于不同的动态值运行不同的查询

比如(它只是一个sudo代码)


非常感谢您的帮助。

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