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を使用してアナリティック・ワークスペースのビューを作成する方法を示しています。

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番目のパラメータは指定されていません。

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を使用してアナリティック・ワークスペースのビューを作成する方法を示しています。

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ディメンションのビュー

この例では前の例と同じビューが作成されますが、事前定義された表型を使用するかわりに、自動的にADTを生成します。ここでは、制限マップでAS句を使用してターゲット列のデータ型を指定しています。

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を自動生成する際にはターゲット列に対してデフォルトのリレーショナル・データ型が使用されます。表A-2に、OLAP_TABLEで使用されるデフォルトのデータ型変換を示します。

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

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」を参照してください。

OLAP_TABLE

OLAP_TABLEは、アナリティック・ワークスペースから多次元データを抽出し、そのデータを2次元のリレーショナル表に表示するSQLファンクションです。

OLAP_TABLEファンクションは、アナリティック・ワークスペースの多次元データを論理表として返します。

OLAP_TABLEが入力パラメータに指定された情報を処理する順番については、OLAP_TABLEにおける処理順序で説明します。

OLAP_TABLEは、アナリティック・ワークスペースに対して問合せを発行するための、データベースの基本的メカニズムです。SQL文の中で、表またはビューの名前を指定したい任意の部分にOLAP_TABLEファンクション・コールを指定できます。

OLAP_TABLEは、リレーショナル表およびビューに結合可能なオブジェクトの表、またはOLAP_TABLEによって移入された別のオブジェクトの表に結合可能なオブジェクトの表を返します。

注意:

OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

表型で、この表の行は、選択したワークスペース・データに対応するオブジェクト(ADT)です。OLAP_TABLEを使用したリレーショナル・ビューの作成を参照してください。

構文

OLAP_TABLE(
        analytic_workspace    IN   VARCHAR2,
        table_object          IN   VARCHAR2,
        olap_command          IN   VARCHAR2,
        limit_map1            IN   VARCHAR2,
        limit_map2            IN   VARCHAR2,
              .
              .
              .
        limit_map8            IN   VARCHAR2)
     RETURN TYPE;

パラメータ

analytic_workspace

ソース・データが格納されているアナリティック・ワークスペースの名前を指定します。また、OLAP_TABLEへの最初のコールで開かれるOLAPセッションにアナリティック・ワークスペースをアタッチしておく期間も指定します。

このパラメータは、OLAP_TABLEに必須です。

このパラメータの構文は、次のとおりです。

'[owner.]aw_name DURATION QUERY | SESSION'

次に例を示します。

'olapuser.xademo DURATION SESSION'
  • owner

    ownerは、他のユーザーによってアクセスされるビューを作成する場合に指定します。それ以外の場合で、アナリティック・ワークスペースを所有している場合は、ownerを省略できます。このパラメータは、所有者以外のユーザー名でログインしている場合にのみ必要です。

  • QUERY

    単独の問合せを実行している間、アナリティック・ワークスペースをアタッチします。QUERYは、他のセッションで行われたアナリティック・ワークスペースに対する更新を確認する必要がある場合にのみ使用します。

  • SESSION

    アナリティック・ワークスペースをアタッチし、問合せ後もアタッチしたままにします。OLAPセッションを開いた状態で維持するため、QUERYよりもパフォーマンスが向上します。このパフォーマンスの向上が顕著になるのは、制限マップにtable_objectパラメータやAS句を指定しないでファンクションをコールする場合ですが、これは、OLAP_TABLEファンクションが適切な表定義を判断する必要があるためです。自動ADTを使用したOLAP_TABLEの使用を参照してください。

table_object

事前定義されたオブジェクトの表の名前(事前定義されたADTを使用したOLAP_TABLEの使用を参照)。

このパラメータは省略可能です。自動ADTを使用する場合、このパラメータは省略します。

このパラメータの構文は、次のとおりです。

'table_name'

次に例を示します。

'product_dim_tbl'

table_nameパラメータを指定する場合、返されるデータの列のデータ型は事前定義されたものになります。この場合は、制限マップでAS句を使用できません。

table_nameパラメータを省略する場合、返されるデータの列のデータ型は実行時に生成されます。ターゲットのデータ型は、制限マップのAS句で指定するか、またはデフォルトのデータ型(表A-2を参照)を使用します。自動ADTを使用したOLAP_TABLEの使用を参照してください。

olap_command

単独のOLAP DMLコマンド。複数のコマンドを実行する場合は、アナリティック・ワークスペース内にプログラムを作成し、そのプログラムをこのパラメータでコールする必要があります。このパラメータは、OLAP DMLで使用できるほとんどのデータ操作コマンドを処理することが可能で、柔軟かつ機能的です。

OLAP_TABLEolap_commandパラメータを処理する順番については、OLAP_TABLEにおける処理順序で説明します。

このパラメータの構文は、次のとおりです。

'olap_command'

olap_commandパラメータは、次の2つの用途に使用できます。

limit_map

ワークスペース・オブジェクトをリレーショナル列にマップして、各オブジェクトのロールを指定します。OLAP_TABLEを使用したリレーショナル・ビューの作成を参照してください。

制限マップでは、OLAP_TABLEに実行させる特別な命令を指定することもできます。たとえば、制限マップの実行前または実行後にOLAP DMLコマンドが実行されるようにしたり、OLAP_CONDITIONおよびOLAP_EXPRESSIONファンクションにROW2CELL列を指定することができます。(OLAP_CONDITIONおよびOLAP_EXPRESSIONを参照)

OLAP_TABLEが制限マップの情報を処理する順番については、OLAP_TABLEにおける処理順序で説明します。

limit_mapパラメータは、通常は必ず指定する必要があります。olap_commandパラメータにFETCHコマンドを指定する場合にのみ省略できます。「olap_command」の説明を参照してください。

制限マップのテキスト全体をOLAP_TABLEへのパラメータとして指定したり、制限マップの全体または一部をアナリティック・ワークスペース内のテキスト変数に格納し、アンパサンド置換を使用してその変数を参照したりできます。たとえば、次のOLAP_TABLE問合せは、MYAW_AWスキーマのMYAWアナリティック・ワークスペース内にあるlimitmapvarという変数に格納された制限マップを使用しています。

