ディメンション構築での生成参照
共通ブランチを占有するEssbaseディメンション・メンバーは、同じ世代にあります。世代1はディメンション名で、下位レベルごとに世代番号が増分されます。トップダウン・ソースからディメンションを構築する場合は、「世代」構築方法を使用します。ソース・データにNULLが含まれている場合は、「プロセス生成NULL」作成方法を使用します。
トップダウンのデータ・ソースは、左から右の順に、最上位レベルから最下位レベルへと編成されます。各レコードは最も全般的な情報から始まり、より詳細な情報へと進みます。新規メンバーの名前は、レコードの末尾にあります。トップダウンのデータソースを使用する場合、世代参照の構築方法を使用します。ルール・ファイルに、世代番号とデータソースの各フィールドのフィールド・タイプを指定します。
Essbaseではディメンション内のメンバーに対し、そのディメンション内でのメンバーの階層的な位置に従って番号が付けられます。この盆号を世代参照と呼びます。ディメンションは常に世代1です。特定のディメンションの同じ分岐にあるすべてのメンバーを世代と呼びます。世代には、ディメンション(ディメンション1)を基準とした位置に従って、トップダウンで番号が付けられます。
たとえば、次に示すように、Productディメンションは世代1です。Productのメンバーである100は世代2で、100のメンバーである100-10などは世代3です。世代参照の構築方法を使用するには、ルール・ファイルに世代参照番号を指定します。
図14-1世代

Productディメンションを含むキューブを想定します。ディメンションは世代1であるため、Productは世代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
通常、前述のように最下位レベルのメンバーが右から左に順序付けられている場合は、「世代」構築方法を使用してディメンション構築を実行します。
次のルールを使用すると、世代参照を使用したディメンションを構築できます。このルールにより、データ・ソース内の各フィールドに世代番号を指定します。ソース・データにNULLが含まれていないかぎり、ルールのディメンション・プロパティで「生成」作成方法も選択する必要があります(そのユース・ケースについては、後述の「空のフィールドの処理」を参照してください)。

Essbaseは、データ・ソースとルールから次の階層を構築します。
図14-2世代参照

空フィールドの処理
ソース・データの世代参照またはレベル参照からディメンションを作成する場合は、NULL値を処理することを選択できます。nullの処理により、データソースで空フィールドが検出されたときに実行するEssbaseのアクションが指定されます。
ノート:
NULL処理オプションは、通常のディメンション構築ルール(索引ベースではない)にのみ使用できます。nullの処理が有効になっていない場合は、null値を持つすべてのレコードがEssbaseによって拒否され、エラー・ログにエラーが書き込まれます。
null処理を有効にするには、新しい次元構築ルールの作成時に、「プロセス生成NULL」または「プロセス・レベルNULL」でNULLを処理する構築方法のいずれかを選択します。

Process generation nullビルド・メソッドを使用する場合、ソース・データの生成参照を処理する際に、EssbaseにNULL値を予期するように指示します。これは、エラーの防止に役立ちます。
例
このディメンション構築の例では、Sample Basicの新しいチャネル・ディメンションに次のような不規則/非対称階層を追加するとします。

データ・ソースはトップダウンです。つまり、上位レベル(上位ディメンション・メンバーに近い)が各レコードの先頭に表示されます。したがって、世代参照構築方法を使用することは理にかなっています。ただし、null処理命令が必要です。間接チャネルのロケーション・データがないため、最初の3つのソース・データ・レコードにはnullフィールドが含まれています。
"All Channels",Indirect,,Channel-04
"All Channels",Indirect,,Channel-07
"All Channels",Indirect,,Channel-24
"All Channels",Direct,Outlet,Channel-21
"All Channels",Direct,Mall,Channel-29
"All Channels",Direct,Kiosk,Channel-31Process generation null作成方法を使用して、ディメンションを構築し、NULLに関連するエラーを回避するルールを作成できます。
この例のルールを作成するには、次のようにします。
-
Essbaseサーバー上のファイル・カタログにあるギャラリから利用可能なアプリケーション・ワークブックを使用して、Sample Basicキューブをインポート/構築します。
-
次に示すようなカンマ区切りのデータ・ファイルを作成して、
genchannel.txtという名前を付けて、Sample Basicキューブ・ディレクトリにアップロードします。"All Channels",Indirect,,Channel-04 "All Channels",Indirect,,Channel-07 "All Channels",Indirect,,Channel-24 "All Channels",Direct,Outlet,Channel-21 "All Channels",Direct,Mall,Channel-29 "All Channels",Direct,Kiosk,Channel-31 -
「アプリケーション」ページでアプリケーションを開き、データベース(キューブ)を開きます。
-
「スクリプト」タブを選択して、「ルール」をクリックします。

-
「作成」をクリックして、「ディメンション構築(標準)」を選択します。

-
「新規ルール」ダイアログで、次のように操作します。
-
ルール名を入力します(例: genchannel)。
-
「ソース・タイプ」で「ファイル」を選択し、「カタログ」をクリックして
genchannel.txtにナビゲートします。「カタログ」をクリックすると、ファイルはデフォルトでEssbaseサーバーのキューブ・ディレクトリに配置されるため、Essbase Webインタフェースの「ファイル」セクションを使用してすでにアップロード済である必要があります。ファイルがクライアント・マシン上にある場合は、「ファイル・ブラウザ」をクリックしてファイルを検索します。
-
「ヘッダー・レコード番号」および「ディメンション構築レコード番号」フィールドは0のままにします。ヘッダー・レコードは、ディメンションの構築には役立ちません。
-
「続行」をクリックします。
-
ディメンション構築ルールは、未定義のフィールドと、フィールドの下のグリッドに移入されたプレビュー・データ(テキスト・ファイルからのデータ)とともに表示されます。

-
-
これは新しいルールであるため、ディメンションはまだ関連付けられていません。
- 「ディメンション」をクリックします。

- 新しいディメンション名Channelを入力し、「追加」をクリックします。
- 「ディメンション」をクリックします。
-
次に、構築方法を定義し、他のディメンション構築操作手順を確認する必要があります。ディメンション・プロパティを編集するには、「チャネル」リンクをクリックします。
-
「作成方法」を「プロセス生成NULL」に変更します。

「OK」をクリックします。
-
フィールド1の「ディメンション」セレクタをクリックし、「チャネル」を選択します。

-
フィールド1の「タイプ」セレクタを「世代」に変更します。
-
「すべてのチャネル」階層メンバーがレベル2にあるため、「世代」を2に増分します。世代1のメンバーは常にディメンション名であり、この場合はチャネルです。
-
フィールド2から4で、「チャネル」がディメンションとして選択されるようになりました。「タイプ」セレクタを「生成」に変更し、生成番号をフィールド2の場合は3、フィールド3の場合は4、フィールド4の場合は5としてマークします。
![この図は、プロセス生成NULL構築方法を使用して、不規則階層を持つチャネル・ディメンションを作成するルールを示しています。フィールド1は[チャネル]、[世代]、[2]として定義され、全てのチャネルが含まれます。フィールド2はChannel、Generation、3として定義され、3つのレコードの場合はIndirect、3つのレコードの場合はDirectが含まれます。フィールド3はChannel、Generation、4として定義され、3つのnullフィールドと3つの場所フィールド(Outlet、MallおよびKiosk)が含まれます。フィールド4は、Channel、Generation、5として定義され、チャネルIDが含まれます。 この図は、プロセス生成NULL構築方法を使用して、不規則階層を持つチャネル・ディメンションを作成するルールを示しています。フィールド1は[チャネル]、[世代]、[2]として定義され、全てのチャネルが含まれます。フィールド2はChannel、Generation、3として定義され、3つのレコードの場合はIndirect、3つのレコードの場合はDirectが含まれます。フィールド3はChannel、Generation、4として定義され、3つのnullフィールドと3つの場所フィールド(Outlet、MallおよびKiosk)が含まれます。フィールド4は、Channel、Generation、5として定義され、チャネルIDが含まれます。](img/genref-nulls.png)
-
ルールを検証してから、保存して閉じます。エラーがある場合は、「有効なディメンション構築ルール・ファイルの要件」を参照してください。
-
ディメンション構築ジョブを実行します。
-
アウトラインを表示して、チャネル・ディメンションおよびメンバーの予期される階層が追加されたことを確認します。
生成ベースのディメンション構築のNull処理フロー
nullの処理が有効な場合は、Essbaseによりnullが次の方法で処理されます。
-
NULL生成フィールド: Essbaseで世代フィールドが想定される場所にnullが出現した場合、Essbaseによって次の世代フィールドが昇格され、欠落フィールドが置き換えられます。
例
ディメンション構築では、世代4にNULLが含まれているため、チャネルIDが世代5ではなく世代4に昇格します。

-
セカンダリ・フィールドの前のnullフィールド:セカンダリ・フィールドの直前にnullが出現した場合、Essbaseではセカンダリ・フィールドが無視されます。(セカンダリ・フィールド・タイプには、別名、プロパティ、式、重複した世代、重複した世代の別名、通貨名、通貨のカテゴリ、属性の親、UDAおよび属性ディメンションの名前があります。)
例
ディメンション構築では、ジェネレーション4にnullが含まれ、チャネルIDがジェネレーション5ではなくジェネレーション4に昇格するため、フィールド4のエイリアスは無視されます。

-
セカンダリ・フィールドのNULL: Essbaseでセカンダリ・フィールドが想定される場所にnullが出現した場合、Essbaseではセカンダヌルフィールドが無視され、ロードが続行されます(これはGenerationビルド・メソッドの場合と同じ動作です)。
例
ディメンション構築では、フィールド4の別名が無視されます。このフィールドにはNULLが含まれているためです。メンバー・アウトレットは、別名なしでアウトラインに追加されます。
