ディメンション構築でのレベル参照

レベルはボトムアップ階層から定義され、リーフ・メンバーはレベル0で、ディメンション名に近い各ステップはレベルを1ずつ増分します。ボトムアップ・ソースからEssbaseディメンションを構築する場合は、Level構築方法を使用します。ソース・データにNULLが含まれている場合は、プロセス・レベルのNULL作成方法を使用します。

ボトムアップのデータソースでは、各レコードにより、特定のディメンションの単一のメンバーが定義されます。定義はメンバーに関する最も詳細な情報から始まり、より全般的な情報になっていきます。通常、レコードでは新規メンバーの名前が指定され、さらにそのメンバーの親の名前、親の親の名前と続き、以降も同様に指定されます。

たとえば、次に示すアウトラインでは、最下位レベルのメンバーがProductディメンションの分岐の最下部にあります。

図14-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次元に追加します。このルールでは、データ・ソースの各フィールドに対してレベル番号およびフィールド・タイプを指定します。ソース・データにNULLが含まれていないかぎり、ルールのディメンション・プロパティで「レベル」構築方法も選択する必要があります(そのユース・ケースについては、後述の「空のフィールドの処理」を参照してください)。

レベル構築のディメンション構築ルール

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

図14-4レベル


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

空フィールドの処理

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

ノート:

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

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

null処理を有効にするには、新しい次元構築ルールの作成時に、ディメンション・プロパティでnull処理構築方法のいずれかを選択します。


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

Process level nullビルド・メソッドを使用する場合、ソース・データ内のレベル参照を処理する際に、EssbaseにNULL値を予期するように指示します。これにより、エラーの防止に役立ちます。

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


チャネル・ディメンションには、メンバーの深さが4レベルあります。チャネルIDはレベル0です。間接チャネルIDの上には3つのレベルのメンバーがあり、直接チャネルIDの上には4つのレベルのメンバーがあり、これは不均衡/不規則な階層になります。

データ・ソースはボトムアップです。つまり、各レコードの最下位レベルが最初に表示されます。したがって、レベル参照構築方法を使用することは理にかなっています。ただし、null処理命令が必要です。間接チャネルのロケーション・データがないため、最初の3つのソース・データ・レコードにはnullフィールドが含まれています。

Channel-04,,Indirect,"All Channels"
Channel-07,,Indirect,"All Channels"
Channel-24,,Indirect,"All Channels"
Channel-21,Outlet,Direct,"All Channels"
Channel-29,Mall,Direct,"All Channels"
Channel-31,Kiosk,Direct,"All Channels"

プロセス・レベルNULL構築方法を使用して、ディメンションを構築し、NULLに関連するエラーを回避するルールを作成できます。

この例のルールを作成するには、次のようにします。

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

  2. 次に示すようなカンマ区切りのデータ・ファイルを作成して、levchannel.txtという名前を付けて、Sample Basicキューブ・ディレクトリにアップロードします。

    Channel-04,,Indirect,"All Channels"
    Channel-07,,Indirect,"All Channels"
    Channel-24,,Indirect,"All Channels"
    Channel-21,Outlet,Direct,"All Channels"
    Channel-29,Mall,Direct,"All Channels"
    Channel-31,Kiosk,Direct,"All Channels"
  3. ホーム・ページでアプリケーションを開き、データベース(キューブ)を開きます

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


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

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


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

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

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

    2. 「ソース・タイプ」「ファイル」を選択し、「カタログ」をクリックしてlevchannel.txtにナビゲートします。

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

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

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

    5. ディメンション構築ルールは、未定義のフィールドと、フィールドの下のグリッドを移入した(テキスト・ファイルからの)プレビュー・データとともに表示されます。
      新しいルール「levchannel」のディメンション構築ルール・エディタ。未定義のフィールド1から4がメタデータ列として入力待機中です。各フィールドの下には、ソース・データ・ファイルからインポートされたデータ値があります。

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

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

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

  9. 「作成方法」「プロセス・レベルNULL」に変更します。


    プロセス・レベルがnullが選択されたディメンション構築ルール・エディタの「ディメンションの編集」ウィンドウ。

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

  10. フィールド1の「ディメンション」セレクタをクリックし、「チャネル」を選択します。
    ディメンション構築ルール・エディタのフィールド1で、データが移入され、チャネル・ディメンションが選択されている。

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

  12. チャネルIDがレベル0であるため、「レベル」を0に増やします。

  13. フィールド2から4で、「チャネル」がディメンションとして選択されるようになりました。「タイプ」セレクタを「レベル」に変更し、レベル番号をフィールド2の場合は1、フィールド3の場合は2、フィールド4の場合は3としてマークします。


    プロセス・レベルのNULL構築方法を使用して、不規則階層を持つチャネル・ディメンションを作成するディメンション構築ルール。フィールド1は、チャネル、レベル、0として定義され、チャネルIDが含まれます。フィールド2はChannel、Level、1として定義され、3つのnullフィールドと3つの場所フィールド(Outlet、MallおよびKiosk)が含まれます。フィールド3は、3つのレコードの場合は「チャネル」、「レベル」、「2」および「間接」、3つのレコードの場合は「直接」として定義されます。フィールド4はChannel、Level、3として定義され、All Channelsが含まれます。

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

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

  16. アウトラインを表示して、チャネル・ディメンションおよびメンバーの予期される階層が追加されたことを確認します。

レベルベースのディメンション構築のNull処理フロー

nullの処理が有効な場合は、Essbaseによりレベルnullが次のような方法で処理されます。

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

    ディメンション構築では、レベル1のフィールド2にNULLが含まれているため、レベル2ではなくレベル1に間接が配置されます。


    フィールド1はチャネル、レベル0で、最初の行にチャネルIDが含まれています。フィールド2はチャネルで、レベル1には最初の行にnullが含まれています。フィールド3はチャネル・レベル2で、最初の行に間接が含まれています。フィールド4はチャネル、レベル3で、すべてのチャネルが含まれています。

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

    フィールド2にNULLが含まれているため、ディメンション構築ではフィールド3の別名が無視されます。Essbaseによって、間接がレベル1に配置され、すべてのチャネルがレベル2に配置されます。


    フィールド1はチャネルで、レベル0にはチャネルIDが含まれます。フィールド2はChannelで、レベル1にはnullが含まれます。フィールド3は、カタログを含むチャネル別名です。フィールド4はチャネル、レベル2で、間接を含みます。フィールド5はChannel、レベル3はAll Channelsです。

  • Nullセカンダリ・フィールド: Essbaseでセカンダリ・フィールドが想定される場所にnullが出現した場合、Essbaseではセカンダリーのnullフィールドが無視され、ロードが続行されます(これはLevelビルド・メソッドの場合と同じ動作です)。

    ディメンション構築では、フィールド3の最初の別名は無視されます。これは、そのフィールドにNULLが含まれているためです。メンバー・アウトレットは、別名なしでアウトラインに追加されます。


    フィールド1はチャネルで、レベル0にはチャネルIDが含まれます。フィールド2はチャネル、レベル1は最初の行にアウトレット、次の2行のモールとキオスクです。フィールド3はチャネル別名で、最初の行にnullが含まれ、次の2行にいくつかの別名が含まれます。フィールド4はチャネル・レベル2で、すべての行にDirectが含まれます。フィールド5はChannel、レベル3で、すべての行にAll Channelsが含まれます。