SELECT * FROM TABLE(OLAP_TABLE(
          'myaw_aw.myaw DURATION SESSION',
          '',
          '',
          '&(myaw_aw.myaw!limitmapvar)');

OLAP_TABLEへのコールの中で制限マップをテキストとして指定する場合、その最大文字数は4000となりますが、これはPL/SQLの制限によるものです。制限マップをアナリティック・ワークスペースに格納する場合は、文字数の制限はありません。

注意:

制限マップでのディメンション階層のマッピングをサポートするためには、いくつかのアナリティック・ワークスペース・オブジェクトをワークスペース内で事前定義しておく必要があります。詳細は、必須のOLAP DMLオブジェクトを参照してください。

制限マップの構文には、主にディメンション階層を定義するために、多くの句があります。構文エラーがあると制限マップが解析されないため、カンマの有無に注意してください。

'[MEASURE column [AS datatype] FROM {measure | AW_EXPR expression}]
           .
           .
 DIMENSION [column [AS datatype] FROM] dimension 
    [WITH
       [HIERARCHY [column [AS datatype] FROM] parent_relation
          [(hierarchy_dimension ''hierarchy_name'')]
          [INHIERARCHY inhierarchy_obj]
          [GID column [AS datatype] FROM gid_relation]
          [PARENTGID column [AS datatype] FROM gid_relation]
          [FAMILYREL column1 [AS datatype],  
                     column2 [AS datatype],
                      ... columnn [AS datatype]
                     FROM {expression1, expression2, ... expressionn | 
                           family_relation USING level_dimension }
                     [LABEL label_variable]]
          [HATTRIBUTE column [AS datatype] FROM hier_attribute_variable] 
           .
           .
       ]
       [ATTRIBUTE column [AS datatype] FROM attribute_variable]
           .
           .
    ]
 [ROW2CELL column] 
 [LOOP  loop-clause]
 [PREDMLCMD olap_command]
 [POSTDMLCMD olap_command]'

説明:

columnは、ターゲット表の列の名前です。

datatypeは、columnのデータ型です。

measureは、アナリティック・ワークスペース内の変数、式またはリレーションです。

expressionは、アナリティック・ワークスペース内のオブジェクトに対する式または修飾データ参照です。

dimensionは、アナリティック・ワークスペース内のディメンションです。

parent_relationは、dimensionの階層を定義するアナリティック・ワークスペース内のセルフ・リレーションです。詳細は、parentrelリレーションを参照してください。

hierarchy_dimensionは、dimensionの階層の名前を含むアナリティック・ワークスペース内のディメンションです。詳細は、hierlistディメンションを参照してください。

hierarchy_nameは、hierarchy_dimensionのメンバーです。

inhierarchy_objは、階層の各レベルにどのディメンション・メンバーが属しているかを示すアナリティック・ワークスペース内の変数または値セットです。詳細は、inhier値セットまたは変数を参照してください。

gid_relationは、階層内の各ディメンション・メンバーのグルーピングIDを含むアナリティック・ワークスペース内のリレーションです。詳細は、gidrelリレーションを参照してください。

family_relationは、階層内の各ディメンション・メンバーの完全な親子関係を示すセルフ・リレーションです。詳細は、familyrelリレーションを参照してください。

level_dimensionは、階層のレベルの名前を含むアナリティック・ワークスペース内のディメンションです。詳細は、levellistディメンションを参照してください。

label_variableは、dimensionを説明するテキスト値を格納するアナリティック・ワークスペース内の変数です。

hier_attribute_variableは、hierarchy_nameの属性値を格納するアナリティック・ワークスペース内の変数です。

attribute_variableは、dimensionの属性値を格納するアナリティック・ワークスペース内の変数です。

loop_clauseには、データ値のループ処理およびリレーショナル表に作成する行をOracle OLAPがどのように決定するかを指定します。LOOP句を使用しない場合は、制限マップのDIMENSION句内のディメンションで識別されるすべてのデータ値がループされます。

LOOP句の構文の詳細は、LOOP句を参照してください。

olap_commandは、OLAP DMLコマンドです。

limit_mapパラメータの各句の構文について、次に詳しく説明します。

  • MEASURE句

    MEASURE句は、アナリティック・ワークスペース内の変数、式またはリレーションをターゲット表の列にマップします。MEASURE句はいくつでも指定できます。ディメンション・ビューを作成する場合などは、この句の指定は任意です。

    AS副次句では、ターゲット列のデータ型を指定します。AS副次句は、オブジェクトの表が事前定義されていない場合に指定できます。自動ADTを使用したOLAP_TABLEの使用を参照してください。

    FROM副次句では、変数、式またはリレーションの名前、あるいはこれらのオブジェクトの1つを評価するOLAP式のいずれかを指定できます。次に例を示します。

    AW_EXPR analytic_cube_sales - analytic_cube_cost
    or
    AW_EXPR LOGDIF(analytic_cube_sales, 1, time, LEVELREL time.lvlrel)
    
  • DIMENSION句

    DIMENSION句には、1つ以上のメジャーや属性をディメンション化するアナリティック・ワークスペース内のディメンションまたは結合ディメンションを指定するか、制限マップの1つ以上の階層に対するディメンション・メンバーを指定します。

    ディメンション・メンバー自体を表に含めないようにするときは、column副次句の指定は任意です。この場合は、データの選択に使用できるディメンション属性を含めてください。

    AS副次句については、MEASURE句を参照してください。

    制限マップには、少なくとも1つのDIMENSION句を必ず含めます。制限マップにMEASURE句を指定した場合は、ディメンションが1つの値に制限されていないかぎり、メジャーの各ディメンションに対してDIMENSION句を1つ指定する必要があります。メジャーがコンポジットによってディメンション化されている場合は、DIMENSION句を使用してコンポジットの各ディメンションを指定する必要があります。大量の結果セットをフェッチする際のパフォーマンスを最適化するには、LOOP句にコンポジットを指定します。LOOP句を参照してください。

    1つのDIMENSION句に指定できるディメンションは1つのみです。DIMENSION句の副次句では、ディメンションの階層や属性を指定できます。

    • ディメンションの階層および属性用のWITH副次句

      WITH副次句は、HIERARCHYまたはATTRIBUTE副次句を導きます。階層または属性を指定しない場合は、WITHキーワードを省略します。階層と属性の両方を指定する場合は、これらの副次句の前にWITHキーワードを1つのみ使用します。

    • WITH HIERARCHY副次句

      HIERARCHY副次句には、ディメンションの階層を定義するアナリティック・ワークスペース内の親セルフ・リレーションを指定します。詳細は、parentrelリレーションを参照してください。

      ディメンションに階層がない場合、またはディメンションのステータスが階層の1つのレベルに制限されている場合は、HIERARCHY副次句の指定は任意です。ディメンションに複数の階層がある場合は、各階層に対して1つのHIERARCHY副次句を指定し、さらにhierarchy_dimension句を指定します。hierarchy_dimensionには、このディメンションの階層の名前を含むアナリティック・ワークスペース内のディメンションを指定します。詳細は、hierlistディメンションを参照してください。

      hierarchy_nameは、hierarchy_dimensionのメンバーです。hierarchy_dimensionは、その階層に対する後続の副次句(INHIERARCHYGIDPARENTGIDFAMILYRELおよびHATTRIBUTE)で参照されるすべてのワークスペース・オブジェクトのhierarchy_nameに限定されます。

      column副次句については、DIMENSION句を参照してください。

      次の表に、HIERARCHY副句のキーワードを示します。

      表A-1 HIERARCHY副句のキーワード

      キーワード 説明

      INHIERARCHY

      INHIERARCHY副次句には、階層の各レベルのディメンション・メンバーを示す、アナリティック・ワークスペース内のブール変数または値セットを指定します。詳細は、inhier値セットまたは変数を参照してください。

      OLAP_TABLEは、制限マップの処理時に、INHIERARCHY副次句が指定されているすべてのディメンションのステータスを保存するため、INHIERARCHY副次句を指定することをお薦めします。階層から除外されているディメンション・メンバーがある場合は、必ず指定してください。

      GID

      GID副次句は、各ディメンション・メンバーのグルーピングIDを格納するアナリティック・ワークスペース内の整数値の変数を、ターゲット表の列にマップします。グルーピングID変数は、OLAP DML GROUPINGIDコマンドによって移入されます。詳細は、gidrelリレーションを参照してください。

      OLAP APIを使用するJavaアプリケーションの場合、GID副次句は必須です。

      AS副次句については、MEASURE句を参照してください。

      PARENTGID

      PARENTGID副次句は、アナリティック・ワークスペース内のGID変数を使用して親リレーションのグルーピングIDを計算します。親のGIDはアナリティック・ワークスペースに格納されていません。かわりに、GID句で使用したのと同じGID変数をPARENTGID句に指定します。OLAP APIを使用するJavaアプリケーションの場合は、PARENTGID句を指定してください。

      AS副次句については、MEASURE句を参照してください。

      FAMILYREL

      FAMILYREL句は、主に、アナリティック・ワークスペース内のファミリ・リレーションをターゲット表の複数の列にマップするために使用します。詳細は、familyrelリレーションを参照してください。各階層に対して複数のFAMILYREL句を使用できます。

      これらの列は、level_dimension(アナリティック・ワークスペース内にある、すべてのディメンション・レベルの名前を格納しているディメンション)の順序に従って指定します。詳細は、levellistディメンションを参照してください。

      特定のレベルを除外するには、対象の列にNULLを指定します。AS副次句については、MEASURE句を参照してください。

      LABELキーワードには、ディメンション・メンバーについてわかりやすい名前を表すテキスト属性を指定します。

      FAMILYREL句によって返される表形式のデータは、ロールアップ形式で表されますが、つまり、階層の各レベルは別々の列で表され、各ディメンション・メンバーの完全な親子関係が、行内で表現されます。例A-7を参照してください。

      HATTRIBUTE

      HATTRIBUTE副次句は、アナリティック・ワークスペース内のhierarchy_dimensionによってディメンション化される階層固有の属性変数を、ターゲット表の列にマップします。

    • WITH ATTRIBUTE副次句

      ATTRIBUTE副次句は、アナリティック・ワークスペース内の属性変数をターゲット表の列にマップします。

      attribute_variableに複数のディメンションがある場合、dimensionについてはすべてのメンバーに関して値のマッピングが行われますが、その他のディメンションについては現在のステータスにある最初のメンバーに関してのみマッピングが行われます。たとえば、複数の属性に言語ディメンションがある場合、そのディメンションのステータスを特定の言語に設定する必要があります。ディメンションのステータスは、PREDMLCMDで設定できます。

  • ROW2CELL句

    ROW2CELLは、文字長が16から32のRAW列をターゲット表に作成し、OLAP_EXPRESSIONファンクションで使用される情報をその列に移入します。ROW2CELL列はOLAP_CONDITIONファンクションでも使用されます。これらのファンクションで使用されるビューを作成するときに、ROW2CELL列を指定する必要があります。SELECT FROM OLAP_TABLE文でのOLAP DML式の使用およびリレーショナル・ビューへの計算された列の追加を参照してください。

  • LOOP句

    LOOP句には、値の取得時にOracle OLAPがどのようにデータをループするかを指定します。制限マップでLOOP句を省略すると、Oracle OLAPはその制限マップのDIMENSION句を使用して、ループする値を決定します。Oracle OLAPはNAまたはnullを含まないメジャー・セルを識別するタプルのみをループします。LOOP句を含める場合、次のタイプの副句のいずれかを指定します。optimized_subclauseまたはunion_subclause

    optimized_subclauseを指定すると、Oracle OLAPによってunion_subclauseが自動的に作成され、これを基にデータがループされます。作成されたunion_subclauseにはDENSE句は含まれません。したがって、optimized_subclauseを指定したときは、NAでもNULLでもないメジャー・セルであるタプルのみがループ対象となります。optimized_subclauseの構文は次のとおりです。

    OPTIMIZED [MEASURES]

    オプションのMEASURESキーワードを指定すると、Oracle OLAPは、ループ対象のタプルを特定した後、制限マップのMEASURES句に指定されたオブジェクトのディメンションではないディメンションの値を削除します。

    ヒント:

    $LOOP_AGGMAP$LOOP_DENSEおよび$LOOP_VARプロパティを使用すると、OLAP_TABLEによる式のループ処理についてより詳しく指定できます。

    union_subclauseには、Oracle OLAPがループ対象のデータ値を識別するために使用するベース・ディメンションをどのように決定するかを正確に指定します。正確な結合が行われるためには、この副次句で参照されるオブジェクトのベース・ディメンションが一致する必要があります。union_subclauseの構文は次のとおりです。

           [ignore_phrase] [dense_phrase] UNION ({aggmap_phrase  | list_phrase }...)]

    ここで

    aggmap_phraseにはOracle OLAPで集計変数の値をどのようにループするかを指定します。構文は次のとおりです。

                 AGGMAP (ignore_phrase] [dense_phrase] aggmap {variable | dimension_list})

    list_phraseには、Oracle OLAPでコンポジット、パーティション・テンプレートまたはディメンションの値をどのようにループするかを指定します。構文は次のとおりです。

                 LIST ([ignore_phrase] [dense_phrase]  dimension_list)

    • ignore_phraseには、Oracle OLAPでループの対象外にするディメンション値を指定します。構文は次のとおりです。

      IGNORE (ignore_list )

      ignore_listには、次のいずれか1つ以上を(複数の場合はカンマで区切って)指定できます。

        dimension_name
        valueset_name
        COMPLEMENT (valueset_name)
      

      単独のignore_list内には、複数の方法でのディメンションの指定はできません。つまり、あるディメンションとそのディメンションの値セットを両方とも指定したり、1つのディメンションにつき2つの値セットを指定したりすることはできません。

      注意:

      IGNORE valueset-nameを指定した場合の結果は、LIMIT REMOVE valueset-nameを指定した場合と同様になります(LIMITコマンドを参照)。

    • dense_phraseには、Oracle OLAPでループの対象となる値を指定します(その値によって識別されるメジャー・セルにNAまたはNULLが含まれる場合でもループ対象となります)。DENSE句にディメンションを指定するのは、リレーショナルの外部結合を要求することと似ています。通常は、時系列処理を実行するために(期間の相対位置を変更する場合など)、DENSE句にディメンション値を含めます。DENSE句の構文は次のとおりです。

      DENSE (dense_list )

      dense_listには、次のいずれか1つ以上を(複数の場合はカンマで区切って)指定できます。

        dimension_name
        valueset_name
        COMPLEMENT (valueset_name)
      

      単独のdense_list内には、複数の方法でのディメンションの指定はできません。つまり、あるディメンションとそのディメンションの値セットを両方とも指定したり、1つのディメンションにつき2つの値セットを指定したりすることはできません。

      ただし、外側のDENSE句にディメンションの値セットを1つ指定し、内側のDENSEに同じディメンションの別の値セットを指定することは可能です。ディメンションまたはディメンションの値セットを、内側と外側両方のDENSE句に指定すると、Oracle OLAPはこの稠密な領域の結合全体をループします。ディメンション自体がどちらかの領域に現れた場合は、ディメンション全体を隈なくループします。

    • aggmapはaggmapオブジェクトの名前です。aggmapオブジェクトの名前のみを指定した場合、Oracle OLAPはそのaggmapのPRECOMPUTE句の値を基にしてループ対象の値を特定します。

    • variableaggmap_nameによって集計される変数の名前です。

    • dimension_listは1つ以上のコンポジット、パーティション・テンプレートまたはディメンションのリストです。

  • PREDMLCMD句

    PREDMLCMD句には、アナリティック・ワークスペースのデータがターゲット表にフェッチされる前に実行されるOLAP DMLコマンドを指定します。たとえば、結果が表にフェッチされるOLAPモデルまたは予測を実行する場合に使用できます。コマンドの結果は、制限マップを実行している間有効で、OLAP_TABLEの実行が完了した後のセッションにも引き継がれます。OLAP_TABLEにおける処理順序を参照してください。

  • POSTDMLCMD句

    POSTDMLCMD句には、アナリティック・ワークスペースのデータがターゲット表にフェッチされた後に実行されるOLAP DMLコマンドを指定します。たとえば、PREDMLCMD句のコマンドによって作成されたオブジェクトまたはデータを削除する場合や、PREDMLCMD句で変更されたディメンションのステータスをリストアする場合に使用できます。」OLAP_TABLEにおける処理順序を参照してください。

