こんにちは、開発担当の Masa です。

先週、シーオーリポーツ 帳票クリエータ Ver.4 for Javaをリリースしました。
今回のバージョンでは、集計機能やリストのヘッダ/フッタ挿入、テキスト置換機能などさまざまな機能を追加しています。

今日はこの新バージョンの機能の中から『集計機能』について紹介したいと思います。

帳票クリエータ Ver.4 for Javaでは、レコードセット(データソースを扱うオブジェクトの名称)に計算式を設定して、出力時にデータを集計することができるようになりました。計算結果は通常のデータと同じように参照することができます。これにより、全データの集計や区分ごとの集計が可能になりました。

Ver.3での動作

Ver.3でもデータを集計し出力することは可能でした。Ver.3でデータの集計を行う場合の選択肢は3つあります。

  1. データソースに計算結果を含める

    予めデータソースに計算結果を含めておくことができるのであれば、これが最も簡単な方法です。

  2. スクリプトで記述する

    プログラミングの知識を必要とするのでハードルが高いのが残念ですが、汎用性があります。(UIのサポートもありますが、区分ごとの集計についてはページを超えた集計ができません)
    なお、Java8からスクリプト使用時のJavaの動作が異常に遅くなりました。

  3. Javaで実装する

    プログラミングの知識を必要とするのでハードルが高いのが残念ですが、スクリプトよりも更に汎用性があります。

Ver.4の集計機能

プログラミングの知識を必要とせず、帳票クリエータ内だけで完結する汎用性のあるデータ集計方法として、Ver.4ではレコードセットの『仮想列』機能を追加しました。あらかじめ設定された計算方法でレコードセットのデータを集計します。
集計するレコードセットの列と集計方法を選択するだけで設定が完了するのでプログラミングの知識は不要です。また、次回紹介する『テキスト置換テンプレート』を使用することで多様な表現が可能となり汎用性が高まります。

集計は同じレコード(行)のデータ同士で計算する横集計と、全レコードのデータを計算する縦集計の2種類があります。『データの加算』を例にすると、横集計は『合計』、縦集計は『累計』となります。

横集計

以下に例をあげます。このようなデータがあったとします。

品目 価格 数量
だいこん 85 1
にんじん 121 2
きゅうり 309 4

価格×数量を「金額」としてレコードごとに計算する場合、レコードセットの設定に以下を追加するだけで可能です。

<RecordSet name="レコード1" type="CSV">
    ...
    <VirtualColumn formulaType="FUNCTION" functionType="PRODUCT" expression="価格,数量" />
    <RecordAlias name="金額" value="10000" />
</RecordSet>

計算対象として「価格」「数量」列を指定し、計算方法として「PRODUCT(積)」を指定します。
もちろん、GUI(プロパティ画面の『数式列』)でも設定できます。

積

横集計(金額の計算)

出力結果:

横集計出力

横集計(金額)出力

縦集計

以下に例をあげます。このようなデータがあったとします。

分類 品目 価格 数量
根菜類 だいこん 85 1
根菜類 にんじん 121 2
果菜類 きゅうり 309 4
果菜類 なす 360 5
果菜類 トマト 343 4

価格の「累計」を計算する場合、レコードセットの設定に以下を追加するだけで可能です。

<RecordSet name="レコード1" type="CSV">
    ...
    <VirtualColumn formulaType="FUNCTION" functionType="CUMULATIVE_TOTAL" expression="価格" />
    <RecordAlias name="累計" value="10000" />
</RecordSet>

計算対象として「価格」列を指定し、計算方法として「CUMULATIVE_TOTAL(累計)」を指定します。

区分ごとに集計したり、『仮想列』を使用して別の計算をすることもできます。
横集計の例で計算した「金額」を分類ごとに累計してみます。

<RecordSet name="レコード1" type="CSV">
    ...
    <VirtualColumn formulaType="FUNCTION" functionType="PRODUCT" expression="価格,数量" />
    <VirtualColumn formulaType="FUNCTION" functionType="CUMULATIVE_TOTAL" expression="金額" groupBy="分類" />
    <RecordAlias name="金額" value="10000" />
    <RecordAlias name="累計" value="10001" />
</RecordSet>

計算対象として「金額」列を指定し、計算方法として「CUMULATIVE_TOTAL(累計)」を指定します。区分には「分類」を指定します。
GUI(プロパティ画面の『数式列』)でも設定できます。

累計

縦集計(金額を分類ごとに累計)

出力結果:

累計出力

縦集計(金額の累計)出力

いかがでしたでしょうか?体験版が無料でダウンロードできますので、ぜひお試しください。