2011-03-17 33 views
1

さまざまなフィールドを持つiReport(4.0.1)のレポートには、$F{value}(整数)および$F{created_at}が含まれています。条件付き合計(可変)

私が与える変数を計算したい

  1. $F{value}の合計$F{created_at}は、指定した日付
  2. $F{value}の合計の前にあるとき$F{created_at}は、指定した日付
後であるとき

どのようにこれを行うことができますか?

答えて

5

これを行うには、2つの異なる変数を使用する必要があります。あなたの変数については、「変数式」の中でこのようなものを使用してください。 Dateクラスには、after()関数もあります。式が真と評価された場合は$ F {value}が追加され、そうでない場合は0が追加されます。

$ F {created_at} .before($ P {givenDate})? $ F {value}:0

変数を合計するには、計算タイプを「合計」に変更する必要があります。デフォルトのリセットタイプのレポートは、レポート全体の値を合計します。他のリセットタイプは、レポートの異なるセクション(列、ページまたはグループ)のまま同じ方法で機能します。

<variable name="sumValueCreatedBefore" class="java.lang.Integer" calculation="Sum"> <variableExpression><![CDATA[F{created_at}.before($P{givenDate}) ? $F{value} : 0]]></variableExpression> </variable>

+0

です。計算タイプを「合計」に設定するとそのトリックが実行されます。 – LapinLove404

0

そのための別の解決策がある:

のような選択なステートメント

内のサブクエリを記述 を選択します(ここで

はケース "前" のためのXMLですtablenameからtabnameを選択します。日付はどこにあるか)aftersum

tablename 条件は