OLAP_EXPRESSIONは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLブール式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。
OLAP_EXPRESSIONは数値データを返します。テキスト・データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION_TEXT、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATE SQLファンクションを使用します。
このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。
|
注意: OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。 |
返される内容
OLAP_TABLEによって返された表オブジェクトの各行に対するnumeric_expressionの評価。
OLAP_EXPRESSIONは数値データを返します。テキスト・データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION_TEXT、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATEファンクションを使用します。
構文
OLAP_EXPRESSION(
r2c IN RAW(32),
numeric_expression IN VARCHAR2)
RETURN NUMBER;
パラメータ
制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。
数値を結果として返すOLAP DML式。
例
次のスクリプトは、unit_cost_price_viewを作成するためのものです。このビューは、OLAP_EXPRESSIONの使用例を示すために例A-12「OLAP_EXPRESSION: WHERE句内の時系列ファンクション」および例A-13「OLAP_EXPRESSION: ORDER BY句内での数値計算」で使用されます。アナリティック・ワークスペースのビューの作成方法については、「OLAP_TABLEを使用したリレーショナル・ビューの作成」を参照してください。
サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW
-- Create the logical row
CREATE TYPE unit_cost_price_row AS OBJECT (
aw_unit_cost NUMBER,
aw_unit_price NUMBER,
aw_product VARCHAR2(50),
aw_time VARCHAR2(20),
r2c RAW(32));
/
-- Create the logical table
CREATE TYPE unit_cost_price_table AS TABLE OF unit_cost_price_row;
/
-- Create the view
CREATE OR REPLACE VIEW unit_cost_price_view AS
SELECT aw_unit_cost, aw_unit_price, aw_product, aw_time, r2c
FROM TABLE(OLAP_TABLE(
'myaw 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
ATTRIBUTE aw_product FROM product_short_description
DIMENSION time WITH
HIERARCHY time_parentrel
INHIERARCHY time_inhier
ATTRIBUTE aw_time FROM time_short_description
ROW2CELL r2c'));
/
次の問合せは、このビューの集計データの一部を返します。
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_TIME R2C
------------ ------------- ---------- ------- -----
211680.12 224713.71 Hardware 2000 00...
195591.60 207513.16 Hardware 2001 00...
184413.05 194773.78 Hardware 2002 00...
73457.31 77275.06 Hardware 2003 00...
例A-12 OLAP_EXPRESSION: WHERE句内の時系列ファンクション
この例では、「サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW」のビューを使用します。
次のSELECT文は、PERIODAGOという別名の付いた式を計算し、結果セットを、計算後の値が50,000より大きいものに制限します。この計算は、LAGファンクションを使用して、1つ前の期間の値を戻します。
SQL>SELECT aw_time time, aw_unit_cost unit_cost,
OLAP_EXPRESSION(r2c,
'LAG(price_cube_unit_cost, 1, time,
LEVELREL time_levelrel)') periodago
FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND OLAP_EXPRESSION(r2c,
'LAG(price_cube_unit_cost, 1, time,
LEVELREL time_levelrel)') > 50000;
このSELECT文は次の結果を戻します。
TIME UNIT_COST PERIODAGO -------------------- ---------- ---------- 2003 73457.31 184413.05 2004 73457.31 1999 231095.4 162526.92 2000 211680.12 231095.4 2001 195591.6 211680.12 2002 184413.05 195591.6 Q2-99 57587.34 57856.76 Q3-99 59464.25 57587.34 Q4-99 56187.05 59464.25 Q1-00 53982.32 56187.05 Q2-00 53629.74 53982.32 Q3-00 53010.65 53629.74 Q4-00 51057.41 53010.65 Q1-01 49691.22 51057.41
例A-13 OLAP_EXPRESSION: ORDER BY句内での数値計算
この例では、「サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW」のビューを使用します。
この例では、価格からコストを引いて、その式にMARKUPという別名を付けます。戻される行は、利幅(MARKUP)の高い順に並べられます。
SQL>SELECT aw_time time, aw_unit_cost unit_cost, aw_unit_price unit_price,
OLAP_EXPRESSION(r2c,
'PRICE_CUBE_UNIT_PRICE - PRICE_CUBE_UNIT_COST') markup
FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('1998', '1999', '2000', '2001')
ORDER BY OLAP_EXPRESSION(r2c,
'PRICE_CUBE_UNIT_PRICE - PRICE_CUBE_UNIT_COST') DESC;
TIME UNIT_COST UNIT_PRICE MARKUP -------------------- ---------- ---------- --------- 1999 231095.40 245412.91 14317.51 2000 211680.12 224713.71 13033.59 2001 195591.60 207513.16 11921.56 1998 162526.92 173094.41 10567.49