使用上の注意

制限マップ

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

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

関連項目:

limit_mapパラメータに関する説明

論理表

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

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

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

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

CREATE TYPE table_name AS TABLE OF object_name;

関連項目:

  • オブジェクト型については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』オブジェクト型についてに関する項を参照してください

  • 『Oracle Database SQL言語リファレンス』CREATE TYPEに関する項

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

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

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

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

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

表A-2 デフォルトのデータ型変換

アナリティック・ワークスペースのデータ型 SQLデータ型

ID

CHAR(8)

TEXT

VARCHAR2(4000)

TEXT(n)

VARCHAR2(n)

NTEXT

NVARCHAR2(4000)

NTEXT(n)

NVARCHAR2(n)

NUMBER

NUMBER

NUMBER(p,s)

NUMBER(p,s)

LONGINTEGER

NUMBER(19)

INTEGER

NUMBER(10)

SHORTINTEGER

NUMBER(5)

INTEGER WIDTH 1

NUMBER(3)

BOOLEAN

NUMBER(1)

DECIMAL

BINARY_DOUBLE

SHORTDECIMAL

BINARY_FLOAT

DATE

DATE

DAYWEEKMONTHQUARTERYEAR

DATE

DATETIME

TIMESTAMP

COMPOSITE

VARCHAR2(4000)

