ERP、CRM、SFA・・・。オンプレミスのパッケージソフトや、あるいはSaaSなど、皆様社内でいろいろな業務アプリケーションをお使いかと思います。これらに蓄積された情報を組み合わせて帳票に出力するという要件は珍しいことではないと思います。
データ統合を伴う帳票出力の課題
異なるアプリケーションからそれぞれデータを抽出する場合、すべて同じデータ形式であれば良いですが、そううまくはいきません。それぞれで異なるデータベースのソフトを使っていたり、あるいはCSVのようなテキストデータでしかデータ連携できないような場合もあるでしょう。
一般的な帳票ツールを使う場合、データ抽出、マージ、消費税の計算や明細毎の集計処理、ソートといった処理は開発するアプリケーション側で吸収する必要があります。また、中間データとして帳票ツールが対応しているデータ形式に変換する、といった処理も必要になる場合もあります。
こういったデータ統合の課題を解決する手段としてETLツールを使うのは定石です。しかし、無償のものでは機能が足りなかったり、使いやすいものは高額であったりと、結局ツールを使わずにアプリケーション側で対応する、ということもあるかと思います。
ActiveReportsで解決
ActiveReports for .NETの最新バージョン「12.0J」では、ページ/RDLレポートで複数のデータ領域(TableやListなど)にそれぞれ異なるデータセットを設定し、それらをネストすることにより、データ同士を統合して出力することができるようになりました。特定のキー項目で親子関係にあるデータセットを紐づけることになるため、マスター/詳細の関係にあるデータを表示する場合に最適です。もちろん集計やソートはノンコーディングで出来ますので、生産性は格段に上がります。
実装例
今回はクラウド上のデータベース(Microsoft Azure SQL Databaseを使います)に蓄積している得意先情報と、CSV形式の受注情報を組み合わせて、得意先別の受注一覧を出力する。というシナリオを例に解説します。
以下のようにSQL DatabaseとCSVに接続したデータセットを2つ作成します。ここもすべてGUIのダイアログから設定できるので簡単です。
次にTableコントロールを配置し、その詳細行にもう1つTableコントロールを配置して、Tableをネストします。
2つのTableにはそれぞれ別々のデータセットを設定できます。今回の例では親のTableにはSQL Databaseから作成した「CustomerData」を、子のTableにはCSVから作成した「SalesData」をそれぞれのDataSetNameプロパティに設定します。
あとはヘッダやセルのサイズの調整、表示するデータフィールドの設定などを行い帳票をデザインしていきます。親と子のTableと出力元データの関係は以下のようになっています。
仕上げに2つのデータセットを連結していきます。親と子のデータセットの共通のキー項目を指定して繋げます。共通の項目がない関連性のないデータセット同士を連結することはできません。今回は以下のように「得意先コード」で連結します。
子のTableを選択し、「Filters」プロパティの右側の「…」ボタンをクリックします。
「Table – フィルタ」ダイアログが表示されるので、「式」に子のデータセットのキー項目を、「値」に親のデータセットのキー項目を指定します。(今回はどちらも「得意先コード」です)
以上で設定は完了です。プレビューすると以下のように顧客情報と受注情報をマージして1つの表として出力することができます。
今回の記事で作成した帳票では、データ抽出から統合、出力まですべて、ActiveReports のGUIのデザイナ上で完結できます。もちろんコードも書いていませんので、ActiveReports がいかに生産性向上に寄与できるかがお分かりいただけたかと思います。
なお、同様の要件に対応する方法として、異なるデータセットから条件に合致するレコードを1件だけ取り出して表示する「Lookup関数」を使用する方法もあります。データ領域をネストしなくて良いぶんレポートの構造をシンプルにできるので、マスター詳細レポートのように、複数レコードを取得する必要がない場合はこちらがおススメです。
製品Webサイトではトライアル版のほか、デモアプリケーションも公開しておりますので、是非一度お試しいただければと思います。
「ActiveReports for .NET 12.0J」
Windowsアプリケーションデモ
Webアプリケーションデモ
トライアル版