サブレポートを活用して帳票開発を効率化しよう!

ActiveReports for .NET(アクティブレポート)」では発売当初から複数データソースを使用した帳票や、グラフや表を並べた帳票を作成する手段として「サブレポート」機能を提供しています。

別の帳票をサブレポートとして組み込む

今回はActiveReportsが提供する3つのレポート形式から、「ページレポート」の場合を例に、帳票開発を効率化するサブレポートの活用法をご紹介したいと思います。

複数のレポートで再利用する

サブレポートを使用して、複数のレポートで再利用できるレポート部品を作成することができます。一例として今回は以下のようにパラメータで指定した製品カテゴリごとの売上推移を表示するグラフをRDLレポートで作成し、これを複数のレポートに組み込んで再利用してみます。

なお、ページレポートの中でサブレポートとして設定できるレポート形式はRDLレポートのみですのでご注意ください。

有効なメインとサブのレポート形式の関係は以下の通りです。

メインレポートの形式 サブレポートに指定できる形式
セクションレポート セクションレポート
ページレポート RDLレポート
RDLレポート ページレポート、RDLレポート

例1:製品カテゴリごとの売上一覧に組み込む

まずは以下のような製品カテゴリごとの年間の売上一覧を示すレポートに組み込んでみます。

製品カテゴリごとの売上一覧への組み込み

サブレポートを設定するには、SubReportコントロールを配置し、ReportNameプロパティにサブレポートとして使用するレポートファイル名を指定します。「ファイルを開く」からダイアログを開いて指定するだけなので簡単です。

ReportNameプロパティの設定

次にサブレポートのデータをフィルタリングするためのパラメータを指定します。今回サブレポートに指定しているレポートは表示するカテゴリ名をパラメータに持っているので、それを渡すよう設定します。

パラメータの設定

※ここでパラメータ名を「カテゴリ」にしていますが、これはサブレポート側に定義されているパラメータ名と一致している必要がありますのでご注意ください。

サブレポート側のパラメータ設定

実行すると以下のようにメインの売上一覧データと、サブレポートで表示させた売上推移のグラフを1つのレポートで表示できました。

例2:製品全体の売上集計表に組み込む

次にすべての製品の売上情報をTablixコントロールでクロス集計したレポートに同じグラフを組み込んでみます。

製品全体の売上集計表に組み込む

今回は全体の売上推移をグラフに表示するので、サブレポートへのパラメータに「ALL」という文字列を渡します。サブレポート側はカテゴリに「ALL」が指定されたら全体のグラフが表示されるようデータセットのクエリを作り込んであります。詳しい方法は製品ヘルプの「複数値を取るパラメータの追加」などをご覧ください。

全体のデータの取得

以下実行結果です。このように同じサブレポートを別々のメインレポートで流用して活用することができました。

なお、レポートのコンテンツを部品化する方法として、「レポートパーツ」を使用する方法もあります。

サブレポートの場合はレポート単位での部品化となりますが、レポートパーツはTextBoxやTableといったレポート項目単位で部品として使うことができるので、より柔軟な使い方ができます。単一のレポートとして実行される分パフォーマンス面でも有利になる可能性がありますが、ページレポートで使用する場合は異なる種類のデータソースを使うことができないので、そういった場合にはサブレポートを活用するのがよいでしょう。

複数のデータソースを使用する

前述の通り、ページレポートでデータソースの種類が異なる表やグラフを1つのレポートに表示させたい場合、サブレポートを使用するのが有効です。

ページレポートで複数データソースに対応する方法として、データセットをネストする方法を以前紹介しましたが、その時と同様に、AzureのSQLデータベースとCSVから取得したデータを組み合わせたマスター詳細レポートを、サブレポートで作ってみたいと思います。

サブレポート側のレイアウト。フィルタリング用のパラメータとして得意先コードを受け取る「CustomerCode」を定義しています。

フィルタリング用のパラメータ

メインレポート側のレイアウト。サブレポートと異なるデータソースを使用します。

親レポートのレイアウト

実行結果。異なるデータソース2種を使ってマスター詳細レポートが作成できました。

実行結果その3

データセットのネスト VS サブレポート

ページレポートで複数データソースに対応する方法としてこの2つが存在しますが、サブレポートを使うと、内部的にサブレポートの数だけレポートドキュメントの生成が行われるので、レイアウトやデータにも依存しますが、パフォーマンス面では不利になる可能性があります。複数データソースに対応する場合は、可能であればデータセットのネストを使用するのが良さそうです。

ただし、レイアウトによってはデータセットのネストでは作成が難しい、サブレポートのほうが簡単に作れるような場合もあると思いますので、ケースバイケースで使い分けていただくと良いかと思います。

製品Webサイトではトライアル版のほか、デモアプリケーションも公開しておりますので、是非一度お試しいただければと思います。

\  この記事をシェアする  /