首页 文章

表达式和文本字段表达时同步打印

提问于
浏览
0

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

    我有两个建议,不确定是否有效:

    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生成报表数据,则可以在调用报表之前轻松填写所有值 .

  • 0

    一个不优雅但功能性的解决方案是将静态文本字段合并在一起,并避免必须同步Print When Expression和Text Field Expression以支持后者 .

    ($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"
    

相关问题