その他

VARCHAR2(4000)

olap_commandでの制限マップの使用

OLAP_TABLEの実行中に、アプリケーションでアナリティック・ワークスペースを即時に変更することが必要となる場合があります。

通常、olap_commandパラメータは、1つ以上のディメンションを制限するために使用します。制限マップでINHIERARCHY句を含むディメンションを制限する場合、該当するディメンションのステータスは、OLAP_TABLEコールの実行時にのみ変更されますが、この制限は、OLAPセッションの他の部分には影響しません。ただし、その他のコマンド(INHIERARCHY句で参照されていないディメンションを制限するコマンドなど)はセッションに影響します。

制限マップでのディメンションに対する制限を、コマンド実行時以外でもセッション全体を通して有効にするには、制限マップのPREDMLCMD句にそのコマンドを指定するか、またはSQL SELECT文にOLAP_CONDITIONファンクションを指定します。

olap_commandパラメータでLIMITコマンドを使用する例を次に示します。

'LIMIT product TO product_member_levelrel ''L2'''

関連項目:

OLAP_CONDITION

olap_commandパラメータでのFETCHの使用

olap_commandパラメータにOLAP DML FETCHコマンドを指定すると、OLAP_TABLEでは、制限マップでの指定ではなくこのコマンドを使用して、表オブジェクトのソース・データをフェッチします。このような使用方法から、olap_commandパラメータはデータ・マップと呼ばれることもあります。通常、FETCHコマンドを指定する場合は、制限マップを指定しないでください。

注意:

通常、SNAPI用にFETCHコマンドを使用していたExpressアプリケーションをアップグレードする場合にのみ、OLAP_TABLEFETCHコマンドを使用します。アップグレードする場合、Oracleでの完全な構文はExpress 6.3の構文と同じです。SNAPIで従来使用していたのと同じFETCHコマンドを、OLAP_TABLEでも使用できます。FETCHコマンドの構文については、FETCHを参照してください。

FETCHでは、アナリティック・ワークスペースのデータをどのように表オブジェクトにマップするかを明示的に指定します。基本の構文は次のとおりです。

FETCH expression...

各ターゲット列に対し1つの式を、行定義に指定されているとおりの順序で入力します。式は、空白またはカンマで区切ります。改行や継続マークを付けずに、文全体を1行で入力する必要があります。

OLAP_TABLEにおける処理順序

アナリティック・ワークスペースのディメンションのステータスを変更する制限マップ内の指定について、OLAP_TABLEファンクションが処理する順序を次に示します。

  1. 制限マップのPREDMLCMDパラメータに指定されているOLAP DMLコマンドを実行します。

  2. 後でリストアできるように、制限マップのすべてのディメンションの現在のステータスを保存します(ステータスのPUSH)。

  3. 制限マップのINHIERARCHY副次句で指定されているディメンション・メンバーのみステータスを保持します(LIMIT KEEP)。

  4. 手順3で設定されたステータスのうち、OLAP_TABLEファンクションを含むSELECT文のWHERE句の条件を満たすディメンション・メンバーのみを保持します(LIMIT KEEP)。

  5. OLAP_TABLEファンクションのolap_commandパラメータに指定されているOLAP DMLコマンドを実行します。(olap_commandFETCHが含まれている場合は、データをフェッチします。)

  6. データをフェッチします(olap_commandパラメータにOLAP DML FETCHコマンドが指定されていなかった場合)。

  7. 制限マップ内のすべてのディメンションのステータスをリストアします(ステータスのPOP)。

  8. 制限マップのPOSTDMLCMDパラメータに指定されているOLAP DMLコマンドを実行します。

