お役立ち記事
DB2 Web Query for i でレポートをシームレスにリンクする方法とは?


img_db2_report_001
以前の記事では、DB2 Web Query for i がQuery/400やRPGプログラミングと比較しても、より改善されたレポート機能が使える点について解説しました。

今回の記事ではリンクするようなレポートフォーマットの開発にフォーカスします。概要レポートと詳細レポートをそれらの間のリンクと共に利用することで、ビジネスセグメントやカテゴリーごとの関連したレポートや情報のフィルタリングといったナビゲーションがシームレスに可能になります。この記事で紹介するサンプルでは、ユーザーは各国の製品セグメントにズームインしていけるようになっています。

(注意:おそらく皆さんが実際に作成するレポートやチャート、グラフには今回サンプルに使われているレポートよりももっとたくさんのカラムが含まれることでしょう。ここにある例はリンク付けとドリルダウンにフォーカスしたシンプルなもので、特定の意味を持つデータではありません。)

シンプルなドリルダウン(例:レポートAからレポートB、レポートCへ)を実行するのに必要なのはポータルとインフォアシストデザイナーだけです。レポートのコンビネーションはユーザーの創造性次第で無限にあります。ユーザーはある1つのレポートの幾つかのフィールドから、関連レポートやチャートへとレポートハイパーリンクを追加することで、複数のフィールドをキーにしてドリルダウンしていくことができるでしょう。このことはWeb Queryが柔軟なレポート機能を備えている要因となっています。

今回紹介するサンプルでは、QWQCENTライブラリーの中にあるWeb Queryのサンプルデータベースのデータを利用します。もしWeb QueryをインストールしたけれどQWQCENTはしていないという場合は、Web Queryのライセンスプログラムのインストール中に、ロードされたQWQCENTライブラリーの中からSAVEファイルを探し出してください。リストアライブラリーコマンドは、SAVFからQWQCENTへサンプルデータのライブラリーをリストアします。 RSTLIB SAVLIB(QWQCENT) DEV(*SAVF) SAVF(QWEBQRY/QWQCENT) MBROPT(*ALL) ALWOBJDIF(*ALL)

IBMではこのリストア手順に関して詳細な情報を提供しています。「QWQCENT」と検索エンジンに入力してみてください。

Web Queryサンプルデータは、参照整合性によってリンクされた幾つかのテーブルを含みます。参照整合性はデータベーステーブル間の関連付けをより強固なものにするテクニックです。QWQCENTにおいて関連する*FILEオブジェクトはInventory, Orders, PlantそしてStoresです。

iナビゲーターで見てみると(下の図1を参照)、複数のテーブルとそれらをリンクする整合条件があることが分かるでしょう。お互いをリンクすることにより(または結合されたとき)、データウェアハウスの単純なサンプルとして、工場ごと、店舗ごと、または製品ごとのさまざまなレポートを出力し、いくつかの可能性を示唆することも出来るようになるのです。

figure1
▲図1

ここで2点重要なことがあります。
まずひとつは、DB2 Web Queryが利用可能なテーブル群を認識しなければいけないということ。これはメタデータ(Web Queryがシノニムと呼ぶところ)の作成で、データベーステーブル群のコンテンツとロケーションの両方を定義することで実現できます。Web Queryはデータを複製せず、直接そのデータを参照します。
次に、この、テーブルにつき1回の動作、もしくはリンクされたテーブルのセットはWeb Queryポータルの中にある[Metadata –> Create]オプションを利用して実行するということです。

参照整合性によってリンクされているテーブルに対して、Web Queryはつながっているテーブル向けに単一のシノニムを生成できます。Ordersのテーブルは4つの関連したテーブルを含むシノニムを作成するために選択されました。”CEN_”というプレフィックスが挿入され、結果としてメタデータにはCEN_ORDERSという名前がつけられます。Web QueryはメタデータファイルをIFSの中に作成します。

注意:メタデータについてのこれ以上の言及はこの記事の範疇を超えてしまうためここでは割愛します。なお、CEN_ORDERSメタデータのレビューを見ることでjoin構文のサンプルを参照することが可能です。

