NEWS
Db2 for i & SQL活用 虎の巻 Db2 for i & SQL活用 虎の巻
2021.11.11

【虎の巻】第1回 「IBM i OSのメタデータの力(第1部)」

【虎の巻】第1回 「IBM i OSのメタデータの力(第1部)」

公開日時:2021年11月11日

メタデータは、データフィールドが何を意味していて、どのような属性を持っているかに関する情報を保持しています。この情報をうまく編集することで、Web Query for iによるレポートが簡単により強力なツールに変身することを、今回と次回の2回の記事でお伝えします。(編集部)

リック・フラグラーが、Db2 Web Query for iに関連するメタデータについて、包括的なメタデータの利点と共に語ります。

2021年8月27日 リック・フラグラー

IBM i環境で仕事をしている開発者は、「メタデータ」という言葉に馴染みがあるかどうか分かりません。メタデータは「データに関するデータ」と定義できます。

メタデータは、統合リレーショナルデータベースが導入されたシステム/38という歴史的な時代からIBM i OS内にずっと存在していました。DSPFDおよびDSPFFDというコマンドを考えてみてください。これらのコマンドは、開発者がそれぞれファイルやファイル内のフィールドの情報を知るために頻繁に使うものです。DSPFDコマンドは、特定のファイル名に対して実行すると、ファイル記述、レコード数、削除レコード数、レコード長等のようなファイルレベルの情報を表示します。DSPFFDコマンドは、一階層下に入り込み、レコード様式内の各フィールドおよびその記述情報、フィールド長、型、列見出し等を表示します。これが、システムファイルの集まりであるDb2カタログ中にDb2が最新情報を保持しているメタデータです。

同様の情報はAccess Client Solutions (ACS)でも見ることができます。これは、IBM iの5250画面コマンドに対応するもので、グラフィカルな表示を提供します。ACSでスキーマ->ライブラリ->表と辿り、表オブジェクトを右クリックして属性定義を見ると、図1に示されるような列が表示されます。

▲ 図1

デフォルトのメタデータ

Web Queryに表を認識させる場合、シノニムと呼ばれるメタデータオブジェクトを作成します。シノニムは2つのファイルで構成されています。1つは表が存在する場所の定義を、もう1つは表のフィールドの定義を含んでいます。デフォルトでは、どんな情報であれ表が含んでいるそれを使ってシノニムが作られます。レポートデザイナーを起動すると、この例(図2)にあるデータの利用者に対し、ERPシステムが認識しているフィールドが表示されます。

▲ 図2

DB2 Web Query for iは、開発者およびエンドユーザー両者向けのツールとして開発されてきたので、私達がレポートデザイナーに対して正確で扱いやすく、明確な形でデータを提示するのは当然のことです。図2を見ると、データベース名が十分に意味あるものでないため、このデータには明確さが欠けている可能性があることが分かります。私達には次の選択肢があります。レポート内の項目の記述を修正するか、「改善」のためメタデータを編集するかです。メタデータを修正すると、同じデータソースに基づくすべてのレポートが改善され、IT開発者をレポート作成から解放する可能性があり、結局ビジネス用のレポート作成体験を向上させます。

これは、厳密に言えば一部の人にとっては上辺だけの改善の様に感じられるかもしれませんが、この後で述べるように、メタデータは単に列の見かけを変える以上のことができるのです。

データをもっと魅力的にする

メタデータについて少しばかり良く理解したところで、ビジネスインテリジェンス(BI)の文脈でメタデータを考えてみましょう。一般的なBIシステムはデータベースオブジェクトとレポート生成ツールの間にメタデータの層を挿入します。このメタデータ層は、データベースからのデータを更に定義したり、フィールド様式を変更したり、あるいはレポートに含まれる新しいフィールドのまったく新しい値を計算したりするのに使うことができます。たとえば、ERPシステムのORDER表に次のようなフィールドがあると仮定しましょう。

XOORD#         Decimal(9,0) – 受注番号(Order Number)、数値フィールド
XOITM#          Decimal(9,0) – 受注番号中の品目番号(Item Number)、数値フィールド
XOITEM          CHAR(50)  - 受注品目名(Item)、文字フィールド
XORDAT         Numeric(8,0) - YYYYMMDD (つまり2021-09-01)の形式の注文日、数値フィールド
XOSDAT         Numeric(8,0) - YYYYMMDD (つまり2021-10-01)の形式の出荷日、数値フィールド
XOQTY           Decimal(9,0) – 受注数(Quantity ordered)、数値フィールド
XOUPRC         Decimal(9,2) – 品目単価(the unit price)、数値フィールド
XOUCST         Decimal(9,2) – 品目のコスト(the unit cost per item)、数値フィールド 

時として、データベースの表は、フィールドにもっと意味のある記述を加えるために、フィールド名に加えてTEXTまたはCOLGHG列のどちらかを使って定義されました。しかし、今の場合は恐らく違います!この場合、この表には使い勝手の良い列名が含まれていません。したがって、フィールドに意味のある名前を割り当てるために、メタデータ層を使うことができるかもしれません。たとえば、次に示すようなものです。

