UPDATE_ATTRIBUTE_VALUEプログラムを実行すると、OLAPキューブ・ディメンション・メンバーの属性が変更されます。
このプログラムは、次のような属性を更新する場合に特に役立ちます。
基礎となるリレーションまたは索引付けされたディメンションを持つ属性では、指定する必要があるのはディメンション・メンバーと値のみです。索引付けされたディメンションの管理は、リレーション内での値の設定とともに行われます。
複数のレベルに適用される属性。すべてのレベルに適用される属性に対して属性値を設定した場合、その値はコンパイル時に下位レベルに広がります。
注意: キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。 |
パラメータ
UPDATE_ATTRIBURE_VALUEは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。
属性を変更するキューブ・ディメンション・メンバーの値を示すテキスト式。
dim_member_idがメンバーとなっているキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。
属性のOracleデータ・ディクショナリ名を示すテキスト式。
attribute_nameの値を指定するテキスト式。
関連するアナリティック・ワークスペース・オブジェクトを即時更新するかどうかを指定するブール式。
デフォルト値はTRUE
です。この値を指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーの属性の更新に必要のあるものはすべて即座に更新されます。
パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。
注意: この引数に対して指定した値に関係なく、ディメンション・メンバーの属性は常に即時更新されます。これは、コンパイル中にエラーが通知された場合でも同様です。 |
例
例10-169 OLAPキューブ・ディメンションの属性の更新
この例では、OLAP DMLで提供されているUPDATE_ATTRIBUTE_VALUEプログラムを使用し、L1-2およびL1-2の子孫に対してmy_time
キューブ・ディメンションの属性を更新します。OLAP DMLで提供されているUPDATE_ATTRIBUTE_VALUEプログラムへのコールは、ユーザー作成のADD_L1_2_DATE
というOLAP DMLプログラム内にあります。
次のPL/SQL文を発行して、ADD_L1_2_DATE
というユーザー作成のOLAP DMLプログラムを実行し、L1_2
およびその子孫のtime
属性値を設定します。
exec dbms_aw.execute('call my_util_aw!add_l1_2_dates');
ユーザー作成のOLAP DMLプログラムADD_L1_2_DATE
の定義を次に示します。OLAP DMLから提供されるUPDATE_ATTRIBUTE_VALUEプログラムへのコールに注意してください。
DEFINE ADD_L1_2_DATES PROGRAM PROGRAM VARIABLE _aw_dim text VARIABLE _start_date text VARIABLE _timespan text _aw_dim = OBJORG(DIM 'my_time') _start_date = OBJORG(ATTRIBUTE 'my_time' 'start_date') _timespan = OBJORG(ATTRIBUTE 'MY_TIME' 'timespan') " Updates the time attribute of L1_2, L2_3, L3_6, but does not compile CALL UPDATE_ATTRIBUTE_VALUE('L1_2', 'my_time', 'start_date', - &_start_date(&_aw_dim 'L1_1')+365, NO) CALL UPDATE_ATTRIBUTE_VALUE('L1_2', 'my_time', 'timespan', - &_timespan(&_aw_dim 'L1_1'), NO) CALL UPDATE_ATTRIBUTE_VALUE('L2_3', 'my_time', 'start_date', - &_start_date(&_aw_dim 'L1_2'), NO) CALL UPDATE_ATTRIBUTE_VALUE('L2_3', 'my_time', 'timespan', - &_timespan(&_aw_dim 'L2_1'), NO) CALL UPDATE_ATTRIBUTE_VALUE('L3_6', 'my_time', 'start_date', - &_start_date(&_aw_dim 'L1_2'), NO) CALL UPDATE_ATTRIBUTE_VALUE('L3_6', 'my_time', 'timespan', - &_timespan(&_aw_dim 'L3_1'), NO) UPDATE COMMIT END
次のSQL文を発行して、my_time
キューブ・ディメンションの属性を確認します。
select dim_key||' '||start_date||' '||lpad(timespan, 3) from my_time_view order by dim_key asc; DIM_KEY||''||START_DATE||''||LPAD(TIMESPAN,3) ---------------------------------------------------------------------------- L1_0 01-JAN-09 365 L1_1 01-JAN-10 365 L1_2 01-JAN-11 365 L2_1 01-JAN-10 90 L2_2 01-APR-10 61 L2_3 01-JAN-11 90 L3_1 01-JAN-10 31 L3_2 01-FEB-10 28 L3_3 01-MAR-10 31 L3_4 01-APR-10 30 L3_5 01-MAY-10 31 L3_6 01-JAN-11 31 12 rows selected.
次のSQL文を発行して、my_time
キューブ・ディメンションのコンパイル前のsales
およびmoving_sales
メジャーの値に関するレポートを生成します。メジャーの計算ではmy_time
キューブ・ディメンションの新しい属性が計算対象とならないことに注意します。
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 27 L1_1 14 38 L1_2 3 3 L2_1 2 5 L2_2 12 14 L2_3 3 3 L3_1 1 4 L3_2 1 2 L3_3 10 11 L3_4 1 11 L3_5 1 2 L3_6 3 3 12 rows selected.
次のSQL文を発行し、my_time
キューブ・ディメンションをコンパイルします。
exec dbms_cube.build('MY_TIME USING (COMPILE)');
次のSQL文を発行して、my_time
キューブ・ディメンションのコンパイル後のsales
およびmoving_sales
メジャーの値に関するレポートを生成します。今回のメジャーの計算ではmy_time
キューブ・ディメンションの新しい属性が計算対象となることに注意します。
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 L1_2 3 17 L2_1 2 2 L2_2 12 14 L2_3 3 15 L3_1 1 1 L3_2 1 2 L3_3 10 11 L3_4 1 11 L3_5 1 2 L3_6 3 4 12 rows selected.