SET_INCLUDED_MODEL プログラムを実行すると、事前定義されたキューブ・ディメンションのモデルへのINCLUDEモデル文の追加、または事前定義されたキューブ・ディメンションのモデルからのINCLUDEモデル文の削除が行われます。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。
パラメータ
SET_INCLUDED_MODELは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。
変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。
キューブ・ディメンションに関連付けられている論理モデルの名前を示すテキスト式。
INCLUDE文を追加するOLAP DML作成のモデルを示すテキスト式。
INCLUDE文を削除するには、NAを指定します。
例
例10-118 OLAPキューブの静的および動的モデルの作成
my_cubeという名前のOLAPキューブをディメンション化する、my_timeという名前のOLAPキューブ・ディメンションが作成されているとします。my_cube内には、2つのメジャー(salesおよびmoving_sales)があります。次に、my_cubeの静的および動的モデルを作成します。
静的モデルを作成するには、次のPL/SQL文を実行して、setup_pre_modelという名前のユーザー作成のOLAP DMLプログラムを実行します。
exec dbms_aw.execute('call my_util_aw!setup_pre_model');
次のsetup_pre_modelプログラムの定義からわかるように、モデルは実際にはSET_INCLUDED_MODELプログラムを使用して定義され、ADD_CUBE_MODELプログラムを使用して追加されます。これらのプログラムはどちらもOLAP DMLから提供されるプログラムです。
DEFINE SETUP_PRE_MODEL PROGRAM
PROGRAM
VARIABLE _pre_model text
VARIABLE _aw_dim text
_pre_model = 'my_aw!my_pre_model'
_aw_dim = OBJORG(DIM 'my_time')
DEFINE &_pre_model model
CONSIDER &_pre_model
MODEL JOINLINES(JOINCHARS('dimension ' _aw_dim) -
JOINCHARS(_aw_dim '(\'L3_3\')=10') -
'end')
CALL SET_INCLUDED_MODEL('my_time', 'pre_model', _pre_model)
CALL ADD_CUBE_MODEL('my_cube', 'my_time', 'pre_model', YES)
END
次のPL/SQL文を実行して、my_timeディメンションをロードし、my_cubeをロードして解決します。
exec dbms_cube.build('MY_CUBE');
これで、次の文を発行することにより、静的モデルを使用したsalesおよびmoving salesの初期値についてのレポートを生成できます。
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_1 14 14 L2_1 12 12 L2_2 2 14 L3_1 1 1 L3_2 1 2 L3_3 10 11 L3_4 1 11 L3_5 1 2 8 rows selected.
L1_2 = (L2_2' * 2)となる動的モデルを作成するには、次のPL/SQL文を実行して、SETUP_POST_MODELという名前のユーザー作成のOLAP DMLプログラムをコールします。
exec dbms_aw.execute('call my_util_aw!setup_post_model');
次に示すユーザー作成のsetup_post_modelプログラムの定義からわかるように、モデルは実際にはSET_INCLUDED_MODELプログラムを使用して定義され、ADD_CUBE_MODELプログラムを使用して追加されます。これらのプログラムはどちらもOLAP DMLから提供されるプログラムです。
DEFINE SETUP_POST_MODEL PROGRAM
PROGRAM
VARIABLE _post_model text
VARIABLE _aw_dim text
VARIABLE _start_date text
VARIABLE _timespan text
VARIABLE _member text
_post_model = 'my_aw!my_post_model'
_aw_dim = OBJORG(DIM 'my_time')
_start_date = OBJORG(ATTRIBUTE 'my_time' 'start_date')
_timespan = OBJORG(ATTRIBUTE 'my_time' 'timespan')
_member = 'L1_0'
DEFINE &_post_model model
CONSIDER &_post_model
MODEL JOINLINES( -
JOINCHARS('dimension ' _aw_dim) -
JOINCHARS(_aw_dim '(\'' _member '\')=' _aw_dim '(\'L2_2\')*2') -
'end')
CALL SET_INCLUDED_MODEL('my_time', 'post_model', _post_model)
CALL ADD_CUBE_MODEL('my_cube', 'my_time', 'post_model', NO)
" Add _member to the dimension
CALL ADD_DIMENSION_MEMBER(_member, 'my_time', NA, 'L1', NA, NO)
CALL UPDATE_ATTRIBUTE_VALEU(_member, 'my_time', 'start_date', -
&_start_date(&_aw_dim 'L1_1')-365, NO)
CALL UPDATE_ATTRIBUTE_VALUE(_member, 'my_time', 'timespan', -
&_timespan(&_aw_dim 'L1_1'))
UPDATE
COMMIT
END
次の文を実行して、my_time、salesおよびmoving_salesの新しい値についてのレポートを生成します。
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 4 4
L1_1 14 18
L2_1 12 12
L2_2 2 14
L3_1 1 1
L3_2 1 2
L3_3 10 11
L3_4 1 11
L3_5 1 2
9 rows selected.