生成参照の使用
データのトップダウン・ソースは、左から右に、最上位レベルから最下位レベルの順に編成されます。 各レコードは、最も一般的な情報から始まり、最も具体的な情報に進みます。 新規メンバーの名前はレコードの末尾にあります。 データのトップダウン・ソースを使用する場合は、生成参照の構築メソッドを使用します。 ルール・ファイルで、データのソースの各フィールドの世代番号とフィールド・タイプを指定します。
Essbaseは、ディメンション内のメンバーの階層位置に従って、ディメンション内のメンバーに番号を付けます。 これらの番号は「生成参照」と呼ばれます。 ディメンションは常に世代1です。 ディメンション内の同じブランチにあるすべてのメンバーは、generationと呼ばれます。 世代には、ディメンションに対する相対位置(ディメンション1に対する相対位置)に従って、トップダウンで番号が付けられます。
たとえば、次に示すように、Productディメンションは世代1です。 Productには、世代2の100のメンバーがあります。100には、世代3の100-10などのメンバーがあります。 生成参照の作成メソッドを使用するには、ルール・ファイルで生成参照番号を指定します。
図15-1 世代

Productディメンションを持つキューブがあるとします。 ディメンションは世代1であるため、製品は世代1です。 次のトップダウンのタブ区切りデータ・ファイルを使用してProductディメンションを構築するとします:
500 500-10 500-10-10
500 500-10 500-10-20
500 500-20 500-20-12
500 500-20 500-20-15
500 500-20 500-20-20
次のルール・ファイルを使用すると、世代参照を使用してディメンションを構築できます。 ルール・ファイルは、データのソースの各フィールドの世代番号を指定します。

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

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