Background
下图中的 Totals 部分显示了 Trend 列的奇怪结果 . 当名为Previous的列下的值等于名为Current的列下的值时,文本应为 true .
Print When Expression & Text Field Expression
表达式使用相同的代码进行评估:
new java.lang.Boolean(
$V{LAST_WEEK_TALLY_0}.add(
$V{LAST_WEEK_TALLY_1} ).add(
$V{LAST_WEEK_TALLY_2} ).add(
$V{LAST_WEEK_TALLY_3} ).longValue() ==
$V{THIS_WEEK_TALLY_0}.add(
$V{THIS_WEEK_TALLY_1} ).add(
$V{THIS_WEEK_TALLY_2} ).add(
$V{THIS_WEEK_TALLY_3} ).longValue()
)
文本字段的评估时间设置为Band .
Problem
看起来好像Print When Expression代码正在为Previous和Current列下的值评估一行太迟了 . 正在打印的值对于该行是正确的 . 这意味着Print When Expression和Text Field Expression的评估时间不会同时进行评估 .
Question
当表达式和文本字段表达式同时评估相同结果时,我需要做什么才能进行打印?然后,只要 Previous == Current
,这将为 Totals' 趋势列生成单词 true .
2 回答
我有两个建议,不确定是否有效:
1. Using summation from iReport
假设您正在使用交叉表,则有一项功能可以对行或列上的总计求和 . Make Previous Total,等于Previous Totals的数量,同样适用于Current Total .
然后在趋势列中,写一个像
Current_Value - Previous_value ==0
这样的表达式2. Find the sums in Query
这是更强大的解决方案,但可能有点复杂 . 我通常不太依赖iReport,并且总是给它准备好数据 .
如果使用Java生成报表数据,则可以在调用报表之前轻松填写所有值 .
一个不优雅但功能性的解决方案是将静态文本字段合并在一起,并避免必须同步Print When Expression和Text Field Expression以支持后者 .