2010年6月11日金曜日

JasperReportsでクロス集計を行う

データを分析する上で集計表にするというのは可読性も上がり有効的です。

今まではデータをExcel形式に出力して集計したりピボットテーブルでまとめていたのですが、JapserReportsでクロス集計(Crosstab)という機能があるようなので試してみました。
要点は以下の2点

・Summary領域に作成する
CrosstabをPageHeaderやDetailに配置して実行してみると以下のエラーが発生します。

  Error incrementing crosstab dataset

このフレーズで調べてみた所、以下のサイトで簡潔に答えが出ていました。
JasperForge Forum

・複数ページになるとレイアウトが崩れるので
  1ページにまとまるようにする
これはこういった仕様なのかもしれません。


以下手順です。

1、レポートを加工
今回は今まで使っていた一覧形式のレポートを流用しました。 明細を一覧に表示した上で最後に表を表示したいのであればそのままですが、今回は表だけにしたいのでSummary領域だけを残し後は最小化 (高さを0に)します。

2、Crosstabを追加
パレットからCrosstabをドラッグ&ドロップimage

「次へ」をクリック
image

行要素を選択、ここでは二つまで選択できますが、後でから追加、編集が可能です。複数選択した場合は1,2の順番でグルーピングされますので部門別社員別の様な見方をしたい場合はそのように設定します。
image

列要素の選択、行要素同様 
image

集計要素を選択します。 一般的な集計以外に偏差も取れるようですがシンプルにSumを選択
image

表のスタイルを選択します。特にこだわりが無ければそのまま「完了」をクリックします。ちなみにここで「背景色無し」という設定は出来ないので後でから背景色を抜く作業をします。
image

これでCrosstabが配置されます。
image

Crosstab内の編集を行う場合は右のCrosstabを、レポート自体を編集する場合は左のMain reportをクリックして画面を切り替えます。
image


おまけ
・0を非表示に
集計結果が0の場合は表示しない方が見やすいので
各要素の Print When Expressions に

$V{XxxMeasure}.equals(Integer.valueOf(0)) ? Boolean.FALSE : Boolean.TRUE

と入れて対象項目が0の場合はBoolean.FALSEを返し非表示にします。

・背景色の変更
デフォルトのCrosstabは水色が基本の配色になっていますが、一般的にカラー印刷はコストが掛かるので背景色を取り除きます。

取り除く際はレポートをXML表示にして以下「」内のキーワードを正規表現付きで空文字に置換します。
(分かりづらいですが最後に半角スペースがあります)

backcolor=.*"

0 件のコメント: