ディメンション構築での世代参照
共通ブランチを占有している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の処理」)を選択します。

「世代nullの処理」構築方法を使用する場合は、ソース・データ内の世代参照の処理中にnull値を想定するように、Essbaseが指示されます。これは、エラーの防止に役立ちます。
例
このディメンション構築の例では、次のような不規則/非対称階層をSample Basic上の新しいChannelディメンションに追加するとします。

データ・ソースはトップダウンです。つまり、上位レベル(上位ディメンション・メンバーに近い)が各レコードで最初に表示されます。したがって、世代参照の構築方法を使用することが理にかなっています。ただし、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-31
「世代nullの処理」構築方法を使用して、ディメンションを構築しnullに関連するエラーを防ぐルールを作成できます。
この例のルールを作成するには、
-
Sample Basicキューブをインポートまたは構築します。その際には、Essbaseサーバーにあるファイル・カタログ内のギャラリから入手可能な、アプリケーション・ワークブックを使用します。
-
次のようなカンマ区切りのデータファイルを作成し、それに
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を入力し、「追加」をクリックします。
- 「ディメンション」をクリックします。
-
次は、構築方法を定義し、他のディメンション構築操作手順を確認する必要があります。「Channel」リンクをクリックしてそのディメンション・プロパティを編集します。
-
「構築方法」を「世代nullの処理」に変更します。
「OK」をクリックします。
-
フィールド1で「ディメンション」セレクタをクリックし、「Channel」を選択します。
-
フィールド1の「タイプ」セレクタを「世代」に変更します。
-
All Channels階層メンバーがレベル2であるため、「世代」を2に増やします。世代1メンバーは、必ずディメンション名です。この場合、Channelです。
-
フィールド2から4で、「Channel」がディメンションとして選択されるようになりました。「タイプ」セレクタを「世代」に変更し、世代番号をフィールド2で3、フィールド3で4、フィールド4で5としてマークします。
-
ルールを検証してから、保存して閉じます。エラーがある場合は、「有効なディメンション構築ルール・ファイルの要件」を参照してください。
-
ディメンション構築ジョブを実行します。
-
アウトラインを表示して、Channelディメンションおよび想定されているメンバー階層が追加されたことを確認します。
世代ベースのディメンション構築の場合の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によってセカンダリのnullフィールドが無視され、ロードが続行されます(これは、「世代」構築方法の場合と同じ動作です)。
例
このディメンション構築では、フィールド4にある別名は無視されます。このフィールドにはnullが含まれているためです。メンバーOutletは、別名なしでアウトラインに追加されます。