XOORD#       “Order Number” または “Order No.”
XOITM#        “Item Number“ または “Item No.”
XOITEMD       “Item Description”
XORDAT       “Requested Date”
XOSDAT       “Ship Date”
XOQTY        “Quantity Ordered”  または単に ‘Quantity”
XOUPRC       “Unit Price” 
XOUCST       “Unit Cost”

次に示すのは、表がWeb Queryに認識されたときに最初に生成されたものを示すWeb Queryのデフォルトのメタデータを抜粋したものです。

FIELDNAME='XOORD#', ALIAS='XOORD#', USAGE=P10, ACTUAL=P5,
      MISSING=ON, $
    FIELDNAME='XOITM#', ALIAS='XOITM#', USAGE=P10, ACTUAL=P5,
      MISSING=ON, $
    FIELDNAME=XOITEM, ALIAS=XOITEM, USAGE=A50, ACTUAL=A50,
      MISSING=ON, $

下記のものは、Title値を追加して各フィールドにユーザーが理解できる名前を付けた修正版です。

FIELDNAME=XOORD#, ALIAS=XOORD#, USAGE=P10, ACTUAL=P5,
      MISSING=ON,
      TITLE='Order,No.', $
    FIELDNAME=XOITM#, ALIAS=XOITM#, USAGE=P10, ACTUAL=P5,
      MISSING=ON,
      TITLE='Item,No.', $
    FIELDNAME=XOITEM, ALIAS=XOITEM, USAGE=A50, ACTUAL=A50,
      MISSING=ON,
      TITLE='Item,Description', $

ひとたびすべてのフィールドにTitleが追加されると、Web Queryレポート内の列には改善された列見出しが含まれます。そして、これらはメタデータで定義されているので、レポート作成者は何度も手作業でそのような変更を行う必要がありません。改訂されたメタデータを使ったレポートを図3に示します。

▲ 図3

見出しは改善されたように見えますが、旧来の数値列に基づく出荷日フィールドがどのようにフォーマットされているかに注意してください。これは、以下に示すようにメタデータが役に立つもう1つの機会です。

データをもっと機能的にする

例として使っている表とフィールドが与えられ、合計値すなわち注文ファイルの各品目に対する拡張された価格を表示するレポートがビジネス上求められたとしましょう。拡張された価格はDb2データベースの表には存在しません。昔はQuery/400またはRPGプログラムを使ったレポートでは、「数量*単価」として拡張された価格を計算するために「作業」フィールドを作成しました。私達は、データベースフィールドを使用して、次のような計算式を持つXOEXTPRCフィールドを作成します。

XOEXTPRC = XOQTY * XOUPRC

しかし、そのフィールドはそれを計算したクエリーまたはプログラム内だけに存在しますよね?したがって、その後CFOが注文表内の品目の採算性を表す別のレポートを要求した場合、この次なるレポートの作成者は、拡張された価格とコストの差として利益を計算するために、価格だけでなくコストも拡張するためにそのロジックを繰り返す必要があります。

XOEXTPRC = XOQTY * XOUPRC
XOEXTCST = XOQTY * XOUCST
XOEXTPRFT = XOEXTPRC - XOEXTCST

この繰り返しの努力は時間の浪費であり、おそらくもっと複雑な計算の場合、誤りが紛れ込む可能性があります。メタデータはこの状況にどのように役に立てるのでしょうか?

Web Query内で、フィールドの再定義または新しいフィールドを作ることで、元々のフィールドを拡張するためにメタデータを使うことができます。追加フィールドは、Web QueryのDEFINE文を使うことで作成できます。ここでは、名前、型、フィールド長、小数点位置を指定し、またWeb Queryに千単位の桁区切りを示すコンマを表示するよう指示して新しいフィールドを定義します。今の場合この例のフィールド定義(P13.2C)は、長さ13桁小数点以下2桁のパック十進数を使用し、千単位のコンマ区切りを表示します。最後に、Title定義のテキスト内でコンマを使うことで“Extended”と“Price”という語が2行に分かれることをWeb Queryに知らせます。

次に示すのは、3つの新しい列を定義するためのメタデータの抜粋です。

    DEFINE XOEXTPRC/P13.2C MISSING ON ALL=XOQTY*XOUPRC;
      TITLE='Extended,Price', $
    DEFINE XOEXTCST/P13.2C MISSING ON ALL=XOQTY * XOUCST;
      TITLE='Extended,Cost', $
    DEFINE XOEXTPRFT/P13.2C MISSING ON ALL=XOEXTPRC-XOEXTCST;
      TITLE='Extended,Profit', $

ひとたびこれらのDEFINES文が追加されると、注文表に対するデータソースを使って新しいレポートを誰が作成したとしても、元々のデータベースの表にフィールドが無い場合でも、同じ体裁と列見出しの中に拡張された価格、コスト、利益が表示されます。これはほとんどのBIツールに共通の途方もなく強力な概念です。

