The SET_INCLUDED_MODEL program adds an INCLUDE model statement to a previously-defined cube dimension's model, or deletes an INCLUDE model statement from a previously-defined cube dimension's model. The changes made when this program executes are not transactional; an automatic COMMIT is executed as part of the program.
See also:
"Cube-Aware OLAP DML Statements"Because SET_INCLUDED_MODEL is an OLAP DML program with arguments, you invoke it using the OLAP DML CALL statement.
A text expression that is the Oracle data dictionary name of the cube dimension being modified.
A text expression that is the name of the logical model that is associated with the cube dimension.
A text expression that is the OLAP DML-created model for which you want to add an INCLUDE statement.
See:
CREATE_LOGICAL_MODELTo remove an INCLUDE statement, specify NA.
Example 10-118 Creating Static and Dynamic Models for an OLAP Cube
Assume that you have created an OLAP cube dimension named my_time that dimensions an OLAP cube named my_cube. Within my_cube there are two measures: sales and moving_sales. Now you want to create static and dynamic models for my_cube.
To create a static model, execute the following PL/SQL statement that executes a user-written OLAP DML program named setup_pre_model.
exec dbms_aw.execute('call my_util_aw!setup_pre_model');
As you can see from the following definition of the setup_pre_model program, the model is actually defined using the SET_INCLUDED_MODEL program and added using the ADD_CUBE_MODEL program, both of which are provided with the 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
Load the my_time dimension and load and solve my_cube by executing the following the PL/SQL statement.
exec dbms_cube.build('MY_CUBE');
You can now report on the initial values of sales and moving sales with the static model by issuing the following statement.
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.
To create a dynamic model where L1_2 = (L2_2' * 2) execute the following PL/SQL statement that calls a user-written OLAP DML program named SETUP_POST_MODEL.
exec dbms_aw.execute('call my_util_aw!setup_post_model');
As you can see from the definition of the user-written setup_post_model program shown below, the model is actually defined using the SET_INCLUDED_MODEL program and added using the ADD_CUBE_MODEL program, both of which are provided with the 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
Execute the following statement to report on the new values of my_time, sales and 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.