ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

A OLAP_TABLE SQLファンクション

この付録では、アナリティック・ワークスペースから多次元データを抽出して2次元のリレーショナル表の形式で表示できる次のSQLファンクションについて説明します。

OLAP_TABLEを使用したリレーショナル・ビューの作成

OLAP_TABLEは、リレーショナル表およびビューに結合可能なオブジェクトの表、またはOLAP_TABLEによって移入された別のオブジェクトの表に結合可能なオブジェクトの表を返すSQLファンクションです。SQL文の中で、表またはビューの名前を指定したい任意の部分にOLAP_TABLEファンクション・コールを指定できます。

OLAP_TABLEは、制限マップを使用して、アナリティック・ワークスペース内で定義されているディメンションやメジャーを、論理表の列にマップします。制限マップとSQL SELECT文のWHERE句が組み合されて、アナリティック・ワークスペース内で実行される一連のOLAP DML LIMITコマンドが生成されます。

OLAP_TABLEでは、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。

必須のOLAP DMLオブジェクト

制限マップでのディメンション階層のマッピングをサポートするためには、アナリティック・ワークスペース内で次のオブジェクトが事前定義されている必要があります。

  • 親リレーション: 階層内の各ディメンション・メンバーの親を識別します。詳細は、「parentrelリレーション」を参照してください。

  • 階層ディメンション: ディメンションの階層を表します。詳細は、「hierlistディメンション」を参照してください。

  • 階層内変数または値セット: 階層の各レベルに属するディメンション・メンバーを表します。詳細は、「inhier値セットまたは変数」を参照してください。

  • グルーピングID変数: 各ディメンション・メンバーの階層内の深さを識別します。詳細は、「gidrelリレーション」を参照してください。

  • ファミリ・リレーション: 階層内の各ディメンション・メンバーの完全な親子関係を表します。詳細は、「familyrelリレーション」を参照してください。

  • レベル・ディメンション: ディメンションのレベルを表します。詳細は、「levellistディメンション」を参照してください。

OLAP_TABLEで使用する論理表の作成

OLAP_TABLEによって移入される論理表は、実際には表型です。また、その行は、抽象データ型またはADTとも呼ばれるユーザー定義のオブジェクト型です。

ユーザー定義のオブジェクト型は、表の各列に相当する属性で構成されます。行を定義するための基本的な構文は次のとおりです。

CREATE TYPE object_name AS OBJECT (
   attribute1      datatype,
   attribute2      datatype,
   attributen      datatype);

表型はオブジェクト型の集合で、この集合は表の各行に相当します。表型を作成するための基本的な構文は次のとおりです。

CREATE TYPE table_name AS TABLE OF object_name;

OLAP_TABLEでは、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。


関連項目:


事前定義されたADTを使用したOLAP_TABLEの使用

オブジェクトを格納する表は、事前に定義することも、動的に生成することもできます。表型を事前にデータベース内に作成しておけば、その表はOLAP_TABLEをコールしたときにいつでも使用できます。一般に、動的にオブジェクトを生成する問合せよりも、事前定義されたオブジェクトを使用する問合せの方がパフォーマンスに優れています。

例A-1「事前定義されたADTを使用してビューを作成するためのテンプレート」は、事前定義されたADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。

例A-1 事前定義されたADTを使用してビューを作成するためのテンプレート

SET ECHO ON
SET SERVEROUT ON

DROP TYPE table_obj;
DROP TYPE row_obj;

CREATE TYPE row_obj AS OBJECT (
            column_first     datatype,
            column_next      datatype,
            column_n         datatype);
/   
CREATE TYPE table_obj AS TABLE OF row_obj;
/
CREATE OR REPLACE VIEW view_name AS
   SELECT column_first, column_next, column_n
      FROM TABLE(OLAP_TABLE(
         'analytic_workspace', 
         'table_obj', 
         'olap_command',
         'limit_map'));
/
COMMIT;
/ 
GRANT SELECT ON view_name TO PUBLIC;        

