Переменная iReport для последней записи - PullRequest
3 голосов
/ 23 февраля 2012

У меня есть несколько таких записей:

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
....

Я создам список, который показывает:

Поле Datetime и, если Type = 2, разницу во времени между Last type 1и фактическая запись Type2.Отформатировано в формате ЧЧ: ММ: СС

Пример для вышеупомянутых данных:

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)

Я пытался использовать переменные по-другому.

Но, как это часто бываетнедавно, безуспешно: -)

(я использую iReport 4.5.0)

Есть идеи?

thx Christian

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

Сначала создайте переменную $ V {Diff}, которая вычисляет разницу между $ F {Datetime} для всех строк. Это дает вам значения, которые вы хотите (и кучу, которая вам не нужна).

Во-вторых, отображать $ V {Diff} можно только тогда, когда $ F {Type} равен 2.

Но детали делают его веселым. Эта переменная не совсем очевидна в 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

Я проигнорировал форматирование интервалов, но я думаю, что это решает ключевые проблемы для вас. Вам просто нужно преобразовать миллисекунды в нужный вам формат.

1 голос
/ 23 февраля 2012

Попробуйте вставить это в выражение вашей переменной (находится в свойствах переменной)

$ F {} .equals даты и времени ($ F {тип} .equals (2)) - $ F {} .equals даты и времени ($ F {тип} .equals (1))

0 голосов
/ 23 февраля 2012

Создайте переменную Date с именем lastType1DateTime и для выражения переменной укажите:

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

Эта переменная всегда будет содержать дату последнего типа 1. Затем просто выполните различие в поле сведений для строк типа 2.

...