JasperReports计数器变量始终在递增

7
这应该是一个关于JasperReports的简单问题。我想对整个报表进行一个简单的计数器,该计数器应根据条件递增。但无论我尝试什么,计数器变量似乎总是在递增,而不考虑变量表达式。我的变量定义属性如下: : 整数
计算: 计数
重置类型: 报告
增量类型:
变量表达式: $F{on_target}.doubleValue() >= 0.0
初始值: Integer.valueOf(0)
数据集中共有23行,根据标准,计数器最终应等于18。我将变量输出到摘要组中,并将评估时间设置为现在。然而,无论评估时间如何,甚至将变量表达式设置为Boolean.valueOf(true == false),变量的值总是最终为23。
我忘记了什么简单的小事吗?
3个回答

4
我想我明白了。这听起来有点含糊不清,但是......(请注意,这是我第一次使用Jasper变量,所以是试错过程)。
变量表达式不完全是布尔型的,如果表达式为假,则计数器类型变量不会增加,就像你想的那样。变量只有在表达式中评估到任何值时才会递增。因此,对于我而言,最终有效的内容如下: $F {on_target} >= 0 ? 1 : null
请注意,如果表达式为假,则使用null。
这种理解有点含糊,但根本不直观。哦,好吧,就这样吧......
换句话说:
当您使用Jasper定义的变量的Calculation:Count函数时,希望Variable Expression为:
解析为非空值以增加计数器 如果您不想递增计数器,则解析为空值
这就是上面列出的测试可行的原因。

COUNT函数计算所有非空值,包括零和一。因此,任何布尔值都将被计算。这类似于SQL COUNT函数的工作方式。因此,如果要不计算行,则需要返回NULL。另一种方法是对布尔值求和。这样,您就不需要为false返回NULL。 - Tom

2

除了将变量表达式设置为:

$F{on_target} >= 0 ? 1 : null

尝试将变量的initialValueExpression设置为0。


1
这对我有用:

这适用于我:

$F{on_target} >= 0 ? 1 : BigDecimal.ZERO

不需要初始变量值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接