SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)(AD)

Tablixコントロールを使って横に長い集計表を作成する

ActiveReportsの新機能を活用して一歩進んだ帳票を作成しよう 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 前回は、Excel方眼紙でレイアウトした帳票や紙の帳票を元に、ActiveReportsで帳票を作成する方法をご紹介しました。今回は、ActiveReports for .NET 11.0Jの新機能「Tablixコントロール」を活用します。ActiveReportsにはデータを一覧表示するのに適したTableコントロールがありますが、Tablixコントロールを使うことで、Excelのピボットテーブルのようなクロス集計表(グループ化された2種類の項目に対して、行・列で交差した点の集計値を表示する表)を簡単に作成することができます。

  • X ポスト
  • このエントリーをはてなブックマークに追加

Tablixコントロールとは

 ActiveReports for .NET 9.0Jまでは、クロス集計表の作成のためのコントロールとして、Matrixコントロールが存在しました。今回紹介するTablixコントロールは、このMatrixコントロールの機能を引き継ぎつつ、Tableコントロールの機能も融合した、一覧表や集計表などの柔軟なレイアウトが実現できるコントロールです。

 Tablixコントロールの利用した帳票は、製品サンプルに含まれる「レポートギャラリーサンプル」で 確認することができます。

 以下の画像はサンプルに含まれる帳票のうちの1つです。これは一見TextBoxを1つずつ並べて配置して作成したかのように見えますが、実は1つのTablixコントロールからできています。

図1 Tablixコントロールで作られた帳票
図1 Tablixコントロールで作られた帳票

 グループ化されていない行・列を複数追加し、それらを必要に応じてセル結合することで表現しています。1つのコントロールなので、プレビューしたり、Excelなどにエクスポートしたりした時も、セルがずれることなくきれいに整列されます。

Tablixコントロールで追加された機能

 Tablixコントロールと従来のMatrixコントロールを比較すると、Tablixコントロールでは新たに以下のようなことができるようになっています。

集計セルの書式を個別に設定可能

 従来のMatrixコントロールでは、集計用のセルが1つだけしか定義できませんでしたが、Tablixコントロールではぞれぞれの行・列で集計用のセルを定義することができます。例えば、小計値は通常の書式にして、合計値のみ太字にしたりフォント色を変えたりすることができます。

図2 それぞれの行・列で集計セルを定義できる
図2 それぞれの行・列で集計セルを定義できる

集計列・行をデータ行・列の前に設定できる

 従来のMatrixコントロールでは、合計値の表示は必ず各データ行・列の後になりましたが、Tablixコントロールでは、合計の計算用のセルの挿入位置を各データ行・列の前にするか後にするかを選択できます。

図3 合計値のセルを前に持ってくることができる
図3 合計値のセルを前に持ってくることができる

行ヘッダ/列ヘッダのセル結合

 Tablixコントロールでは、行・列のヘッダのセルを結合することが可能です。以下の画像のような複雑なヘッダも1つのコントロールで簡単に実現可能です。

図4 行ヘッダや列ヘッダのセルを結合することができる
図4 行ヘッダや列ヘッダのセルを結合することができる

 次ページからは、実際にこのTablixコントロールを使用して、クロス集計表を作成してみます。

今回利用するデータ

 今回は、気象庁の過去の気象データ検索から月ごとの日平均気温のデータをCSVファイル化して、Tablixできれいにまとめてみましょう。データのフォーマットは「年」「月」「都道府県」「市町村区」「日平均気温」とします。最初は過去100年くらいを考えていましたが、県庁所在地以外だと意外と100年前のデータがないので、キリのいい過去50年のデータを処理してみましょう。

データソースの設定

 プロジェクトに新しいRDLレポートファイルを追加したら、レポートエクスプローラーを使ってCSVファイルをデータソースとして指定します。データソースの設定について詳しい手順は、前回の記事をご参照ください。

図5 データソースの指定
図5 データソースの指定

帳票定義

 今回作成する定義は次のような平均集計付きの一覧表になります。

図6 Tablixによる定義例
図6 Tablixによる定義例

 TextBoxだけで作成しようとすると印字するデータの個数を気にしながらすべての印字項目分のTextBoxを配置しなければなりません。Tablixコントロールを使えば、例えば年月や地域といった繰り返し項目は一つの定義で自動的に横方向や縦方向にデータ数分だけ自動繰り返しされます。

 この定義は次のように作成します。

(1)Tablixを配置

 Tablixコントロールをデザイナに配置すると2x2の初期状態で配置されます。

図7 初期状態
図7 初期状態

(2)基本的な項目の設定

 今回は列方向に時間軸、縦方向に地域とするので、右上に「=年」、左下に「=都道府県」、右下に「=日平均気温」を設定します。右下のセルを「=日平均気温」とすることで、自動的に「=年」と「=地域」に合致する日平均気温の先頭値が設定されます。

図8 基本的な項目の設定
図8 基本的な項目の設定

(3)都道府県の子項目追加

 行方向の項目を完成させます。

 「=都道府県」の項目を右クリックして[行グループ追加]-[子グループ]で1列追加し「=市町村区」を設定します。

図9 行方向の項目
図9 行方向の項目

 次に「=市町村区」の項目を右クリックして[合計の追加]-[後]で合計行を追加します。