アプリケーションにはそれぞれ固有の要件があるため、アナリティック・ワークスペースのデータをSQLにフェッチする方法としていくつかの一般的な形式があります。この項の例では、様々な形式を使用してビューを作成する方法を紹介します。

これらの例はビューの作成用として示されていますが、例の中のSELECT文は、アナリティック・ワークスペースのデータをアプリケーションにフェッチするためにそのまま使用できます。

注意:

この項の例では、事前定義されたADTを使用しています。自動ADTを使用するようにコードを修正することもできます。自動ADTを使用したOLAP_TABLEの使用を参照してください。

例A-5 OLAP_TABLEを使用して埋込み合計のディメンション・ビューを作成するスクリプト

この例のスクリプトは、MYAWというアナリティック・ワークスペースのTIMEディメンションの埋込み合計ビューを作成するPL/SQLスクリプトです。この例は、例A-2と似ていますが、ここではCalendar階層とFiscal階層を指定し、階層固有のEnd Date属性に対してHATTRIBUTE副次句を指定しています。

INHIERARCHY副次句には、ディメンションの各階層のすべてのディメンション・メンバーを示す、アナリティック・ワークスペース内の値セットを指定しています。OLAP_TABLEは、制限マップの処理時に、INHIERARCHY副次句が指定された制限マップ内のすべてのディメンションのステータスを保存します。」OLAP_TABLEにおける処理順序を参照してください。

CREATE TYPE awtime_row AS OBJECT (
             awtime_id               VARCHAR2(12),
             awtime_short_label      VARCHAR2(12),
             awtime_cal_end_date     DATE,
             awtime_fis_end_date     DATE);
