UPDATE_DIMENSION_MEMBERプログラムを実行すると、1つ以上の階層でOLAPキューブ・ディメンション・メンバーのレベルと親が設定されます。
注意: キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。 |
構文
CALL UPDATE_DIMENSION_MEMBER(member_id, logical_dim, hier_list, level_name, -
parent-member_id [, auto_compile ])
パラメータ
UPDATE_DIMENSION_MEMBERは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。
レベルと親の情報を設定するメンバーを示すテキスト式。
変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。
ディメンション・メンバーのレベルと親を設定する全階層のOracleデータ・ディクショナリ名で構成された複数行のテキスト式。1行ごとに1つの階層を指定します。
キューブ・ディメンションの全階層でメンバーの情報を指定する場合は、NA
を指定します。
レベル階層の場合に、プログラムによってキューブ・ディメンションのメンバーが設定される階層レベルを指定するテキスト値。レベル階層の場合、level_nameに指定する値は、次の条件を満たしている必要があります。
parent_member_idに指定する値と互換性があること。
既存のキューブ・ディメンション・メンバーと同じ階層レベルであること(キューブ・ディメンション・メンバーはすべての階層で同じレベルに追加する必要があります)。
メンバーが値階層に含まれている場合(つまりレベルが存在しない場合)は、NA
を指定します。
キューブ・ディメンションの階層に追加するディメンション・メンバーの親メンバーの値を指定するテキスト式。ディメンション・メンバーを最上位メンバーとして追加する場合は、NA
を指定します。
変更をすぐに有効にするかどうかを指定するブール式。デフォルト値であるTRUE
を指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーに追加する必要のあるものはすべて即座に更新されます。パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前(たとえば、属性値が下位レベルに広がる前や時間ディメンションの値セットを更新する前など)に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。
例
例10-170 OLAPキューブ・ディメンションの階層の変更
my_time
という階層キューブ・ディメンションがあり、その階層を変更するために値L3_2を最上位レベルからL2_2の子になるレベルに移動するとします。
次のSQL文を実行して、移動前のmy_time
キューブ・ディメンションの値についてレポートを生成します。
select dim_key||' '||level_name||' '||parent from my_time_lvl_hier_view order by dim_key asc; DIM_KEY||''||LEVEL_NAME||''||PARENT -------------------------------------------------------------------------------- L1_0 L1 L1_1 L1 L2_1 L2 L1_1 L2_2 L2 L1_1 L3_1 L3 L2_1 L3_2 L3 L2_1 L3_3 L3 L2_1 L3_4 L3 L2_2 L3_5 L3 L2_2 9 rows selected.
次のPL/SQL文を発行し、ユーザー作成のMOVE_L3_3プログラムをコールして移動を実行します。
exec dbms_aw.execute('call my_util_aw!move_l3_3');
次に示すMOVE_L3_3プログラムの定義から確認できるように、実際の移動はOLAP DMLから提供されるPDATE_DIMENSION_MEMBERプログラムをコールすることで実行されます。
DEFINE MOVE_L3_3 PROGRAM PROGRAM " Change the parent of L3_2 to L2_2 CALL UPDATE_DIMENSION_MEMBER('L3_3', 'my_time', NA, 'L3', 'L2_2') UPDATE C0MMIT END
次の文を発行して、移動後のmy_timeディメンションの値についてレポートを生成します。
select dim_key||' '||level_name||' '||parent from my_time_lvl_hier_view order by dim_key asc; DIM_KEY||''||LEVEL_NAME||''||PARENT -------------------------------------------------------------------------------- L1_0 L1 L1_1 L1 L2_1 L2 L1_1 L2_2 L2 L1_1 L3_1 L3 L2_1 L3_2 L3 L2_1 L3_3 L3 L2_2 L3_4 L3 L2_2 L3_5 L3 L2_2 9 rows selected.
次の文を発行し、my_time
の新しい階層でmy_cube
を解決します。
exec dbms_cube.build(script => 'MY_CUBE USING (SOLVE)', add_dimensions => false);
my_time
の階層が新しくなったので、次の文を発行して、sales
およびmoving_sales
(my_cube
のメジャー)の値に関するレポートを生成します。
select my_time||' '||lpad(sales, 2)||' '||lpad(moving_sales, 2) from my_cube_view order by my_time asc; MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2) -------------------------------------------------------------------- L1_0 24 24 L1_1 14 38 L2_1 2 2 L2_2 12 14 L3_1 1 1 L3_2 1 2 L3_3 10 11 L3_4 1 11 L3_5 1 2 9 rows selected.