例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」では、OLAP_TABLEと事前定義された表型を使用して、MYAW_AWスキーマ内のMYAWというアナリティック・ワークスぺースのTIMEディメンションのリレーショナル・ビューを作成します。

OLAP_TABLEコールの1番目のパラメータはアナリティック・ワークスペースの名前です。2番目は事前定義された表型の名前です。4番目は、ワークスペース・ディメンションと事前定義された表型の列とのマッピングを指定する制限マップです。3番目のパラメータは指定されていません。

例A-2 事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー

CREATE TYPE time_cal_row AS OBJECT (
            time_id           varchar2(32),
            cal_short_label   varchar2(32),
            cal_end_date      date,
            cal_timespan      number(6));

CREATE TYPE time_cal_table AS TABLE OF time_cal_row;

CREATE OR REPLACE VIEW time_cal_view AS
   SELECT time_id, cal_short_label, cal_end_date, cal_timespan
      FROM TABLE(OLAP_TABLE(
         'myaw_aw.myaw duration session',
         'time_cal_table',
          '',
         'DIMENSION time_id from time with
            HIERARCHY time_parentrel
               INHIERARCHY time_inhier
            ATTRIBUTE cal_short_label from time_short_description
            ATTRIBUTE cal_end_date    from time_end_date
            ATTRIBUTE cal_timespan    from time_time_span'));

自動ADTを使用したOLAP_TABLEの使用

表型の名前が引数として指定されていない場合、OLAP_TABLEは、制限マップの情報を使用して自動的に論理表を生成します。この場合、その表型は、SQL SELECT文をコールするコンテキスト内で、実行時にしか使用できません。

例A-3「自動ADTを使用してビューを作成するためのテンプレート」は、自動ADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。

例A-3 自動ADTを使用してビューを作成するためのテンプレート

SET ECHO ON
SET SERVEROUT ON

CREATE OR REPLACE VIEW view_name AS
   SELECT column_first, column_next, column_n
      FROM TABLE(OLAP_TABLE(
         'analytic_workspace',
         '', 
         'olap_command',
         'limit_map'));
/
COMMIT;
/ 
GRANT SELECT ON view_name TO PUBLIC;        

例A-4「自動ADTを使用するTIMEディメンションのビュー」では例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」と同じビューが作成されますが、事前定義された表型を使用するかわりに、自動的にADTを生成します。ここでは、制限マップでAS句を使用してターゲット列のデータ型を指定しています。

例A-4 自動ADTを使用するTIMEディメンションのビュー

CREATE OR REPLACE VIEW time_cal_view AS
   SELECT time_id, cal_short_label, cal_end_date, cal_timespan
      FROM TABLE(OLAP_TABLE(
        'myaw_aw.myaw duration session',
        null,
        null,
        'DIMENSION time_id AS varchar2(32) FROM time WITH
           HIERARCHY time_parentrel
              INHIERARCHY time_inhier
           ATTRIBUTE cal_short_label AS VARCHAR2(32) from time_short_description
           ATTRIBUTE cal_end_date AS DATE            from time_end_date
           ATTRIBUTE cal_timespan AS NUMBER(6)       from time_time_span'));

ユーザーが制限マップのAS句でデータ型を指定しなかった場合、OLAP_TABLEがADTを自動生成する際にはターゲット列に対してデフォルトのリレーショナル・データ型が使用されます。OLAP_TABLEで使用されるデフォルトのデータ型変換については、表A-1「デフォルトのデータ型変換」を参照してください。

リレーショナル・ビューへの計算された列の追加

OLAP_TABLEでは、アナリティック・ワークスペースの多次元データを表形式で表すために制限マップを使用します。制限マップによって、論理表の列が特定されます。OLAP_EXPRESSIONファンクションを指定するか、または問合せのSELECT構文のリストにブール・ファンクション、テキスト・ファンクション、日付ファンクションのいずれかを指定することによって、計算された列をリレーショナル・ビューに追加できます。SELECT構文のリストにいずれかのファンクションを指定した場合は、そのファンクションの結果に対応する追加の列がOLAP_TABLEによって生成されます。

これらの式のいずれかを使用する前に、OLAP_TABLEで使用される制限マップにROW2CELL句を指定して、OLAP単一行ファンクションによって使用される情報を移入するRAW列を指定する必要があります。

SELECT FROM OLAP_TABLE文でのOLAP DML式の使用

OLAP DMLコマンドは、SELECT FROM OLAP_TABLE文内で使用できます。詳細は次の項で説明します。

単一行ファンクションとして使用するOLAP DML式

一般に、SQLファンクションは、問い合された表またはビューのすべての行について単独の結果行を返す単一行ファンクションです。Oracleでは、事前定義された複数のSQL単一行ファンクションをサポートしており、たとえば、数値データを返すCOSLOGROUND、文字データを返すUPPERLOWERなどがあります。

SELECT FROM OLAP_TABLE文のコンテキストには、OLAP DMLファンクションが単一行ファンクションとして機能するようにOLAP DMLファンクションをラップするための、4つのSQLファンクションがあります。これらのファンクションは、それぞれデータ型が異なる4種類のOLAP DML式の結果を戻しますが、具体的には、Oracle OLAPの数式に使用するOLAP_EXPRESSION、Oracle OLAPのブール式に使用するOLAP_EXPRESSION_BOOL、Oracle OLAPの日時式に使用するOLAP_EXPRESSION_DATE、Oracle OLAPのテキスト式に使用するOLAP_EXPRESSION_TEXTです。これらの各SQLファンクションの引数の1つが、OLAP DMLファンクションです。

OLAP_EXPRESSIONファンクションおよびこれに類するファンクションは、他のOracle単一行ファンクションと同じ方法で(特にSELECT構文のリスト内や、WHERE句およびORDER BY句内で)指定できます。

SELECT FROM OLAP_TABLE文からのアナリティック・ワークスペースの変更

OLAP_TABLEの実行中にアナリティック・ワークスペースを即時に変更するためのメカニズムは複数あります。

OLAP_CONDITION SQLファンクションを使用すると、SELECT FROM OLAP_TABLE文のコンテキスト内でアナリティック・ワークスペースを変更できます。OLAP_CONDITIONは、(特にWHERE句で)他のOracleファンクションと同じように指定できます。OLAP_CONDITIONを使用して、オプションを設定したり、LIMITコマンドを実行したり、OLAPのモデルや予測を実行したり、プログラムを実行したりできます。ワークスペースに対する変更は、一時的なものにすることも、問合せの完了時にセッションに残しておくこともできます。

OLAP_CONDITION以外にも、たとえば、制限マップでのPREDMLCMD句やPOSTDMLCMD句、olap_commandパラメータなどのOLAP_TABLEファンクション自体によってサポートされている構文が使用できます。OLAP_CONDITIONOLAP_TABLE内に埋め込まれていないため移植が可能で、様々な入力ポイントで適用できるので汎用性があります。

OLAP_TABLEは、問合せの結果セットを生成するLIMITコマンドの実行前に、制限マップ内のディメンションのステータスを保存します。データがフェッチされた後、OLAP_TABLEはディメンションのステータスをリストアします。ディメンションのステータスが保存される前にOLAP DMLコマンドが実行されるようにするには、制限マップでPREDMLCMD句を指定します。PREDMLCMD句による変更は、OLAP_TABLEの実行後もワークスペース内に保持されます(POSTDMLCMD句で変更を無効にする場合を除く)。詳細は、limit_mapを参照してください。

OLAP_TABLEolap_commandパラメータには、結果セットがフェッチされる直前に実行されるOLAP DMLコマンドを指定します。一部の環境では、olap_commandパラメータにOLAP DML FETCHコマンドが含まれていることがあり、その場合はこのコマンドによってフェッチが管理されます。olap_commandパラメータによって設定された制限は、OLAP_TABLEの実行中のみ有効です。詳細は、olap_commandを参照してください。