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

前
 
次
 

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-1「デフォルトのデータ型変換」を参照)を使用します。「自動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副次句のキーワードについて、次に説明します。

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

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

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

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

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

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

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

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

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

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

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

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

      • 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の構文は次のとおりです。集計変数の値をどのようにループするかを指定します。

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

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

    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句の値を基にしてループ対象の値を特定します。

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

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

アナリティック・ワークスペースのデータ型 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「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」と似ていますが、ここでは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「OLAP_TABLEを使用して埋込み合計のディメンション・ビューを作成するスクリプト」の埋込み合計形式で使用した構文と制限マップの構文との違いを明らかにするためのディメンション・ビューが示されています。これらのレベルに対応するターゲット列は、最大集計レベル(CLASS)から最小集計レベル(ITEM)の順でFAMILYREL句に列記されていますが、これは、levellistディメンションにリストされる順序です。このファミリ・リレーションは、4つの列を返します。最大集計レベル(全商品)はNULLにマッピングされ、ビューでは省略されます。

例A-8「OLAP_TABLEのFAMILYREL句でQDRを使用するスクリプト」では、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.