GrapeCity.devlog

グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の最新情報をお届けします。製品のTIPSや発売情報、イベントのお知らせなどをいち早く発信中です。

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

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

最新バージョン「12.0J」では3つのレポート形式のうち、ページレポートでもSubReportコントロールが使用できるようになり、これでActiveReportsが提供するすべてのレポート形式でサブレポートが使用できるようになりました。

ここで〇〇レポートという用語がたくさん出てきていますが、簡単に整理すると、ページレポートはデザイン方式(レポート形式)、サブレポートは機能、SubReportコントロールはサブレポート機能を使用するためのレポートコントロールです。

f:id:GrapeCity_dev:20180406094709p:plain

今回は帳票開発を効率化するサブレポートの活用例を改めてご紹介したいと思います。

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

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

f:id:GrapeCity_dev:20180405103509g:plain

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

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

メインレポートの形式サブレポートに指定できる形式
セクションレポートセクションレポート
ページレポートRDLレポート
RDLレポートRDLレポート
例1:製品カテゴリごとの売上一覧に組み込む

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

f:id:GrapeCity_dev:20180405112954p:plain

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

f:id:GrapeCity_dev:20180405113454p:plain

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

f:id:GrapeCity_dev:20180405114004p:plain

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

f:id:GrapeCity_dev:20180405114517p:plain

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

f:id:GrapeCity_dev:20180405133418g:plain

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

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

f:id:GrapeCity_dev:20180405133701p:plain

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

f:id:GrapeCity_dev:20180405164812p:plain

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

f:id:GrapeCity_dev:20180405135132g:plain

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

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

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

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

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

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

f:id:GrapeCity_dev:20180405152229p:plain

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

f:id:GrapeCity_dev:20180405154108p:plain

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

f:id:GrapeCity_dev:20180405154445p:plain

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

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

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

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

ActiveReports for .NET 12.0J - 製品情報
Windowsアプリケーションデモ
Webアプリケーションデモ

Copyright © GrapeCity, Inc. All Rights Reserved.