最后一条记录的iReport变量

时间:2012-02-23 08:47:39

标签: jasper-reports ireport

我有一些这样的记录:

Datetime            | Type |
2012-02-23 22:00:11    1
2012-02-23 22:02:14    2
2012-02-23 22:03:56    1
2012-02-23 22:04:11    1
2012-02-23 22:33:21    2
....

我将生成一个显示以下内容的列表:

日期时间字段 并且,如果Type = 2,则为Last type 1和实际Type2 Record之间的时差。 格式化为HH:MM:SS

以上提及的数据示例:

Datetime            | Type |  Diff
2012-02-23 22:00:11    1
2012-02-23 22:02:14    2     00:02:03  (Diff to 22:00:11) 
2012-02-23 22:03:56    1
2012-02-23 22:04:11    1
2012-02-23 22:33:21    2     00:29:25  (Diff to 22:03:56)

我尝试以不同的方式使用变量。

但是,正如最近经常发生的那样,不成功: - )

(我是iRefg iReport 4.5.0)

有什么想法吗?

基督徒

3 个答案:

答案 0 :(得分:1)

尝试将其放入变量表达式(位于变量的属性中)

$ F {日期时间} .equals($ F {}型.equals(2)) - $ F {日期时间} .equals($ F {}型.equals(1))

答案 1 :(得分:1)

首先,创建一个变量$ V {Diff},计算所有行的$ F {Datetime}之间的差异。这为您提供了您想要的值(以及您不需要的一堆)。

其次,当$ F {Type}等于2时,仅显示$ V {Diff}。

但它的细节让它变得有趣。这个变量在JasperReports中并不完全明显。实际上你需要两个变量,它们必须按正确的顺序定义。

$V{Diff} Expression:          $F{adate}.getTime() - $V{LastType1Date}
$V{LastType1Date} Expresion: ($F{type}.intValue() == 1) ? $F{adate}.getTime() : $V{LastType1Date}

然后表达式很容易打印:$F{type}.intValue() == 2你得到你需要的东西: enter image description here

我忽略了间隔格式,但我认为这可以解决您的关键问题。您只需要将毫秒转换为您想要的格式。

答案 2 :(得分:0)

创建一个名为lastType1DateTime的Date变量,并为变量表达式put:

创建
($F{Type} == 1) ? $F{DateTime} : $V{lastType1DateTime}

此变量将始终保留最后一个类型1日期。然后只需在详细信息字段中对类型2行进行差异。