/
CREATE TYPE awtime_table AS TABLE OF awtime_row;
/
CREATE OR REPLACE VIEW awtime_view AS
   SELECT awtime_id, awtime_short_label, 
          awtime_cal_end_date, awtime_fis_end_date
      FROM TABLE(OLAP_TABLE(
         'myaw DURATION SESSION',
         'awtime_table', 
         '',
         'DIMENSION awtime_id FROM time WITH 
             HIERARCHY time_parentrel 
                (time_hierlist ''CALENDAR'')
                INHIERARCHY time_inhier
                HATTRIBUTE awtime_cal_end_date  FROM time_cal_end_date
             HIERARCHY time_parentrel 
                (time_hierlist ''FISCAL'')
                INHIERARCHY time_inhier
                HATTRIBUTE awtime_fis_end_date  FROM time_fis_end_date
          ATTRIBUTE awtime_short_label  FROM time_short_description'));
/
SQL>SELECT * FROM awtime_view;

AWTIME_ID  AWTIME_SHORT_LABEL  AWTIME_CAL_END_DATE  AWTIME_FIS_END_DATE
---------  ------------------  -------------------  -------------------  
19         Jan-98              31-JAN-98            31-JAN-98
20         Feb-98              28-FEB-98            28-FEB-98
21         Mar-98              31-MAR-98            31-MAR-98
22         Apr-98              30-APR-98            30-APR-98
23         May-98              31-MAY-98            31-MAY-98
24         Jun-98              30-JUN-98            30-JUN-98
.                                                            
.                                                            
.                                                            
.                                                            
98         Q1-03               31-MAR-03            30-SEP-03
99         Q2-03               30-JUN-03            31-DEC-03
1          1998                31-DEC-98            30-JUN-99
102        2003                31-DEC-03            30-JUN-04
119        2004                31-DEC-04            30-JUN-05
2          1999                31-DEC-99            30-JUN-00
3          2000                31-DEC-00            30-JUN-01
4          2001                31-DEC-01            30-JUN-02
85         2002                31-DEC-02            30-JUN-03

作成されたビューに対してSELECT文を発行し、そのビューが正しく作成されたかどうか確認してください。OLAP_TABLEコールにエラーがあった場合は、このときにそのエラーが表示されます。

例A-6 OLAP_TABLEを使用して埋込み合計のメジャー・ビューを作成するスクリプト

スター・スキーマには、各ディメンション・ビューに結合可能な列を持つ個別のメジャー・ビューが必要です。この例では、ROW2CELL句によって移入された列を持つ、カスタム・メジャーをサポートするためのメジャー・ビューを作成するPL/SQLスクリプトを示します。ROW2CELLについては、ROW2CELL句を参照してください。

CREATE TYPE awunits_row AS OBJECT (
             awtime                  VARCHAR2(12),
             awcustomer              VARCHAR2(30),
             awproduct               VARCHAR2(30),
             awchannel               VARCHAR2(30),
             awunits                 NUMBER(16),
             r2c                     RAW(32));
/
CREATE TYPE awunits_table AS TABLE OF awunits_row;
/
CREATE OR REPLACE VIEW awunits_view AS
   SELECT awunits,
          awtime, awcustomer, awproduct, awchannel, r2c 
      FROM TABLE(OLAP_TABLE(
         'myaw DURATION SESSION', 
         'awunits_table', 
         '',
         'MEASURE awunits FROM units_cube_units
          DIMENSION awtime FROM time WITH
             HIERARCHY time_parentrel
          DIMENSION awcustomer FROM customer WITH 
             HIERARCHY customer_parentrel
                       (customer_hierlist ''MARKET_ROLLUP'')
                INHIERARCHY customer_inhier
          DIMENSION awproduct FROM product WITH
             HIERARCHY product_parentrel
          DIMENSION channel WITH
             HIERARCHY channel_parentrel
             ATTRIBUTE  awchannel FROM channel_short_description
          ROW2CELL r2c'))
      WHERE awunits IS NOT NULL;

SQL>SELECT awchannel, awunits FROM awunits_view 
     WHERE    awproduct = '1'
     AND      awcustomer = '7'
     AND      awtime = '4';

AWCHANNEL            AWUNITS
---------            -------
All Channels         415392
Direct Sales         43783 
Catalog              315737
Internet             55872 

例A-7 OLAP_TABLEを使用してPRODUCTのロールアップ・ビューを作成するスクリプト

ロールアップ形式では、各階層レベルの列を使用して、各ディメンション・メンバーの完全な親子関係が表されます。ロールアップ形式の構文と埋込み合計形式の構文の唯一の違いは、制限マップ内の各ディメンションの定義にFAMILYREL句が追加されることです。FAMILYRELについては、WITH HIERARCHY副次句を参照してください。

この例は、PRODUCTディメンションのロールアップ形式のビューを作成するためのPL/SQLスクリプトを示します。ここでは、例A-5の埋込み合計形式で使用した構文と制限マップの構文との違いを明らかにするためのディメンション・ビューが示されています。これらのレベルに対応するターゲット列は、最大集計レベル(CLASS)から最小集計レベル(ITEM)の順でFAMILYREL句に列記されていますが、これは、levellistディメンションにリストされる順序です。このファミリ・リレーションは、4つの列を返します。最大集計レベル(全商品)はNULLにマッピングされ、ビューでは省略されます。

例A-8では、FAMILYREL句に対して別の構文を使用しています。この構文では、QDRを使用して、ファミリ・リレーションからマップされる各列を正確に指定しています。

例A-7例A-8の制限マップは、まったく同じビューを生成します。

CREATE TYPE awproduct_row AS OBJECT (  
            class       VARCHAR2(50),
            family      VARCHAR2(50),
            item        VARCHAR2(50));
/
CREATE TYPE awproduct_table AS TABLE OF awproduct_row;
/
CREATE OR REPLACE VIEW awproduct_view AS
   SELECT class, family, item
      FROM TABLE(OLAP_TABLE(
         'myaw DURATION QUERY',
         'awproduct_table', 
         '',
         'DIMENSION product WITH 
            HIERARCHY product_parentrel
               FAMILYREL null, class, family, item
                  FROM product_familyrel USING product_levellist
                  LABEL product_short_description')); 

SQL> SELECT * FROM awproduct_view 
              ORDER BY class, family, item;

CLASS            FAMILY             ITEM
--------------   ----------------   ------------------------
Hardware          CD-ROM             Envoy External 6X CD-ROM  
Hardware          CD-ROM             Envoy External 8X CD-ROM  
Hardware          CD-ROM             External 6X CD-ROM  
Hardware          CD-ROM             External 8X CD-ROM  
Hardware          CD-ROM             Internal 6X CD-ROM  
Hardware          CD-ROM             Internal 8X CD-ROM  
Hardware          CD-ROM             
Hardware          Desktop PCs        Sentinel Financial  
Hardware          Desktop PCs        Sentinel Multimedia  
.
.
.
Software/Other   Operating Systems  UNIX/Windows 1-user pack  
Software/Other   Operating Systems  UNIX/Windows 5-user pack  
Software/Other   Operating Systems     
Software/Other

例A-8 OLAP_TABLEのFAMILYREL句でQDRを使用するスクリプト

CREATE OR REPLACE TYPE awproduct_row AS OBJECT (
             class       VARCHAR2(50),
             family      VARCHAR2(50),
             item        VARCHAR2(50));
/
CREATE TYPE awproduct_table AS TABLE OF awproduct_row;
/
CREATE OR REPLACE VIEW awproduct_view AS
   SELECT class, family, item
      FROM TABLE(OLAP_TABLE(
         'myaw DURATION QUERY',
         'awproduct_table', 
         '',
         'DIMENSION product WITH 
            HIERARCHY product_parentrel
               FAMILYREL class, family, item FROM
                  product_familyrel(product_levellist ''CLASS''),
                  product_familyrel(product_levellist ''FAMILY''),
                  product_familyrel(product_levellist ''ITEM'')
                  LABEL product_short_description')); 

SQL> SELECT * FROM awproduct_view 
              ORDER BY by class, family, item;

CLASS            FAMILY             ITEM
--------------   ----------------   ------------------------  
Hardware          CD-ROM             Envoy External 6X CD-ROM  
Hardware          CD-ROM             Envoy External 8X CD-ROM  
Hardware          CD-ROM             External 6X CD-ROM  
Hardware          CD-ROM             External 8X CD-ROM  
Hardware          CD-ROM             Internal 6X CD-ROM  
Hardware          CD-ROM             Internal 8X CD-ROM  
Hardware          CD-ROM             
Hardware          Desktop PCs        Sentinel Financial  
Hardware          Desktop PCs        Sentinel Multimedia  
.                                                 
.                                                 
.                                                 
Software/Other   Operating Systems  UNIX/Windows 1-user pack  
Software/Other   Operating Systems  UNIX/Windows 5-user pack  
Software/Other   Operating Systems     
Software/Other

例A-9 OLAP_TABLEでFETCHを使用するスクリプト

Oracle Databaseと連携するように変更されているOracle OLAP Serverアプリケーションでは、制限マップのかわりにOLAP DML FETCHコマンドを使用して、ワークスペース・オブジェクトをリレーショナル列にマップできます。

FETCHコマンドはOLAP_TABLEの3番目のパラメータに指定し、このパラメータでは、OLAP DMLコマンドを1つ指定します。「olap_command」を参照してください。

次のスクリプトは、MYAWアナリティック・ワークスペース内の2つの変数(SALESCOST)からデータをフェッチして、2つのカスタム・メジャー(COST_PRIOR_PERIODPROFIT)を計算します。この例では、ビューを作成せずにアプリケーションで直接OLAP_TABLEを使用する方法も示します。

次の例のFETCH文は、見やすくするためにインデントされています。実際にはFETCH文全体を1行で記述し、改行や継続記号は使用しないでください。

CREATE TYPE measure_row AS OBJECT (
             time                       VARCHAR2(20),
             geography                  VARCHAR2(30),
             product                    VARCHAR2(30),
             channel                    VARCHAR2(30),
             sales                      NUMBER(16),
             cost                       NUMBER(16),
             cost_prior_period          NUMBER(16),
             profit                     NUMBER(16));
/   
CREATE TYPE measure_table AS TABLE OF measure_row;
/
SELECT time, geography, product, channel, 
       sales, cost, cost_prior_period, profit
          FROM TABLE(OLAP_TABLE(
             'xademo DURATION SESSION', 
             'measure_table', 
             'FETCH time, geography, product, channel, analytic_cube_f.sales, 
                    analytic_cube_f.costs, 
                    LAG(analytic_cube_f.costs, 1, time, LEVELREL time_member_levelrel),
                    analytic_cube_f.sales - analytic_cube_f.costs',
             ''))
          WHERE channel =    'STANDARD_2.TOTALCHANNEL' AND
                product =    'L1.TOTALPROD' AND
                geography =  'L1.WORLD'
          ORDER BY time;

このSQL SELECT文は、次の結果セットを返します。

TIME      GEOGRAPHY PRODUCT      CHANNEL                 SALES       COST    COST_PRIOR_PERIOD    PROFIT
--------- --------- ------------ ----------------------- --------- --------- ------------------ --------
L1.1996   L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL 118247112   2490243                   115756869
L1.1997   L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  46412113   1078031          2490243   45334082
L2.Q1.96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  26084848    560379                    25524469
L2.Q1.97  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  26501765    615399           560379   25886367
L2.Q2.96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  30468054    649004           615399   29819049
L2.Q2.97  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  19910347    462632           649004   19447715
L2.Q3.96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  27781702    582693           462632   27199009
L2.Q4.96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  33912508    698166           582693   33214342
L3.APR96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL   8859808    188851                     8670957
                                              .
                                              .
                                              .
27 rows selected.

OLAP_CONDITION

OLAP_CONDITIONは、アナリティック・ワークスペースの問合せ中にOLAP DMLコマンドを動的に実行するSQLファンクションです。

OLAP_CONDITIONファンクションは、OLAP_TABLEのコールで使用される制限マップの3つの入力ポイントのうちの1つでOLAP DMLコマンドを実行します(「OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント」を参照)。

注意:

OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_CONDITIONの呼出しが成功した場合、数値1が返されます。

構文

OLAP_CONDITION(
          r2c          IN   RAW(32),
          expression   IN   VARCHAR2,
          event        IN   NUMBER DEFAULT 1);
      RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。このパラメータは、OLAP_TABLEの特定の呼出しを識別するためにOLAP_CONDITIONによって使用されます。

ROW2CELL列は、単一行ファンクションの処理で使用されます。(OLAP_EXPRESSIONを参照) OLAP_CONDITIONでは、単に識別子として使用されます。

ROW2CELL列の作成方法については、ROW2CELL句を参照してください。

expression

r2cパラメータによって特定される、OLAP_TABLEファンクションのコンテキスト内で実行される単独のOLAP DMLコマンド。

event

OLAP_TABLEの処理中に、expressionパラメータで指定されたOLAP DMLコマンドの実行をトリガーするイベント。このパラメータに指定できる値は、0、1または2です(表A-3を参照)。

使用上の注意

OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント

OLAP_CONDITIONのパラメータでは、OLAP_TABLEの呼出し、制限マップの入力ポイント、その入力ポイントで実行されるOLAP DMLコマンドが特定されます。

対象の制限マップにはROW2CELL列を含める必要があります。OLAP_CONDITIONは、この列を使用してOLAP_TABLEのインスタンスを識別します。そのインスタンス内で、OLAP_CONDITIONは3つの入力ポイントのいずれかでOLAP DMLコマンドを実行します。ユーザーが指定した入力ポイントによって、問合せで返されたデータに条件が影響するかどうか、および問合せの完了時にも条件が有効なままかどうかが決まります。

OLAP_CONDITIONは、次のいずれかの時点でトリガーされます。

  • 制限マップ内のディメンションのステータスが保存される前(結果セットが計算される前)

  • 結果セットが計算された後、フェッチされる前(デフォルト)

  • 結果セットがフェッチされ、制限マップ内のディメンションのステータスがリストアされた後

OLAP_CONDITIONの入力ポイントを次の表で説明します。各入力ポイントの発生時点を確認するには、OLAP_TABLEにおける処理順序を参照してください。

表A-3 OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント

入力ポイント 説明

0

制限マップのPREDMLCMD句が処理された後、制限マップ内のディメンションのステータスが保存される前に、OLAP DMLコマンドを実行する。

この入力ポイントは、OLAP_TABLEにおける処理順序12の間。

OLAP_CONDITIONが制限マップのいずれかのディメンションを制限する場合、その制限はOLAP_TABLEの実行後もワークスペースに維持される(ただし、制限マップのPOSTDMLCMD句に指定したコマンドによってステータスが変更されない場合)。

1

WHERE句の条件が満たされた後、データがフェッチされる前に、OLAP DMLコマンドを実行する。(デフォルト)。

この入力ポイントは、OLAP_TABLEにおける処理順序45の間。

FETCH以外のOLAP DMLコマンドをOLAP_TABLEolap_commandパラメータに指定した場合は、OLAP_CONDITIONの後、データがフェッチされる前に実行される。(olap_commandパラメータ、またはOLAP_CONDITION自体にFETCHコマンドを使用することは、一般的にはお薦めされない。olap_commandパラメータでのFETCHの使用を参照。)

OLAP_CONDITIONが制限マップのいずれかのディメンションを制限する場合、その制限は問合せの実行中のみ有効。

2

データがフェッチされ、制限マップ内のディメンションのステータスがリストアされた後に、OLAP DMLコマンドを実行する。

この入力ポイントは、OLAP_TABLEにおける処理順序8の後。

OLAP_CONDITIONがいずれかのディメンションを制限する場合、その制限は問合せが完了した後もアナリティック・ワークスペースに維持される。

OLAP_CONDITIONを使用する問合せの例を、例A-11に示します。これらの例では、MYAWというアナリティック・ワークスペースのPRICE_CUBEを使用しています。このキューブには、時間ディメンションと製品ディメンションがあり、単位原価と単位価格のメジャーが格納されています。

これらの例は、unit_cost_price_viewというビューを基にしています。このビューを作成するためのSQLを、例A-10に示します。アナリティック・ワークスペースのビューの作成方法については、OLAP_TABLEを使用したリレーショナル・ビューの作成を参照してください。

例A-10 PRICE_CUBEのビュー

-- 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(
         '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
                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...

例A-11 OLAP_CONDITIONを使用したUNIT_COST_PRICE_VIEWの問合せ

この例の問合せでは、OLAP_CONDITIONを使用して、例A-10UNIT_COST_PRICE_VIEWの問合せを変更します。それぞれの問合せのOLAP_CONDITIONでは、異なる入力ポイントを使用してTIMEディメンションを2000年に制限しています。

最初の問合せでは、OLAP_CONDIITONで入力ポイント0を使用しています。制限されたデータがOLAP_TABLEによって返され、この制限はアナリティック・ワークスペースでも有効なままです。

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');

次の問合せでは、OLAP_CONDIITONで入力ポイント1を使用しています。制限されたデータがOLAP_TABLEによって返されますが、この制限はアナリティック・ワークスペースでは有効ではありません。

この場合、入力ポイント1がデフォルトであるため、3番目のパラメータは指定しなくてもかまいません。

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');

最後の問合せでは、OLAP_CONDIITONで入力ポイント2を使用しています。この制限はOLAP_TABLEによって返されたデータには影響しませんが、アナリティック・ワークスペースでは有効なままです。

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 

OLAP_EXPRESSION

OLAP_EXPRESSIONは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLブール式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。

OLAP_EXPRESSION_TEXTは文字データを返します。テキスト・データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION_TEXTOLAP_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_TEXTOLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATEファンクションを使用します。

構文

OLAP_EXPRESSION(
          r2c                  IN   RAW(32),
          numeric_expression   IN   VARCHAR2)
      RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEのROW2CELL句を参照してください。

numeric_expression

数値を結果として返すOLAP DML式。

次のスクリプトは、unit_cost_price_viewを作成するためのものです。このビューは、OLAP_EXPRESSIONの使用例を示すために例A-12例A-13で使用されます。アナリティック・ワークスペースのビューの作成方法については、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;

このSELECT文は次の結果を返します。

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

OLAP_EXPRESSION_BOOL

OLAP_EXPRESSION_BOOLは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLブール式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。

OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、テキスト・データ、日付データを返すには、OLAP_EXPRESSIONOLAP_EXPRESSION_TEXTまたはOLAP_EXPRESSION_DATE SQLファンクションを使用します。

このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。

注意:

OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_TABLEによって返された表オブジェクトの各行に対するboolean_expressionの評価。

OLAP_EXPRESSION_BOOLは、falseの場合は0を、trueの場合は1をブール・データとして返します。数値データ、日付データ、テキスト・データを返すには、OLAP_EXPRESSIONOLAP_EXPRESSION_DATEまたはOLAP_EXPRESSION_TEXTファンクションを使用します。

構文

OLAP_EXPRESSION_BOOL(
          r2c                  IN   RAW(32),
          boolean_expression   IN   VARCHAR2)
      RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEのROW2CELL句を参照してください。

boolean_expression

ブール値を結果として返すOLAP DML式。

次のスクリプトは、awunits_viewを作成するためのものです。このビューは、OLAP_EXPRESSION_BOOLの使用例を示すために例A-14で使用されます。

サンプル・ビュー: MYAW_AW.AWUNITS_VIEW

-- Create the logical row
CREATE TYPE awunits_row AS OBJECT (
             awtime                  VARCHAR2(12),
             awcustomer              VARCHAR2(30),
             awproduct               VARCHAR2(30),
             awchannel               VARCHAR2(30),
             awunits                 NUMBER(16),
             r2c                     RAW(32));
/
-- Create the logical table
CREATE TYPE awunits_table AS TABLE OF awunits_row;
/
-- Create the view
CREATE OR REPLACE VIEW awunits_view AS
   SELECT awunits,
          awtime, awcustomer, awproduct, awchannel, r2c 
      FROM TABLE(OLAP_TABLE(
         'myaw_aw.myawaw DURATION SESSION', 
         'awunits_table', 
         '',
         'MEASURE awunits FROM units_cube_aw_units_aw
          DIMENSION awtime FROM time_aw WITH
             HIERARCHY time_aw_parentrel
          DIMENSION awcustomer FROM customer_aw WITH 
             HIERARCHY customer_aw_parentrel
                       (customer_aw_hierlist ''MARKET_ROLLUP_AW'')
                INHIERARCHY customer_aw_inhier
          DIMENSION awproduct FROM product_aw WITH
             HIERARCHY product_aw_parentrel
          DIMENSION channel_aw WITH
             HIERARCHY channel_aw_parentrel
             ATTRIBUTE  awchannel FROM channel_aw_short_description
          ROW2CELL r2c'))
      WHERE awunits IS NOT NULL;
/

次の問合せは、このビューの集計データの一部を返します。2001年の全市場での全商品の売上数量がチャネル別に示されます。

SQL> SELECT awchannel, awunits FROM awunits_view 
     WHERE    awproduct = '1'
     AND      awcustomer = '7'
     AND      awtime = '4';
     
AWCHANNEL            AWUNITS
---------            -------  
All Channels         415392  
Direct Sales         43783  
Catalog              315737  
Internet             55872  

次の文は、この問合せで使用されているProduct、Customer、Timeの各ディメンション・メンバーの説明を表示します。

SQL>execute dbms_aw.execute('limit product_aw to ''1''');
SQL>execute dbms_aw.execute('rpr product_aw_short_description');
 
PRODUCT_AW                 PRODUCT_AW_SHORT_DESCRIPTION
--------------- --------------------------------------------------
1               Total Product

SQL>execute dbms_aw.execute('limit customer_aw to ''7''');
SQL>execute dbms_aw.execute('rpr customer_aw_short_description');
 
CUSTOMER_AW               CUSTOMER_AW_SHORT_DESCRIPTION
--------------- --------------------------------------------------
7               Total Market
 
SQL>execute dbms_aw.execute('limit time_aw to ''4''');
SQL>execute dbms_aw.execute('rpr time_aw_short_description');
 
TIME_AW                     TIME_AW_SHORT_DESCRIPTION
--------------- --------------------------------------------------
4               2001

例A-14 SELECT構文のリストに指定されたOLAP_EXPRESSION_BOOL

この例では、サンプル・ビュー: MYAW_AW.AWUNITS_VIEWのビューを使用します。次のSELECT文は、lowest_unitsという別名が付いた式を計算しますが、この式は、各商品の個数が500個未満かどうかを示します。

SQL>SELECT awproduct products,
       olap_expression_bool(r2c, 'units_cube_aw_units_aw le 500') lowest_units
          FROM awunits_view
               WHERE     awproduct > 39
               AND       awproduct < 46 
               AND       awcustomer = '7'
               AND       awchannel = 'Internet'
               AND       awtime = '4';

PRODUCTS        LOWEST_UNITS
--------------- ------------
40              0
41              1
42              1
43              1
44              1
45              0

この問合せにより、商品41から44はすべて500個未満だったことが示されます。これらの商品は、ドイツ語、フランス語、スペイン語およびイタリア語のドキュメント・セットです。選択された商品は次のとおりです。

SQL>execute dbms_aw.execute
           ('limit product_aw to product_aw gt 39 and product_aw lt 46');
SQL>execute dbms_aw.execute('rpr product_aw_short_description');
 
PRODUCT_AW                 PRODUCT_AW_SHORT_DESCRIPTION
--------------- --------------------------------------------------
40              O/S Documentation Set - English
41              O/S Documentation Set - German
42              O/S Documentation Set - French
43              O/S Documentation Set - Spanish
44              O/S Documentation Set - Italian
45              O/S Documentation Set - Kanji

OLAP_EXPRESSION_DATE

OLAP_EXPRESSION_DATEは、OLAP_TABLEファンクションのコンテキスト内でOLAP DML日時式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。

OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、ブール・データ、テキスト・データを返すには、OLAP_EXPRESSIONOLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_TEXT SQLファンクションを使用します。

このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。

注意:

OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_TABLEによって返された表オブジェクトの各行に対するdate_expressionの評価。

OLAP_EXPRESSION_DATEは日付データを返します。数値データ、ブール・データ、テキスト・データを返すには、OLAP_EXPRESSIONOLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_TEXTファンクションを使用します。

構文

OLAP_EXPRESSION_DATE(
          r2c               IN   RAW(32),
          date_expression   IN   VARCHAR2)
      RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEのROW2CELL句を参照してください。

date_expression

日時を結果として返すOLAP DML式。

OLAP_EXPRESSIONおよびOLAP_EXPRESSION_BOOLで紹介されているOLAP単一行ファンクションの例を参照してください。

OLAP_EXPRESSION_TEXT

OLAP_EXPRESSION_TEXTは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLテキスト式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。

OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、ブール・データ、日付データを返すには、OLAP_EXPRESSIONOLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATE SQLファンクションを使用します。

このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。

注意:

OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_TABLEによって返された表オブジェクトの各行に対するtext_expressionの評価。

構文

OLAP_EXPRESSION_TEXT(
          r2c               IN   RAW(32),
          text_expression   IN   VARCHAR2)
      RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEのROW2CELL句を参照してください。

text_expression

テキストを結果として返すOLAP DML式。

OLAP_EXPRESSIONおよびOLAP_EXPRESSION_BOOLで紹介されているOLAP単一行ファンクションの例を参照してください。