メタデータが作成できたなら、レポート生成のためにインフォアシストデザイナーを使用する準備が整ったことになります。Web Queryを使用しているサイトには、DB2オブジェクト向けのデータソースを表すたくさんのシノニムが出てくるはずです。それらはインフォアシストを起動すれば利用できるようになります。

もし作業しているテーブルが参照整合性でリンクされていない場合には、以下のオプションを利用してみてください。

  • DB2ビュー(SQLロジックによってテーブルが結合された)を作成し、そのビューオブジェクトに対してメタデータを生成。
  • メタデータをそれぞれのテーブルに対して生成(レポート作成時にそれらをインフォアシスト内で結合する)、または、テーブルを結合するWeb Queryメタデータを手動で編集。
    この作業にはメタデータを書き出すのに必要な構文についてのより深い知識が必要となります。

IBMのサンプルデータでは、テーブルが整合条件によってリンクされているために、Web Queryは結合リンクと一緒に4つのテーブルのメタデータを作成します。インフォアシストはWeb Queryポータルのフォルダーから[New –> Report] を選択すれば起動できます。インフォアシストがデータソースの選択を要求してきたら、そのフォルダーにレポートを作成して保存することが可能ということを意味しています。先ほど取り上げたCEN_ORDERSを選択すると、ツールはメタデータの中にある全てのデータフィールドとテーブルにアクセスします。

インフォアシストデザイナーはこのような画面です(下の図2を参照)。

figure2
▲図2

インフォアシストでは、レポートにフィールドを追加するのも簡単にできます。ユーザーはフィールドをデータペインで確認することができます。何か処理をするにはこれらのフィールドをプレビューペインや他のペインにドラッグするだけです。フィールドの表示形式に関してリストにするかサマライズされたものにするか、という選択はもちろんのこと、ソートもしくはピボットにするか、なども選択できます。このように横断的な機能により、期間の異なるレポートを素早く比較できるようになりました。データペインでフィールドをダブルクリックするか、1つもしくは複数のフィールドを選択してプレビューペインにドラッグアンドドロップするだけの簡単な作業で対応できます。

このケースでは、国、製品種類、総売上($表記)が入った詳細レポートを作成していくことにします。
まずデータリストから国、製品種類、総売上のフィールドを選択し、続いてそれらをプレビューパネル領域にドラッグ(1つ1つ選択するでも、CTRLキーを押したまま複数をまとめて選択するでも可能)します。これによって、根幹となるDB2情報からの一部レコードが含まれたレポートレイアウトが直ちに生成されます。[Home –> Header]をクリックし適当なタイトルを入力するだけで、簡単にレポートのヘッダーも追加することができます。売上カラムに総額を追加するには、[Home –> Column Totals for a total line]をクリックします(図3を参照)。

figure3
▲図3

このレポートはドリルダウンの対象になるので、国のパラメーターが必要です。データペインで国のフィールドを右クリックしフィルターを選択すると、種類や値を選択するプロンプトのオプションペインが出てくるはずです。動的なプロンプトによってドロップダウンリストの中からデータベース内の選択可能な国の値が表示されているのです。スタティックを選択すれば、ユーザーが手入力で値を入れることも可能です。

COUNTRYというフィールド名(大文字と小文字は区別されるので要注意)が他のレポート(CALLINGレポート)から参照される際に重要なポイントになります。このプロセスはIBM iのプログラムが他を呼び出す仕組みに似ています。ユーザーは[Run]をクリックすればいつでもそれ自身を対象としたレポートを検証できます。もしCOUNTRYというパラメーターが正確に指定されていれば、ランタイムのプロンプトが表れ(図4を参照)そしてそこから選択した国のデータだけを抽出した結果が表示されるはずです。

figure4
▲図4

対象のレポートでSave Asオプションを使用して、意味が通る名前(例:CountryDetail_Report2)をつけてください。このレポートが完了したら、続いて2番目のレポート、この詳細レポートの上のレイヤーとなるサマリーレポートの作成に移っていきましょう。

