Tablixコントロールとは
ActiveReports for .NET 9.0Jまでは、クロス集計表の作成のためのコントロールとして、Matrixコントロールが存在しました。今回紹介するTablixコントロールは、このMatrixコントロールの機能を引き継ぎつつ、Tableコントロールの機能も融合した、一覧表や集計表などの柔軟なレイアウトが実現できるコントロールです。
Tablixコントロールの利用した帳票は、製品サンプルに含まれる「レポートギャラリーサンプル」で 確認することができます。
以下の画像はサンプルに含まれる帳票のうちの1つです。これは一見TextBoxを1つずつ並べて配置して作成したかのように見えますが、実は1つのTablixコントロールからできています。
グループ化されていない行・列を複数追加し、それらを必要に応じてセル結合することで表現しています。1つのコントロールなので、プレビューしたり、Excelなどにエクスポートしたりした時も、セルがずれることなくきれいに整列されます。
Tablixコントロールで追加された機能
Tablixコントロールと従来のMatrixコントロールを比較すると、Tablixコントロールでは新たに以下のようなことができるようになっています。
集計セルの書式を個別に設定可能
従来のMatrixコントロールでは、集計用のセルが1つだけしか定義できませんでしたが、Tablixコントロールではぞれぞれの行・列で集計用のセルを定義することができます。例えば、小計値は通常の書式にして、合計値のみ太字にしたりフォント色を変えたりすることができます。
集計列・行をデータ行・列の前に設定できる
従来のMatrixコントロールでは、合計値の表示は必ず各データ行・列の後になりましたが、Tablixコントロールでは、合計の計算用のセルの挿入位置を各データ行・列の前にするか後にするかを選択できます。
行ヘッダ/列ヘッダのセル結合
Tablixコントロールでは、行・列のヘッダのセルを結合することが可能です。以下の画像のような複雑なヘッダも1つのコントロールで簡単に実現可能です。
次ページからは、実際にこのTablixコントロールを使用して、クロス集計表を作成してみます。
今回利用するデータ
今回は、気象庁の過去の気象データ検索から月ごとの日平均気温のデータをCSVファイル化して、Tablixできれいにまとめてみましょう。データのフォーマットは「年」「月」「都道府県」「市町村区」「日平均気温」とします。最初は過去100年くらいを考えていましたが、県庁所在地以外だと意外と100年前のデータがないので、キリのいい過去50年のデータを処理してみましょう。
データソースの設定
プロジェクトに新しいRDLレポートファイルを追加したら、レポートエクスプローラーを使ってCSVファイルをデータソースとして指定します。データソースの設定について詳しい手順は、前回の記事をご参照ください。
帳票定義
今回作成する定義は次のような平均集計付きの一覧表になります。
TextBoxだけで作成しようとすると印字するデータの個数を気にしながらすべての印字項目分のTextBoxを配置しなければなりません。Tablixコントロールを使えば、例えば年月や地域といった繰り返し項目は一つの定義で自動的に横方向や縦方向にデータ数分だけ自動繰り返しされます。
この定義は次のように作成します。
(1)Tablixを配置
Tablixコントロールをデザイナに配置すると2x2の初期状態で配置されます。
(2)基本的な項目の設定
今回は列方向に時間軸、縦方向に地域とするので、右上に「=年」、左下に「=都道府県」、右下に「=日平均気温」を設定します。右下のセルを「=日平均気温」とすることで、自動的に「=年」と「=地域」に合致する日平均気温の先頭値が設定されます。
(3)都道府県の子項目追加
行方向の項目を完成させます。
「=都道府県」の項目を右クリックして[行グループ追加]-[子グループ]で1列追加し「=市町村区」を設定します。
次に「=市町村区」の項目を右クリックして[合計の追加]-[後]で合計行を追加します。
(4)年の子項目追加
列方向の項目を完成させます。
「=年」の項目を右クリックして[列グループ追加]-[子グループ]で1行追加し「=月」を設定します。
次に「=月」の項目を右クリックして[合計の追加]-[後]で合計列を追加します。
この時点でまずはプレビューで確認してみましょう。
帳票定義の改善
プレビュー表示で確認してみると次のような点が気になります。
- 罫線が必要
- 用紙は横向きが良い
- 日平均なので、Totalではなく日平均を表示したい
順番に解決していきます。
(1)罫線を引く
罫線を引きたいときはTablixコントロール全体を選択してBorderStyleプロパティに「Solid」を設定します。
(2)用紙を横向きにする
デザイナの左上の□をクリックし、プロパティウィンドウにレポートコンテンツが選ばれていることを確認したら、PaperOrientationプロパティ「Landscape」とします。また、Marginプロパティの「1.5cm」に変更しておきましょう。
(3)平均を集計する
タイトルを「都道府県平均」「年平均」として、日平均気温が表示されている4つのセルの左上以外をすべて「=Avg([日平均気温])」に変更します。
(4)基本の表示フォーマットを統一
気温は小数点以下1桁固定で右寄せにします。
そのためには年平均気温の4つのセルを選択して、Formatプロパティに「n1」、TextAlignプロパティに「Right」を指定します。
(5)月タイトルを整える
列方向の幅を2.5cmから1.5cmに変更します。また月の表示を数値ではなく「1月」のような表記にしてみましょう。
幅については列全体を選択してWidthプロパティに「1.5cm」を設定します。タイトルについては「=[月]」の値(Valueプロパティ)を「=[月] & "月"」にします。同様に年の表示も「〇〇〇〇年」になるようにします。
また、ページごとにすべてタイトルをつけたいのでプロパティウィンドウでTablixを選択して、RepeatColumnHeadersプロパティとRepeatRowHeadersプロパティを両方ともTrueにします。
実行して確認
1年分が1ページになるようにレイアウトを決めているので、合計で50ページ作成されます。
クロス集計表をアレンジする
ここからは、冒頭で紹介したTablixコントロール固有の新機能を組み込んで表をアレンジしていきます。
以下の2つのデータを表示する集計行・列を追加し、それらを各データ行・列の一番前に表示させてみます。
- 50年分のトータルの平均気温
- 全国の月ごとの平均気温
まずは、50年分のトータル平均気温を表示する列を追加します。「年平均」のヘッダを右クリックし、[合計の追加]-[前]を選択します(ちなみに[後]を選択すれば、データ列の最右端に合計表示用の列が追加されます)。
「Total」というヘッダの列が追加されるので、そのすぐ下のセルを一緒に選択し、右クリックから「セルの結合」をクリックしてヘッダを結合し、ラベル名を「50年の平均」にします。
左上の集計セルの値が、元々左上にあった集計セルの値(=First(Fields!日平均気温.Value))を引き継いでしまっているので、きちんと平均値が集計できるよう、値を「=Avg(Fields!日平均気温.Value)」に変更します。
同様の手順で全国平均を表示する行も追加します。都道府県平均を右クリックし、[合計の追加]-[前]を選択します。
「Total」というヘッダの行が追加されるので、そのすぐ右のセルを一緒に選択し、右クリックから「セルの結合」をクリックしてヘッダを結合し、ラベル名を「全国平均」にします。
最後に今回追加した行・列のヘッダの色と、集計セルの文字色などを変更して少し見やすくしておきましょう。
実行して確認
各データ行・列の前に全国の平均気温と、50年分の平均気温がそれぞれ表示されます。
まとめ
Tablixコントロールを使うことで、繰り返しTextBoxを配置しなくても簡単にクロス集計表が作成できます。
また、データもそのままではなく印字時加工も多彩なものがありますので、ノンプログラミングでも非常に柔軟に印字結果を制御できるのがお分かりいただけたと思います。
印刷出力というのは、システム開発においても利用者が気にする部分ですので、痒いところに手が届くActiveReportsで細かな仕様を実現する道を確保しておくのが良いと思います。