我正在使用iReport 4.0.2,我想在主报告中显示结果。例如,在我的主报告中,我们有两列,我想得到这两列的总和,就像这样的格式:
A B sum
10 5 15
其中A是主报表中的一个字段,B是我的子报表的返回值。 这很好用。但是,关键是有时子报表不会返回任何值,这就是问题所在。在这种情况下,sum的结果如下:
A B sum
10 NULL
正如我们在这里看到的,B是子报表返回值,但它的值既不是NULL也不是0。这就是我们遇到这个问题的原因。
我试着找到当SQL没有返回结果时如何从子报表获取返回值。我知道iReport有一个名为'When No Data'的属性,但它没有帮助。 所以我想知道,我们是否有另一种方法来解决iReport中的问题或使用一些SQL技能。
答案 0 :(得分:2)
我认为在你的第二个例子中B实际上是null,但是你的文本字段可能设置了'Blank When Null'属性。我能够重现你的结果,除了B的空白。
真正的问题是你不能添加或减去空值。 JasperReports只会打印null。如果表达式中的某个变量为null,则必须添加一些逻辑以提供默认值。例如
$F{MAIN_REPORT_FIELD} - ($V{SUB_RESULT} == null ? 0 : $V{SUB_RESULT})
不幸的是,对于在JasperReports 4.0.2(Case 0005138)中使用Groovy表达式并且始终返回null的报告,这个会被破坏。
您有几个选择:
您可以切换到使用Java表达式。
根据您的报告,这将是无痛的,或者将是一件苦差事。任何没有正确表达式类的字段都必须修复,你可能必须在任何对非原始/包装类型执行操作的表达式中更明确。
答案 1 :(得分:0)
如果您正在主报表中对主要字段和子报表字段求和,则在总和表达式中(主报表字段+(subreportfield == null?0:subreportfield)。
将子报表值返回主报表变量。
然后执行主报表字段和裸端口返回变量的总和。
执行与上述相同的条件。