サマリーレポートの作成にあたっては、同じデータソースを使って新しいレポートを作ることから始めます(もしアプリケーションが要求したら違うデータソースを基にしたレポートにリンクさせることも可能です)。このレポートは、例えば、CountrySummary_Report1とでも命名しておきます。サマリーレポートには国、売上、Cost of Goods Soldフィールドが必要です、再度[Home –> Header]を選択してタイトルをつけましょう。

次に、「Profit」を計算するために、メニューの[Data –> Define]をクリックして新しいフィールドを作成し、プロンプトで「Profit」を算出するための等式を入力します(図5)。

figure5
▲図5

PROFIT = REVENUE – COSTOFGOODS

「Profit」フィールドのフォーマットは、それが使用するフィールドと一致させるようにしています。というのは、そうすることで端数処理させられる可能性を少なくするからです。一対一のフィールドの定義付けは、レポートの記述というよりプログラミングに近いのかもしれません。

(注意:代わりにDBAサイトならば「Profit」の公式をメタデータの中に定義でき、値を自動的に計算できたかもしれません。Web Queryが有する、データベースの中に存在しないフィールドをレポーティングに織り込む機能はとても強力なものと言えます。)

メタデータは整合性を向上するだけでなく、レポートの書き出し速度もアップさせ、データを誤解釈する可能性も低減しました。すなわち、データウェアハウスが企業に「真実のひとつの側面」を提示するということになるのではないでしょうか。

Report1は図6のように仕上がりました。この例を完成させるため、さらに幾つかの機能を追加していきましょう。

figure6
▲図6
  • Countryから下層の詳細レポートへのリンク
  • 先ほど計算した「Profit」フィールド(小数桁を省いた形で)
  • パーセンテージで表した「Profit」フィールド

2つのレポートをつなげるリンクを加えるには、まずハイパーリンクアイコンをメニューバーに表示するため、プレビューペインでCountryフィールドをクリックします。ハイパーリンクを選択するとサマリーレポート1のCountryと詳細レポート2のURLとをつなげる関係が構築されます。レポート2へのパスを指定するために、Browseボタンを押してターゲットとなるレポートの名前を出現させます。最後に、レポート1とレポート2をリンクさせるパラメーターを定義し、レポートが新しいウィンドウで開くかどうかを決めます(図7を参照)。

figure7
▲図7

COUNTRYフィールドはリンクですので、単体のパラメーターとして名前を設定してください。ハイパーリンクが完成すると、プレビューペインにて国の値がリンクに変化したことが認識できるかと思います。

「Profit」を加えるには、そのフィールドをプレビューペインまでドラッグします。サンプルではゼロの位より下の小数点2桁を省略しましたが、理由はこの値にはセント(¢)が不要だからです。そして再度「Profit」をパネルまでドラッグ。右クリックして、ドル単位ではなくパーセント単位で「Profit」を表示させるために継承機能を使用しました。

この時点で、レポートを実行させ、結果をチェックすることができます。レポート1を実行し、幾つかの国(例:スペインとドイツ)を選択します。レポート2が開いて、選択された国に関して別ウィンドウで詳細が表示されれば成功です。これが今回の一連の解説で期待していた動作です。

国固有の詳細情報を円グラフに描写するドリルダウンをレポート2にもう一つ追加してみました。[Show Chart]が選択されたとき、レポート3のチャートが別ウィンドウで出現します(図8を参照)。

figure8
▲図8

ドリルダウンリンクの文字列はもちろん、アイコンに置き換えることができます。ただし、ローカルディレクトリーを指定するHTMLタグでイメージリンクを定義することが必要です。そのアイコンを選択するとリンクされたレポートやチャートもまた有効化されます(図9を参照)。非常に便利かつグラフィカルな表現が可能になるので、ぜひ活用してみてください。

figure9
▲図9

今回のIBM DB2 Web Query for iにおけるドリルダウン機能の紹介は以上となります。次回はアクティブレポートに関してのレポートを予定しています。どうぞ、お楽しみに。

====================
本記事は「IBM Systems Magazine」の許諾のもと、原文を日本語化するとともに、一部再編集したものです。原文をご覧になりたい方は下記よりアクセスしてください。

原文タイトル: Linking Reports With DB2 Web Query for i
原文著者: Rick Flagler


この記事のあとにはこちらの記事もおススメです。