前回に引き続き、メタデータを編集してWeb Query for iのレポート機能を更に強力なものにする方法について説明します。今回は、より高度なレポート作成のためのメタデータ編集テクニックについてお話します。(編集部)
保有するデータの実用性を拡張するために、メタデータテクニックがどのように使用できるかリック・フラグラーが語ります。
2021年9月15日 リック・フラグラー
このシリーズの第1部で、Db2 Web Query for iがどのようにメタデータを活用し、レポート用に利用可能な情報の価値を高めることができるかを解説しました。本記事は、保有するデータの実用性を拡張するために、どのようにメタデータテクニックが使用できるかという例を使ってその議論を続けます(訳注)。
前回のデータベースにはある受注情報が記録されていたことを思い出してください。(図1を参照)
▲ 図1
前回、利益計算だけでなく拡張された価格とコストも計算するために、表に存在しない追加の列を定義しました。
拡張
受注表には次の2つの日付列が含まれています。1つは顧客が製品を希望する日付(XORDAT)、もう1つは実際にそれが出荷された日付(XOSDAT)です。管理者が、出荷実績の測定値として、製品の出荷が一般的に前倒しか、期日通りか、あるいは遅れているのかを把握するためにレポートの提出を求めたとします。
主題領域の専門家は、図2に示すように、彼らがスプレッドシートを使って実績の分析を行ってきた方法の規則を提供します。彼らはデータを得るためにQueryからデータをダウンロードし、Excelを使ってレポートを作成してきました。
▲ 図2
彼らの規則は、顧客が要求する日より2日前ないし2日後までのウィンドウの間に出荷されたすべての品目は、期日通り出荷されたと見做すということを示しています。そのウィンドウより前に出荷された品目は期日前出荷、ウィンドウより後に出荷された品目は納期遅れと見做されます。未出荷の品目は未確認とされるか、または多分除外されます。
このことは、ERPシステムが日付を提供できる一方で、出荷実績を説明するフィールドがそこに無いという課題を提示しています。またもや、Web Queryメタデータはこの課題解決に役立つことができます!2つの日付の間の日数を計算するフィールドを追加することで、この数値をレポートの中で使用できます。さらに彼らの規則を支援して、実績カテゴリを割り当てることができるかもしれません。
DEFINE文は、ファイル中の各受注品目に対して、要求された日付と出荷日付の間の日数を含む数値フィールドを作成するために使用されます。
DEFINE SHIPREQDIFF/I9 MISSING ON ALL=IF SHIPDATE_YYMD EQ '' THEN MISSING ELSE DATEDIF( REQDATE_YYMD , SHIPDATE_YYMD, 'D'); TITLE='Days to shipment', $
上に示した文にはDATEIFという名前のWeb Query関数が含まれています。DATEIF関数は、開始日、終了日、そして出力を定式化するためのユニット値(Y, M Dかもしれない)という3つのパラメータを要求します。今の場合、日数が知りたいので、第3パラメータとして’D’を指定しています。この関数は数値を返します。
待って、もっとあります・・・
まだ出荷日になっていない状況では、出荷日がないことがあります。このような場合には、ERPシステムはその日付をゼロとし、出荷日を数値から日付データに変換する作業はこの値を空(くう)つまりNULLのままにします。Web QueryにはDEFINE内でロジックを実行する機能が含まれています。実際、レポート内のDEFINEと同様に、Web Queryには必要なロジックを定義するのに使用できる編集パネルがメタデータ内にあります。
下記のDEFINE中のIF文は、MISSINGキーワードを使って、欠落している出荷日を処理しています。
IF SHIPDATE_YYMD EQ '' THEN MISSING ELSE DATEDIF( REQDATE_YYMD , SHIPDATE_YYMD, ‘D')
これは、値が存在しない場合に利用者またはデータベースがフィールドにNULLを設定するSQLシナリオに似ています。その結果、SHIPREQDIFFという新しいフィールドには、日数(正、0,または負の値)ないしは日数がまだ分からない場合には空が入ります。このフィールドをレポートに追加すると図3の様になります。
▲ 図3
日数を確かめるのは興味深いことですが、専門家が上記のスプレッドシート内のルールで行ったように実績をまだカテゴリ分けしていません。これを行うために、SHIPSTATUSという名前のフィールド用に別のDEFINEを使用することができます。このフィールドのロジックは、RPGプログラマーにお馴染みのIFとELSE IFロジックを使用します。
DEFINE SHIPSTATUS/A10=IF SHIPREQDIFF GT 2 THEN 'Late' ELSE IF SHIPREQDIFF LT -2 THEN ‘Early' ELSE IF SHIPREQDIFF EQ MISSING THEN 'Unknown' ELSE 'On-Time'; TITLE='ShipStatus', $
ビューを改善する
読みやすくするために、書式を整えると以下のようになります。
IF SHIPREQDIFF GT 2 THEN 'Late' ELSE IF SHIPREQDIFF LT -2 THEN 'Early' ELSE IF SHIPREQDIFF EQ MISSING THEN 'Unknown' ELSE ‘On-Time'
この定義は、専門家によって提供されたカテゴリ名の1つを含む10桁の文字フィールドを作ります。このShipStatusフィールドをメタデータに追加すると、テキストレポートに含めたり、あるいはことによると総合的な実績または実績傾向を描く図表を含めたりできるでしょう。このレポートをもっと意味あるものにするために、レポート中でデータを強調する「交通信号」として知られるWeb Queryの機能を使用したいと思います。交通信号はフィールドに適用され、現在のフィールド値に基づいてフォント、テキストサイズ、色、または背景色を変化させる潜在力をもっています。ここでは図4に示すように、悪い状況であることを示すために遅延に赤を、他のカテゴリにはそれぞれ別の色を使っています。
▲ 図4
図5のレポートは、カテゴリをもっと明確に表しています。
▲ 図5
データを視覚化する
この表のメタデータ定義にいくつかの追加フィールドが含まれるようになったので、潜在的にWeb Queryは単一データソースを使ってビジネスに複数のレポートを提供できます。あるいはもっと良いことに、視覚化したレポートを作ることができます。視覚化はダッシュボードに似たもので、1つのデータソースを使って1つのページ内に複数のレポートを入れ込んだ様式が設定できます。図6は、いくつかの可能な関心のあるビューの視覚化例を示しています。
▲ 図6
この図6の視覚化は(左上から右下の順に)以下のことを表しています。
- 出荷品目ごとの棒グラフ。数量の多いもの順
- 品目ごとの利益の棒グラフ。利益の高いもの順
- 出荷実績の棒グラフ
- 総合的な出荷実績のカテゴリ別円グラフ
- データのテキストによる表形式表示
この視覚化は、非常に単純な例題データに対して作成され、Web Queryで利用可能なほんのいくつかの図形タイプを使用しています。もっと洗練された視覚化は、製品ファミリー、期間、または地域を選択するためのパラメータを含めることができ、折れ線グラフ、国または世界地図、あるいは何とワードクラウドのようなグラフィックな要素を使用するかもしれません。大半の視覚化は、初期ビューを表示し、次にデータの選択やフィルタリングを行って、利用者が図形やレポートと相互にやりとりできるようにします。このフィルタリング能力によって、データの1つのサブセットまたは多くのサブセットを含めたり、除外したりできます。その究極の目標は、標準のレポートからは見えて来ないような事実または傾向を対話的に見定めることです。
ビジネスインテリジェンス(BI)ツールに関連して言われる「真実の単一バージョン」という語句を聞いたことがあるかもしれません。この語句は、初期の多くのBI専門家によるものです。
「真実の単一バージョン」で私達が意味するのは、情報や規則をたとえばDb2またはメタデータ層のように1か所で定義することによって、同じ重要なデータに対してレポートの作成者と利用者が異なる値や結論に達する機会を減らすということです。事前に列や計算を定義することで、各レポートに要する作業を減らし、複雑さを隠し、あらゆる将来のレポートで同じ計算が利用可能になることが保証されます。単純な計算または複雑な計算のどちらの場合にも、ビジネス定義の変更が必要なときには一か所でその定義を変更し、レポートは新しい詳細を採用することになります。
IBM Db2 Web Query for iには、企業が様々なタイプのデバイス上で改善された方法でデータを提示できるようにするプレゼンテーションツールが満載されているので、ビジネスリーダーに更なる意思決定力を与えます。そして、メタデータを賢く使うことで、企業はレポートという聖杯すなわち真実の単一バージョンから恩恵を受けることもあり得るのです。
(訳注)
例題の中で、シリーズ第1部で定義したフィールドが使用されていますので、適宜第1部を参照しながら読み進めてください。