背景
下图中的总计部分显示趋势列的奇怪结果。当名为 Previous 的列下的值等于名为 Current 的列下的值时,文本应为 true 。
打印时表达&文本字段表达
使用相同的代码评估表达式:
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 。
问题
似乎正在为上一页和当前列下的值评估打印表达式代码时,行太晚了。正在打印的值对于该行是正确的。这意味着表达时打印和文本字段表达式的评估时间不会同时进行评估。
问题
当表达式和文本字段表达式同时评估相同的结果时,我需要做什么才能使打印?每当 Previous == Current
时,这将为总计' 趋势列生成 true 一词。
答案 0 :(得分:1)
我有两条建议,不确定是否有效:
<强> 1。使用来自iReport的求和
假设您正在使用交叉表,则有一项功能可以对行或列上的总计求和。 Make Previous Total,等于Previous Totals的数量,当前Total总计相同
然后在“趋势”列中,编写类似Current_Value - Previous_value ==0
<强> 2。在查询中查找总和
这是更强大的解决方案,但可能有点复杂。我通常不太依赖iReport,并且总是给它准备好数据
如果使用Java生成报表数据,则可以在调用报表之前轻松填写所有值。
答案 1 :(得分:0)
一个不优雅但功能性的解决方案是将静态文本字段合并在一起,并避免必须同步打印表达式和文本字段表达式,而不仅仅是后者
($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()) ? "-" :
($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()) ? "Up" : "Down"