Oracle® OLAP Reference 10g Release 2 (10.2) Part Number B14350-01 |
|
|
View PDF |
Several sample queries using OLAP_CONDITION
are shown in Example 29-2. These examples use the PRICE_CUBE
in the GLOBAL
analytic workspace. The cube has a time dimension, a product dimension, and measures for unit cost and unit price.
The examples are based on a view called unit_cost_price_view
. The SQL for creating this view is shown in Example 29-1. For information about creating views of analytic workspaces, see "OLAP_TABLE Overview".
Example 29-1 View of PRICE_CUBE in GLOBAL Analytic Workspace
-- Create the logical row SQL>CREATE TYPE unit_cost_price_row AS OBJECT ( aw_unit_cost NUMBER, aw_unit_price NUMBER, aw_product VARCHAR2(50), aw_product_gid NUMBER(10), aw_time VARCHAR2(20), aw_time_gid NUMBER(10), r2c RAW(32)); -- Create the logical table SQL>CREATE TYPE unit_cost_price_table AS TABLE OF unit_cost_price_row; -- Create the view SQL>CREATE OR REPLACE VIEW unit_cost_price_view AS SELECT aw_unit_cost, aw_unit_price, aw_product, aw_product_gid, aw_time, aw_time_gid, r2c FROM TABLE(OLAP_TABLE( 'global DURATION SESSION', 'unit_cost_price_table', '', 'MEASURE aw_unit_cost FROM price_cube_unit_cost MEASURE aw_unit_price FROM price_cube_unit_price DIMENSION product WITH HIERARCHY product_parentrel INHIERARCHY product_inhier GID aw_product_gid FROM product_gid ATTRIBUTE aw_product FROM product_short_description DIMENSION time WITH HIERARCHY time_parentrel INHIERARCHY time_inhier GID aw_time_gid FROM time_gid ATTRIBUTE aw_time FROM time_short_description ROW2CELL r2c')); -- query the view SQL>SELECT * FROM unit_cost_price_view WHERE aw_product = 'Hardware' AND aw_time in ('2000', '2001', '2002', '2003') ORDER BY aw_time; AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C ------------ ------------- ---------- -------------- ------- ----------- ----- 211680.12 224713.71 Hardware 3 2000 3 00... 195591.60 207513.16 Hardware 3 2001 3 00... 184413.05 194773.78 Hardware 3 2002 3 00... 73457.31 77275.06 Hardware 3 2003 3 00...
Example 29-2 Queries of UNIT_COST_PRICE_VIEW Using OLAP_CONDITION
The queries in this example use OLAP_CONDITION
to modify the query of UNIT_COST_PRICE_VIEW
in Example 29-1. In each query, OLAP_CONDITION
uses a different entry point to limit the TIME
dimension to the year 2000.
In the first query, OLAP_CONDIITON
uses entry point 0. The limited data is returned by OLAP_TABLE
, and the limit remains in effect in the analytic workspace.
SQL>SELECT * FROM unit_cost_price_view WHERE aw_product = 'Hardware' AND aw_time in ('2000', '2001', '2002', '2003') AND OLAP_CONDITION(r2c, 'limit time to time_short_description eq ''2000''', 0)=1 ORDER BY aw_time; AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C ------------ ------------- ---------- -------------- ------- ----------- ----- 211680.12 224713.71 Hardware 3 2000 3 00... --Check status in the analytic workspace SQL>exec dbms_aw.execute('rpr time_short_description'); TIME TIME_SHORT_DESCRIPTION ---- ---------------------- 3 2000 -- Reset status SQL>exec dbms_aw.execute('allstat');
In the next query, OLAP_CONDIITON
uses entry point 1. The limited data is returned by OLAP_TABLE
, but the limit does not remain in effect in the analytic workspace.
Note that the third parameter is not required in this case, since entry point 1 is the default.
SQL>SELECT * FROM unit_cost_price_view WHERE aw_product = 'Hardware' AND aw_time in ('2000', '2001', '2002', '2003') AND OLAP_CONDITION(r2c, 'limit time to time_short_description eq ''2000''', 1)=1 ORDER BY aw_time; AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C ------------ ------------- ---------- -------------- ------- ----------- ----- 211680.12 224713.71 Hardware 3 2000 3 00... --Check status in the analytic workspace SQL>exec dbms_aw.execute('rpr time_short_description'); TIME TIME_SHORT_DESCRIPTION ---- ---------------------- 19 Jan-98 20 Feb-98 21 Mar-98 22 Apr-98 . . . 1 1998 2 1999 3 2000 4 2001 85 2002 102 2003 119 2004 -- Reset status SQL>exec dbms_aw.execute('allstat');
In the final query, OLAP_CONDIITON
uses entry point 2. The limit does not affect the data returned by OLAP_TABLE
, but the limit remains in effect in the analytic workspace.
SQL>SELECT * FROM unit_cost_price_view WHERE aw_product = 'Hardware' AND aw_time in ('2000', '2001', '2002', '2003') AND OLAP_CONDITION(r2c, 'limit time to time_short_description eq ''2000''', 2)=1 ORDER BY aw_time; AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C ------------ ------------- ---------- -------------- ------- ----------- ----- 211680.12 224713.71 Hardware 3 2000 3 00... 195591.60 207513.16 Hardware 3 2001 3 00... 184413.05 194773.78 Hardware 3 2002 3 00... 73457.31 77275.06 Hardware 3 2003 3 00... --Check status in the analytic workspace SQL>exec dbms_aw.execute('rpr time_short_description'); TIME TIME_SHORT_DESCRIPTION ---- ---------------------- 3 2000
The OLAP_CONDITION
function executes an OLAP DML command at one of three entry points in the limit map used in a call to OLAP_TABLE
.
Syntax
OLAP_CONDITION( r2c IN RAW(32), expression IN VARCHAR2, event IN NUMBER DEFAULT 1); RETURN NUMBER;
Parameters
Table 29-1 OLAP_CONDITION Function Parameters
Parameter | Description |
---|---|
|
The name of a column specified by a The For information on creating a |
|
A single OLAP DML command to be executed within the context of the |
|
The event during |
Returns
The number 1
to indicate a successful invocation of OLAP_CONDITION
.
Note
The entry points for OLAP_CONDITION
are described in Table 29-2. Refer to "Order of Processing in OLAP_TABLE" to determine where each entry point occurs.
Table 29-2 Entry Points for OLAP_CONDITION in the OLAP_TABLE Limit Map
Entry Point | Description |
---|---|
0 |
Execute the OLAP DML command after the The entry point is between steps 1 and 2 in "Order of Processing in OLAP_TABLE". If |
1 |
Execute the OLAP DML command after the conditions of the The entry point is between steps 4 and 5 in "Order of Processing in OLAP_TABLE". If an OLAP DML command (other than If |
2 |
Execute the OLAP DML command after the data is fetched and the status of dimensions in the limit map has been restored. The entry point is after step 8 in "Order of Processing in OLAP_TABLE". If |
Example