Return value iReport子报表返回值

Return value iReport子报表返回值,return-value,ireport,subreport,Return Value,Ireport,Subreport,我正在使用iReport 4.0.2,我想在主报告中显示结果。例如,在我的主报告中,我们有两列,我想得到这两列的总和,就像以下格式: A B sum 10 5 15 其中A是主报表中的一个字段,B是我的子报表的返回值。 这很有效。但是,关键是有时子报表不会返回任何值,这就是问题所在。在这种情况下,求和的结果如下: A B sum 10 NULL 正如我们在这里看到的,B是子报表返回值,但它的值既不是NULL也不

我正在使用iReport 4.0.2,我想在主报告中显示结果。例如,在我的主报告中,我们有两列,我想得到这两列的总和,就像以下格式:

A      B     sum
10     5      15
其中A是主报表中的一个字段,B是我的子报表的返回值。 这很有效。但是,关键是有时子报表不会返回任何值,这就是问题所在。在这种情况下,求和的结果如下:

A       B      sum
10             NULL
正如我们在这里看到的,B是子报表返回值,但它的值既不是NULL也不是0。这就是为什么我们有这个问题

我试图找到当SQL没有返回结果时如何从子报表中获取返回值。我知道iReport有一个名为“When No Data”的属性,但它没有帮助。
所以我想知道,在iReport中,我们是否有其他方法来解决这个问题,或者使用一些SQL技巧。

我认为在第二个示例中,B实际上是空的,但可能您的文本字段设置了“空时为空”属性。除了B.</P>空白外,我还可以复制你的结果。 真正的问题是不能用空值进行加法或减法。JasperReports将只打印空值。如果表达式中的某个变量为null,则必须添加一些逻辑以提供默认值。比如说

$F{MAIN_REPORT_FIELD} - ($V{SUB_RESULT} == null ? 0 : $V{SUB_RESULT})
不幸的是,对于在JasperReports 4.0.2()中使用Groovy for表达式的报告来说,这是错误的,并且总是返回null

您有几个选择:

  • 您可以升级到JasperReports/iReport 4.1.1,解决此问题
  • 您可以切换到使用Java进行表达式

    根据你的报告,这要么是无痛的,要么是一件琐事。任何没有正确表达式类的字段都必须修复,并且在对非基本类型/包装类型执行操作的任何表达式中,您可能必须更加明确

  • 如果您在主报告中对主字段和子报告字段进行求和,则在求和表达式中(主报告字段+(子报告字段==null?0:子报告字段)

  • 将子报表值返回到主报表变量

  • 然后对主报告字段和bareport返回变量求和


    执行上面给出的相同条件。

    谢谢Peter,你完全正确。我已经使用一些SQL技巧解决了这个问题,在ireport中,我只设置了一个var来记录行,我给这个var一个init值0。所以在这种情况下,当SQL不返回任何值时,它的值是0。然后我将这个var返回到我的主报告中,我可以使用logic expressi另一方面,我正在尝试升级到4.1.1版。谢谢。