ディメンション構築での世代参照

共通ブランチを占有している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が含まれている場合を除き(そのユースケースについては、後述の「空のフィールドの処理」を参照)、ルールのディメンション・プロパティで「世代」構築方法も選択する必要があります。

世代構築のためのルール・ファイルフィールド1: Product、Categoryという名前の世代2。フィールド2: Product、Product SKUという名前の世代3。フィールド3: Product、Promotionsという名前の世代4。

Essbaseは、データ・ソースとルールから次の階層を構築します。

図14-2 世代参照


このイメージは、世代の構築中に作成される新規メンバーを示しています。

空フィールドの処理

ソース・データ内の世代参照またはレベル参照からディメンションを構築するときは、null値を処理するように選択できます。null処理により、データのソース内で空フィールドが検出されたときにEssbaseで実行される必要があるアクションを指定します。

ノート:

null処理オプションは、通常のディメンション構築ルール(索引ベースではない)の場合のみ使用できます。

nullの処理が有効になっていない場合は、null値を持つすべてのレコードがEssbaseによって拒否され、エラー・ログにエラーが書き込まれます。

null処理を有効にするには、新しいディメンション構築ルールの作成時に、「ディメンション・プロパティ」でnullを処理する構築方法のいずれか(「世代nullの処理」または「レベルnullの処理」)を選択します。


新しいルールの「ディメンション・プロパティ」にあるNullを処理する構築方法

「世代nullの処理」構築方法を使用する場合は、ソース・データ内の世代参照の処理中にnull値を想定するように、Essbaseが指示されます。これは、エラーの防止に役立ちます。

このディメンション構築の例では、次のような不規則/非対称階層をSample Basic上の新しいChannelディメンションに追加するとします。


Channelディメンションは世代1です。

データ・ソースはトップダウンです。つまり、上位レベル(上位ディメンション・メンバーに近い)が各レコードで最初に表示されます。したがって、世代参照の構築方法を使用することが理にかなっています。ただし、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に関連するエラーを防ぐルールを作成できます。

この例のルールを作成するには、

  1. Sample Basicキューブをインポートまたは構築します。その際には、Essbaseサーバーにあるファイル・カタログ内のギャラリから入手可能な、アプリケーション・ワークブックを使用します。

  2. 次のようなカンマ区切りのデータファイルを作成し、それに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
    
  3. 「アプリケーション」ページでアプリケーションを開き、データベース(キューブ)を開きます。

  4. 「スクリプト」タブを選択して、「ルール」をクリックします。


    「スクリプト」タブが選択され、Essbase Webインタフェースで「ルール」タイルが強調表示されています。

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


    データベース・スクリプト・ダイアログで、「作成」ボタンが押されていて、「ディメンション構築(標準)」オプションが選択されています

  6. 「新規ルール」ダイアログで、次のように操作します。

    1. ルール名を入力します(例: genchannel)。

    2. 「ソース・タイプ」「ファイル」を選択し、「カタログ」をクリックし、genchannel.txtに移動します。

      「カタログ」をクリックする場合、そのファイルは、デフォルトではEssbaseサーバー上のキューブ・ディレクトリに配置されると想定されているため、Essbase Webインタフェース「ファイル」セクションを使用してすでにアップロードしてある必要があります。そのファイルがクライアント・マシンにある場合は、「ファイル・ブラウザ」をクリックしてそのファイルを特定します。

    3. 「ヘッダー・レコード番号」および「ディメンション構築レコード番号」フィールドは0のままにします。ヘッダー・レコードは、ディメンション構築には役立ちません。

    4. 「続行」をクリックします。

    5. ディメンション構築ルールは、未定義のフィールドと、フィールドの下のグリッドに移入されたプレビュー・データ(テキスト・ファイルからのデータ)とともに表示されます。
      ディメンション構築ルール・エディタで新しいルール

  7. これは新しいルールであるため、ディメンションはまだ関連付けられていません。

    1. 「ディメンション」をクリックします。
      ルール・エディタの「ディメンション」ボタン

    2. 新しいディメンション名Channelを入力し、「追加」をクリックします。
  8. 次は、構築方法を定義し、他のディメンション構築操作手順を確認する必要があります。「Channel」リンクをクリックしてそのディメンション・プロパティを編集します。

  9. 「構築方法」「世代nullの処理」に変更します。


    「世代nullの処理」が選択されている、ディメンション構築ルール・エディタ内の「ディメンションの編集」ウィンドウの図。

    「OK」をクリックします。

  10. フィールド1で「ディメンション」セレクタをクリックし、「Channel」を選択します。


    Channelディメンションが選択されている、ディメンション構築ルール・エディタ内のフィールド1の図。

  11. フィールド1の「タイプ」セレクタを「世代」に変更します。

  12. All Channels階層メンバーがレベル2であるため、「世代」を2に増やします。世代1メンバーは、必ずディメンション名です。この場合、Channelです。

  13. フィールド2から4で、「Channel」がディメンションとして選択されるようになりました。「タイプ」セレクタを「世代」に変更し、世代番号をフィールド2で3、フィールド3で4、フィールド4で5としてマークします。


    この図は、「世代nullの処理」構築方法の使用によって不規則階層があるChannelディメンションを作成するルールを示しています。フィールド1は、「Channel」、「世代」、「2」として定義されており、「All Channels」が含まれています。フィールド2は、「Channel」、「世代」、「3」として定義されており、3つのレコードに「Indirect」、3つのレコードに「Direct」が含まれています。フィールド3は、「Channel」、「世代」、「4」として定義されており、3つのnullフィールドと3つの位置フィールド(Outlet、MallおよびKiosk)が含まれています。フィールド4は、「Channel」、「世代」、「5」として定義されており、チャネルIDが含まれています。

  14. ルールを検証してから、保存して閉じます。エラーがある場合は、「有効なディメンション構築ルール・ファイルの要件」を参照してください。

  15. ディメンション構築ジョブを実行します。

  16. アウトラインを表示して、Channelディメンションおよび想定されているメンバー階層が追加されたことを確認します。

