Синхронизировать печать при выражении и выражении текстового поля - PullRequest
0 голосов
/ 30 марта 2010

Фон

Раздел Итоги на изображении ниже показывает странные результаты для столбца Trend . Текст должен быть true , если значение в столбце с именем Previous равно значению в столбце с именем Current .

image

Печать при выражении и выражении текстового поля

Выражения оцениваются с использованием идентичного кода:

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()
)

Время оценки для текстового поля установлено на Полоса .

Задача

Похоже, что код Print With Expression оценивается для значений в столбцах Previous и Current на одну строку слишком поздно. Напечатанное значение является правильным для этой строки. Это означает, что время оценки для Печатать при выражении и Выражение текстового поля не оценивается одновременно.

Вопрос

Что мне нужно сделать, чтобы Печать при выражении и Выражение текстового поля оценивали один и тот же результат в одно и то же время? Затем будет получено слово true для столбца Totalals Trend всякий раз, когда Previous == Current.

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

У меня есть два предложения, не уверен, что любой из них будет работать:

1. Использование суммирования из iReport
Предполагая, что вы используете кросс-таблицу, есть функция для суммирования итогов в строке или столбце. Сделать предыдущую сумму, равную количеству предыдущих итогов, и то же самое относится к текущей сумме.
Затем в столбце Trend напишите выражение типа Current_Value - Previous_value ==0

2. Найти суммы в Query
Это более надежное решение, возможно, немного более сложное. Обычно я не очень полагаюсь на iReport и всегда предоставляю готовые данные.
Если вы сгенерируете данные вашего отчета в Java, вам будет легко заполнить все значения перед вызовом отчета.

0 голосов
/ 01 апреля 2010

Не элегантное, но функциональное решение состоит в том, чтобы объединить статические текстовые поля вместе и избежать необходимости синхронизировать Печать при выражении и Выражение текстового поля в пользу только последнего.

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