OLAP_EXPRESSION
は、OLAP_TABLE
ファンクションのコンテキスト内でOLAP DMLブール式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE
句やORDER BY
句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。
OLAP_EXPRESSION_TEXT
は文字データを返します。テキスト・データ、ブール・データ、日付データを返すには、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
ファンクションを使用します。
パラメータ
制限マップの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