(4)年の子項目追加

 列方向の項目を完成させます。

 「=年」の項目を右クリックして[列グループ追加]-[子グループ]で1行追加し「=月」を設定します。

図10 列方向の項目
図10 列方向の項目

 次に「=月」の項目を右クリックして[合計の追加]-[後]で合計列を追加します。

 この時点でまずはプレビューで確認してみましょう。

図11 プレビュー確認
図11 プレビュー確認

帳票定義の改善

 プレビュー表示で確認してみると次のような点が気になります。

  • 罫線が必要
  • 用紙は横向きが良い
  • 日平均なので、Totalではなく日平均を表示したい

 順番に解決していきます。

(1)罫線を引く

 罫線を引きたいときはTablixコントロール全体を選択してBorderStyleプロパティに「Solid」を設定します。

図12 罫線の設定
図12 罫線の設定

(2)用紙を横向きにする

 デザイナの左上の□をクリックし、プロパティウィンドウにレポートコンテンツが選ばれていることを確認したら、PaperOrientationプロパティ「Landscape」とします。また、Marginプロパティの「1.5cm」に変更しておきましょう。

図13 プレビュー確認
図13 プレビュー確認

(3)平均を集計する

 タイトルを「都道府県平均」「年平均」として、日平均気温が表示されている4つのセルの左上以外をすべて「=Avg([日平均気温])」に変更します。

図14 平均集計
図14 平均集計
図15 平均集計のプレビュー確認
図15 平均集計のプレビュー確認

(4)基本の表示フォーマットを統一

 気温は小数点以下1桁固定で右寄せにします。

 そのためには年平均気温の4つのセルを選択して、Formatプロパティに「n1」、TextAlignプロパティに「Right」を指定します。

図16 平均集計のプレビュー確認
図16 平均集計のプレビュー確認

(5)月タイトルを整える

 列方向の幅を2.5cmから1.5cmに変更します。また月の表示を数値ではなく「1月」のような表記にしてみましょう。

 幅については列全体を選択してWidthプロパティに「1.5cm」を設定します。タイトルについては「=[月]」の値(Valueプロパティ)を「=[月] & "月"」にします。同様に年の表示も「〇〇〇〇年」になるようにします。

 また、ページごとにすべてタイトルをつけたいのでプロパティウィンドウでTablixを選択して、RepeatColumnHeadersプロパティとRepeatRowHeadersプロパティを両方ともTrueにします。

実行して確認

 1年分が1ページになるようにレイアウトを決めているので、合計で50ページ作成されます。

図17 実行結果
図17 実行結果

クロス集計表をアレンジする

 ここからは、冒頭で紹介したTablixコントロール固有の新機能を組み込んで表をアレンジしていきます。

 以下の2つのデータを表示する集計行・列を追加し、それらを各データ行・列の一番前に表示させてみます。

  • 50年分のトータルの平均気温
  • 全国の月ごとの平均気温

 まずは、50年分のトータル平均気温を表示する列を追加します。「年平均」のヘッダを右クリックし、[合計の追加]-[前]を選択します(ちなみに[後]を選択すれば、データ列の最右端に合計表示用の列が追加されます)。

図18 合計の追加
図18 合計の追加

 「Total」というヘッダの列が追加されるので、そのすぐ下のセルを一緒に選択し、右クリックから「セルの結合」をクリックしてヘッダを結合し、ラベル名を「50年の平均」にします。

図19 セルを結合しラベル名を変更する
図19 セルを結合しラベル名を変更する

 左上の集計セルの値が、元々左上にあった集計セルの値(=First(Fields!日平均気温.Value))を引き継いでしまっているので、きちんと平均値が集計できるよう、値を「=Avg(Fields!日平均気温.Value)」に変更します。

図20 集計セルの値を平均値に変更する
図20 集計セルの値を平均値に変更する

 同様の手順で全国平均を表示する行も追加します。都道府県平均を右クリックし、[合計の追加]-[前]を選択します。

図21 合計の追加
図21 合計の追加

 「Total」というヘッダの行が追加されるので、そのすぐ右のセルを一緒に選択し、右クリックから「セルの結合」をクリックしてヘッダを結合し、ラベル名を「全国平均」にします。

図22 セルを結合しラベル名を変更する
図22 セルを結合しラベル名を変更する

 最後に今回追加した行・列のヘッダの色と、集計セルの文字色などを変更して少し見やすくしておきましょう。

図23 ヘッダの色、集計セルの文字色を変更する
図23 ヘッダの色、集計セルの文字色を変更する

実行して確認

 各データ行・列の前に全国の平均気温と、50年分の平均気温がそれぞれ表示されます。

図24 実行結果
図24 実行結果

まとめ

 Tablixコントロールを使うことで、繰り返しTextBoxを配置しなくても簡単にクロス集計表が作成できます。

 また、データもそのままではなく印字時加工も多彩なものがありますので、ノンプログラミングでも非常に柔軟に印字結果を制御できるのがお分かりいただけたと思います。

 印刷出力というのは、システム開発においても利用者が気にする部分ですので、痒いところに手が届くActiveReportsで細かな仕様を実現する道を確保しておくのが良いと思います。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10463 2017/11/17 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング