OLAP_TABLE
は、アナリティック・ワークスペースから多次元データを抽出し、そのデータを2次元のリレーショナル表に表示するSQLファンクションです。
OLAP_TABLE
ファンクションは、アナリティック・ワークスペースの多次元データを論理表として返します。
OLAP_TABLE
が入力パラメータに指定された情報を処理する順番については、「OLAP_TABLEにおける処理順序」で説明します。
OLAP_TABLE
は、アナリティック・ワークスペースに対して問合せを発行するための、データベースの基本的メカニズムです。SQL文の中で、表またはビューの名前を指定したい任意の部分にOLAP_TABLE
ファンクション・コールを指定できます。
OLAP_TABLE
は、リレーショナル表およびビューに結合可能なオブジェクトの表、またはOLAP_TABLE
によって移入された別のオブジェクトの表に結合可能なオブジェクトの表を返します。
注意: OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。 |
構文
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;
パラメータ
ソース・データが格納されているアナリティック・ワークスペースの名前を指定します。また、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の使用」を参照してください。
事前定義されたオブジェクトの表の名前(「事前定義されたADTを使用したOLAP_TABLEの使用」を参照)。
このパラメータはオプションです。自動ADTを使用する場合、このパラメータは省略します。
このパラメータの構文は次のとおりです。
'table_name'
次に例を示します。
'product_dim_tbl'
table_nameパラメータを指定する場合、返されるデータの列のデータ型は事前定義されたものになります。この場合は、制限マップでAS
句を使用できません。
table_nameパラメータを省略する場合、返されるデータの列のデータ型は実行時に生成されます。ターゲットのデータ型は、制限マップのAS
句で指定するか、またはデフォルトのデータ型(表A-1「デフォルトのデータ型変換」を参照)を使用します。「自動ADTを使用したOLAP_TABLEの使用」を参照してください。
単独のOLAP DMLコマンド。複数のコマンドを実行する場合は、アナリティック・ワークスペース内にプログラムを作成し、そのプログラムをこのパラメータでコールする必要があります。このパラメータは、OLAP DMLで使用できるほとんどのデータ操作コマンドを処理することが可能で、柔軟かつ機能的です。
OLAP_TABLE
がolap_commandパラメータを処理する順番については、「OLAP_TABLEにおける処理順序」で説明します。
このパラメータの構文は次のとおりです。
'olap_command'
olap_commandパラメータは、次の2つの用途に使用できます。
ワークスペース・セッションでデータがフェッチされる直前(すべての制限が適用された後)に変更を行う(「olap_commandパラメータでのFETCHの使用」を参照)。
制限マップを使用するかわりにソース・データを直接指定する(「olap_commandでの制限マップの使用」を参照)。
ワークスペース・オブジェクトをリレーショナル列にマップして、各オブジェクトのロールを指定します。「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は、その階層に対する後続の副次句(INHIERARCHY
、GID
、PARENTGID
、FAMILYREL
および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句に指定されたオブジェクトのディメンションではないディメンションの値を削除します。
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つの値セットを指定したりすることはできません。
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
では、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。
論理表
OLAP_TABLE
によって移入される論理表は、実際には表型です。また、その行は、抽象データ型またはADTとも呼ばれるユーザー定義のオブジェクト型です。
ユーザー定義のオブジェクト型は、表の各列に相当する属性で構成されます。行を定義するための基本的な構文は次のとおりです。
CREATE TYPE object_name AS OBJECT ( attribute1 datatype, attribute2 datatype, attributen datatype);
表型はオブジェクト型の集合で、この集合は表の各行に相当します。表型を作成するための基本的な構文は次のとおりです。
CREATE TYPE table_name AS TABLE OF object_name;
関連項目:
|
事前定義された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
で使用されるデフォルトのデータ型変換を示します。
アナリティック・ワークスペースのデータ型 | SQLのデータ型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
その他 |
|
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_commandパラメータでのFETCHの使用
olap_commandパラメータにOLAP DML FETCHコマンドを指定すると、OLAP_TABLE
では、制限マップでの指定ではなくこのコマンドを使用して、表オブジェクトのソース・データをフェッチします。このような使用方法から、olap_commandパラメータはデータ・マップと呼ばれることもあります。通常、FETCH
コマンドを指定する場合は、制限マップを指定しないでください。
注意: 通常、SNAPI用にFETCH コマンドを使用していたExpressアプリケーションをアップグレードする場合にのみ、OLAP_TABLE でFETCH コマンドを使用します。アップグレードする場合、Oracleでの完全な構文はExpress 6.3の構文と同じです。SNAPIで従来使用していたのと同じFETCH コマンドを、OLAP_TABLE でも使用できます。FETCH コマンドの構文については、「FETCH」を参照してください。 |
FETCH
では、アナリティック・ワークスペースのデータをどのように表オブジェクトにマップするかを明示的に指定します。基本の構文は次のとおりです。
FETCH expression...
各ターゲット列に対し1つの式を、行定義に指定されているとおりの順序で入力します。式は、空白またはカンマで区切ります。改行や継続マークを付けずに、文全体を1行で入力する必要があります。
OLAP_TABLEにおける処理順序
アナリティック・ワークスペースのディメンションのステータスを変更する制限マップ内の指定について、OLAP_TABLE
ファンクションが処理する順序を次に示します。
制限マップのPREDMLCMD
パラメータに指定されているOLAP DMLコマンドを実行します。
後でリストアできるように、制限マップのすべてのディメンションの現在のステータスを保存します(ステータスのPUSH
)。
制限マップのINHIERARCHY
副次句で指定されているディメンション・メンバーのみステータスを保持します(LIMIT KEEP
)。
手順3で設定されたステータスのうち、OLAP_TABLE
ファンクションを含むSELECT
文のWHERE
句の条件を満たすディメンション・メンバーのみを保持します(LIMIT KEEP
)。
OLAP_TABLE
ファンクションのolap_commandパラメータに指定されているOLAP DMLコマンドを実行します。(olap_commandにFETCH
が含まれている場合は、データをフェッチします。)
データをフェッチします(olap_commandパラメータにOLAP DML FETCH
コマンドが指定されていなかった場合)。
制限マップ内のすべてのディメンションのステータスをリストアします(ステータスのPOP
)。
制限マップのPOSTDMLCMD
パラメータに指定されているOLAP DMLコマンドを実行します。
例
アプリケーションにはそれぞれ固有の要件があるため、アナリティック・ワークスペースのデータをSQLにフェッチする方法としていくつかの一般的な形式があります。この項の例では、様々な形式を使用してビューを作成する方法を紹介します。
これらの例はビューの作成用として示されていますが、例の中のSELECT
文は、アナリティック・ワークスペースのデータをアプリケーションにフェッチするためにそのまま使用できます。
例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つの変数(SALES
とCOST
)からデータをフェッチして、2つのカスタム・メジャー(COST_PRIOR_PERIOD
とPROFIT
)を計算します。この例では、ビューを作成せずにアプリケーションで直接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;
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.