問題を修正する

他の状況でのメタデータの使用法には、データベースの列データを別の形式に変更する、あるいは旧来の表に存在するかもしれない問題を解決することなどがあります。例題のレコードにある数値形式の2つの日付フィールドを思い出してください。DATEデータ型が追加される前に作成された古いシステムは、しばしば日付を文字フィールドまたは数値フィールドとして格納していました。

日付データが正しいことを保証するために、日付の月や日の部分を編集しなければならなかった時のことを思い出してください。今日、DATE型のデータベースフィールドはもっと賢く、正しくない日付が入力されるのを防ぎます。これら古いフィールドの型は、DATE列よりも機能的に劣るのに加えて、しばしば空白、ゼロ、あるいはある別の値を使ってデータが入っていないことを示します。DATEフィールドはより望ましいものです。それというのも、それを使うことで、日付の演算、再様式化、年・月・日というサブコンポーネントへの分解を含む、もっと多くのことができるからです。 次に示すのは、受注表の日付フィールドに対する元々のデフォルトメタデータを抜粋したものです。

     FIELDNAME=XORDAT, ALIAS=XORDAT, USAGE=P9, ACTUAL=P5,
      MISSING=ON, $
    FIELDNAME=XOSDAT, ALIAS=XOSDAT, USAGE=P9, ACTUAL=P5,
      MISSING=ON, $

以下に示すのは、DATECVTと呼ばれるWeb Query関数と一緒にDEFINEを使用した新しい行です。この関数(数ある中の1つです)は、日付情報を1つの数値または文字形式から真の日付フィールドに変更するために使われます。この例の場合、元々のフィールドを8桁のパック十進数からDATE列に変換すると同時に、Titleタグを介して表示名を提供しています。元々の数値フィールドは依然としてメタデータの中にありますが、これら修正された列はYYMDの様式で列を追加します。

DEFINE REQDATE_YYMD/YYMD MISSING ON ALL=DATECVT( XORDAT , 'P8YYMD' , 'YYMD');
  TITLE=‘Requested,Ship,Date’, $
DEFINE SHIPDATE_YYMD/YYMD MISSING ON ALL=DATECVT( XOSDAT, 'P8YYMD' , 'YYMD');
  TITLE=‘Actual,Ship,Date', $

Date列は、使用されている関数または様式文字列に応じて、メタデータ内で様々な方法(MDY=090121, YMD=210901, DMY=01092021, MDYY=09012021, YYMD=20210901) で表わされ得ることに注意することが重要です。実際、追加の書式指定オプションを使って斜線、ダッシュ記号、さらには月あるいは曜日の名称を含めるかさえも指定することができます。メタデータによって、国の考慮事項に基づいた日付の表示あるいはローカライゼーションを標準化できます。

メタデータに基づくレポート

ひとたびメタデータが編集され、保管されると、レポートデザイナーはそれを使えるようになります。InfoAssistレポートデザイナーを起動する最初のステップは、データソースを選択することです。すると、利用可能なフィールドが表示されます。図4のレポートデザイナーのLivePreview内に、利用可能なフィールドのウィンドウ、照会されたデータに並べ替えまたは合計を適用するためにそれらがどう使われているか、そして潜在的なレポートのレイアウトが表示されます。

▲ 図4

結果

実行すると、図5に示すように元々のフィールドとメタデータ内で作成されたフィールドの組み合わせを含んだレポートが結果として生成されます。

▲ 図5

メタデータを使うことで、数多くのご利益が得られます。次回の記事では、メタデータの追加機能およびその活用法について論じます。削減されるものですか?レポートの利用者および新しいレポートを設計するビジネスアナリストが、首尾一貫した定義を見ること、そして予めメタデータに僅かな努力を費やすことで時間を節約できることを願っています。

いいねと思ったらシェア
twitter
facebook
hatena
Db2 for i & SQL活用 虎の巻 目次を見る

この連載は…

Db2 for i & SQL活用 虎の巻
関連記事
【虎の巻】第6回「SQL CASE式のユースケース」
【虎の巻】第6回「SQL CASE式のユースケース」
【虎の巻】第7回「Db2 for i 7.1のSQL配列(前編)」
【虎の巻】第7回「Db2 for i 7.1のSQL配列(前編)」
【虎の巻】第8回「Db2 for i 7.1のSQL配列(後編)」
【虎の巻】第8回「Db2 for i 7.1のSQL配列(後編)」
あなたにオススメの連載
できるIBM i 温故知新編
7記事
できるIBM i 温故知新編
IBM i の”新”必須言語 〜FFRPG入門〜
14記事
IBM i の”新”必須言語 〜FFRPG入門〜
IBM i アプリの第二の柱 OSS
15記事
IBM i アプリの第二の柱 OSS
PAGE TOP