表达时同步打印&文本字段表达

时间:2010-03-30 16:56:17

标签: jasper-reports ireport

背景

下图中的总计部分显示趋势列的奇怪结果。当名为 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 一词。

2 个答案:

答案 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"