Jump to content
Changes to the Jaspersoft community edition download ×
  • 変数


    hozawa
    tutorial.png.74a9f2aa43ede4ffd2a9f03bfbb3efc9.png home.png.847b9d4a46892ad2bdd0ced97043d0fa.png

    作成:小沢仁 株式会社レジェンド・アプリケーションズ

    このチュートリアルで習うこと

    • 変数の作成と編集
    • 変数の共通プロパティ
    • 変数の他プロパティ
    • ビルドイン編数
    • 豆知識

    変数は一時的に値を保存するために使います。演算結果を設定したり、データソースからのデータをレポートに表示する前に加工する場合に使われます。変数をレポートに表示したり、他変数で使うこともできます。

    変数の作成と編集

    他のJasperReports要素と同じように、レポートで使える変数一覧もアウトライン・ビューに表示されています。変数の作成や編集も先ずアウトラン・ビューから行います。また、他JasperReports要素と同じように、プロパティの設定はぷろぱてぃ・ビューから行います。

    新規変数の作成

    1. アウトライン・ビューから「変数」を右クリックした「変数の作成」を選択します。変数一覧にデフォルト名で新しい変数が追加されます。
    2. 追加された変数を選択します。プロパティ・ビューに変数の設定が表示されます。
    3. 「オブジェクト」タブを選択します。
    4. 必要に応じて、「名前」や「型」など変数のプロパティをデフォルト値から変えます。変数のプロパティに付いては以降の節を参照してください。

    Jaspersoft Studioには多くのレポートで使われる要素をビルドイン変数として用意しています。変数一覧ではこれらは薄灰色で表示されています。これらの変数の値は変更することができません。ビルドイン変数に付いては「ビルドイン編数」の節を参照してください。

    変数の共通プロパティ

    すべての変数には以下のプロパティが共通しています;
    • 名前:変数の名称。変数を参照する場合に使います。例えば、レポートに変数の値を表示するには、レイアウトに配置したテキストフィールドの定義に変数名を記述します。
      変数を参照する場合は$V{変数名}と記述します。
    • :変数の型(Javaのクラス)。演算式で変数を使う場合には型が合ってないとエラーになります。
    • 定義:変数の値を設定する定義です。式は数字や文字列のような静的な値、演算式、フィールド、他変数などに設定することができます。定義はデータ毎に評価されます。
    • 初期値(任意い):変数の初期値。静的な値及び定義を設定することができます。
      例えば変数testを作成したとします。定義を「new Integer(5)」と設定すると、レコード毎に定義が実行されてもいつも「5」になりますので、初期値を設定する必要はありません。しかし、定義を「$V{test} + 5」と設定した場合は、初期値が設定されていないと結果が「null」になります。

    変数の他プロパティ

    変数はレポートの作成中に動的に値が変わることがあります。思った結果になるようにするために何時、どのように評価されるか把握して置く必要があります。変数は他変数から定義されることができるため、定義は出来る限り簡単に記述するようにしてください。

     

    評価時点

    評価時点は変数の定義を評価して値を設定する時のことです。評価時点は、変数のプロパティではありませんが、テキストフィールドなどのように変数を使う要素のプロパティです。

    変数は以下の時点で評価するように指定できます:
    • レポート:レポートの最後に評価されます。
    • ページ:ページ毎の最後に評価されます。
    • :列の最後の評価されます。(レポートに1列しかない場合はPageと同じです)
    • グループ:グループがブレークする毎に評価されます。グループが定義されている場合のみ有効です。
    • 領域:定義がされている要素がある領域の処理の最後に評価されます。
      多くの場合は、変数は領域で表示されるため、領域が処理される前に設定されている必要がありますが、サブレポートで評価された変数をメインレポートに送り返す場合はサブレポートの領域が処理された後に評価される必要な場合もあります。
    • 自動:異なる時に評価されるフィールド及び変数から定義された変数で使われます。変数のリセットタイプに評価されます(リセットタイプの節を参照してください。)
    • (デフォルト):レコードがデータソースから読まれる毎に評価します。

    計算関数

    変数の定義に次の計算関数を使うことができます。

    • Sum:合計を計算します。変数の初期値が設定されていないとnullになります。
    • Count:呼び出される度に変数に1を加算します。初期値が設定されていないとnullになります。
    • Distinct Count:以前の値を異なる場合のみ変数に1を加算します。
    • Average:レコードの平均値です。
    • Lowest:レコードの最小値です。
    • Highest:レコードの最高値です。
    • Standard Deviation:レコードの標準偏差です。
    • First:最初のレコードの値を使います。
    • System:計算及び変数の評価を行いません。最後に設定された値になります。作業用の変数で使われます。

     

    インクリメントタイプ

    デフォルト設定では、計算関数はレコード毎に呼ばれます。指定した時点のみに関数を呼び出すようにする場合はインクリメントタイプを指定します。
    次の値を指定することができます:

    • レポート:計算関数はレポートの最後に呼ばれます。
    • ページ:ページ毎の最後に計算関数を呼びます。
    • :列毎の最後に計算関数を呼びます(レポートに1列しかない場合はページと同じです)。
    • グループ:指定されたグループの初めに呼ばれます。グループが定義された場合のみ有効です。
    • なし(デフォルト):レコード毎に計算関数を呼びます。
    注:定義の評価時点と計算関数が呼ばれる時点は異なっています。例えば、ページ毎に計算関数を呼び出すように指定しても、レコード毎に変数の定義が評価されるようにできます。

     

    リセットタイプ

    リセットタイプとは、変数の値を初期化する時点です。初期値が設定されている場合はその値に戻します。設定されていない場合はnullに設定されます。レコードの小合計を計算する場合に使うことができます。 リセットタイプには次ぎの値を指定することができます:

    • レポート:レポートの作成処理が始まる前に1回だけ値を初期化する。
    • ページ:ページ毎に値を初期化する。
    • :列毎に値を初期化する。(レポートに1列しかない場合はページを同じ)。
    • グループ:指定されたグループの始まり毎に値を初期化する。グループが定義されている場合のみ有効。
    • なし:値を初期化しない。初期値を無視する。

     

    インクリメンターファクトリクラス名

    計算関数は便利ですたが、扱えるデータ型は数字に限定されています。例えば、文字列フィールドを結合したい場合もあります。そのような場合は、Javaでインクリメンターファクトリークラスを作成して使うことができます。

    インクリメンターファクトリークラスJRIncrementerFactoryクラスを実装(Extends)したクラスです。行う処理をJRIncrementer()メソッドに記述します。
    http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/fill/JRIncrementer.html

     

    ビルドイン編数

    Jaspersoft Studioには次のような変数が定義されています。これらの変数名は、オウトライン・ビューの変数一覧では薄灰色で表示されています。値を参照することはできますが、変更することはできません。

    現列番号です。
    変数名説明
    PAGE_NUMBER現ページ番号です。
    COLUMN_NUMBER 
    REPORT_COUNT処理したレコード数です。
    PAGE_COUNT現ページで処理したレコード数です。
    COLUMN_COUNT現列で処理したレコード数です。
    CITY_COUNT 
    ID_COUNT 

     

    豆知識

    多くのエラーはデータ型の不一致によるものです。変数はJavaのオブジェクト型を利用しています。値がnullの場合もあるので注意してください。
    例えばMoney_gainedと言うInteger型のフィールドがあるとします。値は数字の他にnullの場合がありますので、この変数を使う場合は次ぎの2通りにnullチェックを行うことができます:
    IF(EQUALS($F{Money_Gained}, null, $V{Total1}, $V{Total1} + $F{Money_Gained})

    $V{Money_Gained} == null ? $V{Total2} : $V{Total2} + $F{Money_Gained}

    上の2つの式は正しいように見えますが、$V{Total1}及び$V{Total2}が0に初期化されていないとnullを返します。$V{Total1}及び$V{Total2}の初期値を0に設定した場合でも2つの式は異なる結果を返します。
    その理由は、最初の式でう使われているIF文はGroovyの関数であり、2番目の式で使われている?はJavaの文法だからです。Javaの場合は、条件を評価した後に、条件に一致した処理を行いますが、Groovyの場合は2つの処理を評価した後に条件を評価して処理結果を選びます。即ち、Groovyの場合は、$V{Total1} + $F{Money_Gained}を評価した後にEQUALS($F{Money_Gained}を評価するため、Money_Gainedがnullの場合は$V{Total1} + $F{Money_Gained}がnullになるため、結果がnullになります。

     

    もしどうしてもGroovyで書きたい場合は、次ぎのようにnull条件の値をIF文の外に記述します:
    $V{Total1} + IF(EQUALS($F{Money_Gained}, null, 0, $V{Total1} + $F{Money_Gained})


    User Feedback

    Recommended Comments

    There are no comments to display.



    Guest
    This is now closed for further comments

×
×
  • Create New...