世代ベースのディメンション構築の場合のnull処理フロー

null処理が有効になっている場合は、Essbaseで、次の方法で世代nullが処理されます。

  • null世代フィールド: Essbaseで「世代」フィールドが想定されている位置にnullが出現した場合、Essbaseによって次の「世代」フィールドに昇格されて欠落フィールドが置き換えられます。

    このディメンション構築では、世代4にnullが含まれているため、チャネルIDは世代5ではなく世代4に昇格されます。


    フィールド1は、Channel、世代2であり、All Channelsが含まれています。フィールド2は、Channel、世代3であり、Indirectが含まれています。フィールド3は、Channel、世代4であり、nullが含まれています。フィールド4は、Channel、世代5であり、チャネルIDが含まれています。

  • セカンダリ・フィールドの前のnullフィールド: セカンダリ・フィールドの直前にnullが出現した場合、Essbaseではセカンダリ・フィールドが無視されます。(セカンダリ・フィールド・タイプには、別名、プロパティ、式、重複した世代、重複した世代の別名、通貨名、通貨のカテゴリ、属性の親、UDAおよび属性ディメンションの名前があります。)

    世代4にはnullが含まれており、チャネルIDは世代5ではなく世代4に昇格されるため、このディメンション構築では、フィールド4にある別名が無視されます。


    フィールド1は、Channel、世代2であり、All Channelsが含まれています。フィールド2は、Channel、世代3であり、Indirectが含まれています。フィールド3は、Channel、世代4であり、nullが含まれています。フィールド4は、Channel、別名であり、Catalogが含まれています。フィールド5は、Channel、世代5であり、チャネルIDが含まれています。

  • nullのセカンダリ・フィールド: Essbaseでセカンダリ・フィールドが想定されている位置にnullが出現した場合、Essbaseによってセカンダリのnullフィールドが無視され、ロードが続行されます(これは、「世代」構築方法の場合と同じ動作です)。

    このディメンション構築では、フィールド4にある別名は無視されます。このフィールドにはnullが含まれているためです。メンバーOutletは、別名なしでアウトラインに追加されます。


    フィールド1は、Channel、世代2であり、All Channelsが含まれています。フィールド2は、Channel、世代3であり、Directが含まれています。フィールド3は、Channel、世代4であり、Outletが含まれています。フィールド4は、Channel、別名であり、nullが含まれています。フィールド5は、Channel、世代5であり、チャネルIDが含まれています。