ActiveReports for .NET 11.0Jから搭載されたTablixコントロール。使いこなすととっても便利なのですが、ちょっと癖があります。そこで今回は以下の画像のようなクロス集計表を作成する方法をステップバイステップで紹介してみたいと思います。
かなり長い投稿になってしまいましたが、是非マスターしてみてください。
Tablixコントロールの概要
まず最初にTablixの概要を押さえておきましょう。
- Matrix(7.0Jから提供開始)の後継機能
- 互換性維持のため11.0Jでも引き続き従来のMatrixは動作するが、新規に追加することは不可。新規作成はTablixを利用する
- Matrixより柔軟なレイアウトを実現できる。例として以下
- 集計セルの書式を個別に設定可能
- 集計列/行をデータ行/列の前に設定できる
- 行ヘッダ/列ヘッダのセル結合
- 行ヘッダ/列ヘッダの固定(前回のブログ記事参照)
製品ヘルプ「Tablix」にも詳しい情報があります。 また、Matirxを使用した手順は開発者のための実装系Webマガジン「CodeZine」の「5分でわかるActiveReports帳票」でも取り上げています。こちらを読むとイメージが掴めるでしょう。
データの準備
Nwindデータベースを使います。下記のようにProducts、Categories、OrderDetails, Orders, Employeeを結合し必要なデータを取得します。クロス集計表は、集計用の数値フィールド、行および列に配置する分析軸用のフィールドが存在すれば作成可能です。ちなみに、以下の画像はActiveReportsのクエリエディタです。
レポート新規作成
Tablixが利用できるのはページレポートとRDLレポートです。今回はRDLレポートを選択します。
レポートにデータを接続
データをレポートに接続します。接続に成功すると[レポートエクスプローラー]にデータベースフィールドが一覧表示されます。
レポートにTablixを追加
Tablixは初期状態で2つのグループと4つのTextBoxから構成されます。
行グループ/列グループの設定
左下のTextBoxにフィールド「カテゴリ」を連結します。この操作によってTablixの行グループのグループキーに「カテゴリ」がセットされます。
[メモ]
上述のとおり、TextBoxにフィールドを設定することでグループキーにも同じフィールドが自動的に設定されますが、 その後、TextBoxに別のフィールド設定したり、フィールドを削除してもグループキーは維持されます。例えば、グループキーに「ProductID」をセットし、TextBoxには「ProductName」をセットするといったことも実現可能です。
コンテキストメニューを表示し「カテゴリ」グループの下に子グループを追加します。
追加された子グループのTextBoxにフィールド「製品名」をセットします。この操作により2番目の行グループのグループキーに「製品名」がセットされます。
「カテゴリ」-「製品名」の親子2階層の行グループが完成しました。同様に列グループを設定していくと次のようになります。これでグループ化の設定は終了です。
集計値の設定
行列が交差するTextboxに集計対象の値「受注金額」をセットします。
「カテゴリ」毎の小計値を出力したい場合は、その1つ下のグループ「製品名」のTextBoxを右クリックし、コンテキストメニューから「合計の追加」を選択します。
「Total」という見出しを持った行が自動的に追加されます。これだけで小計行の追加は終了です。必要に応じて見出しのテキストを変更すると良いでしょう。
行グループ、列グループ全てに小計行を追加し、フォントや背景色などを整えていきましょう。最終的には次の画像のようなレポート定義となりました。これを実行すると冒頭で紹介した出力結果になります。
おまけ
余談ですがTablixとExcel出力は非常に親和性が高いです。以下の画像は今回作成したクロス集計表をExcel出力したものです。ズレのないExcel出力が希望の場合は是非Tablixの利用をご検討ください。