レベル参照の使用
データのボトムアップ・ソースでは、各レコードによってディメンションの単一メンバーが定義されます。 定義は、メンバーに関する最も具体的な情報から始まり、段階的に一般的な情報を提供します。 一般的なレコードでは、新しいメンバーの名前、その親の名前、その親の親の名前などを指定します。
レベルはボトムアップ階層構造から定義されます。 たとえば、次に示すアウトラインでは、最下位レベルのメンバーはProductディメンションのブランチの下部にあります。
図15-3 世代番号とレベル番号

アウトラインを構築するには、次のボトムアップ・データ・ソースを使用できます:
100-10-12 100-10 100
100-20-12 100-20 100
レベル参照構築では、最下位レベルのメンバーは左から右に順序付けされます。 レベル0 (リーフ・レベル)メンバーは最初のフィールドに、レベル1メンバーは2番目のフィールドに、というように続きます。 この組織は、世代参照用のデータの表示方法(トップダウン)とは反対です。
Productディメンションを持つキューブがあり、次のボトムアップのタブ区切りデータ・ファイルを使用してProductディメンションにさらに製品メンバーを構築するとします。
600-10-11 600-10 600
600-20-10 600-20 600
600-20-18 600-20 600
データのソースはボトムアップで、データのソースの最初の列に新しいリーフ・レベル・メンバー(600-10-11、600-20-10および600-20-18)が含まれます。 2番目の列には新しいメンバーの親(600-10および600-20)が含まれ、3番目の列には親の親(600)が含まれます。
ルール・ファイルでは、レベル参照の構築メソッドを使用してメンバーをProductディメンションに追加します。 ルール・ファイルは、データのソースの各フィールドのレベル番号とフィールド・タイプを指定します。

Essbaseは、データおよびルール・ファイルのソースから次の階層を構築します:
図15-4 レベル

空のフィールドの処理
レベル参照の作成メソッドを使用する場合、NULL値の処理を選択できます。 Null処理では、データのソースで空のフィールド(nullフィールドとも呼ばれる)が検出された場合にEssbaseが実行するアクションを指定します。
NULL処理が有効になっていない場合、EssbaseはNULL値を含むすべてのレコードを拒否し、エラーをエラー・ログに書き込みます。
NULL処理が有効になっている場合、Essbaseは次の方法でNULLを処理します:
-
欠落フィールド: EssbaseでLEVELフィールドが必要な場合にNULLが発生すると、Essbaseは次のLEVELフィールドをプロモートして、欠落しているフィールドを置換します。
次の例では、LEVEL0のProducts列にフィールドはありません:
LEVEL0,Products LEVEL1,Products LEVEL2,Products 100-10 100
Essbaseがレコードを読み取ると、次の例のように、LEVEL1フィールド(100-10)がLEVEL0に、LEVEL2フィールド(100)がLEVEL1にプロモートされます:
LEVEL0,Products LEVEL1,Products LEVEL2,Products 100-10 100
-
セカンダリ・フィールドの前にフィールドがありません: セカンダリ・フィールドの直前にNULLが発生した場合、Essbaseはセカンダリ・フィールドを無視します。 (セカンダリ・フィールド・オプションは、別名、プロパティ、式、重複レベル、重複レベル別名、通貨名、通貨カテゴリ、属性親、UDAおよび属性ディメンションの名前です。)
次の例では、LEVEL0のProducts列にフィールドはありません:
LEVEL0,Products ALIAS0,Products LEVEL1,Products LEVEL2,Products Cola 100-10 100
Essbaseでレコードが読み取られると、ALIAS0フィールドは無視され、LEVEL1フィールド(100-10)がLEVEL0に昇格され、LEVEL2フィールド(100)がLEVEL1に昇格されます。これは、データのソースが次の例のようになっている場合です:
LEVEL0,Products ALIAS0,Products LEVEL1,Products LEVEL2,Products 100-10 Cola 100
-
セカンダリ・フィールドがありません: Essbaseがセカンダリ・フィールドを必要とするnullが発生した場合、Essbaseはセカンダリnullフィールドを無視してロードを続行します。
次の例では、ALIAS0のProducts列にフィールドはありません:
LEVEL0,Products ALIAS0,Products LEVEL1,Products LEVEL2,Products 100-10a 100-10 100
Essbaseは、レコードを読み取るときに、ALIAS0フィールドを無視して他のフィールドをロードします。