この付録では、アナリティック・ワークスペースから多次元データを抽出して2次元のリレーショナル表の形式で表示できる次のSQLファンクションについて説明します。
OLAP_TABLEは、リレーショナル表およびビューに結合可能なオブジェクトの表、またはOLAP_TABLEによって移入された別のオブジェクトの表に結合可能なオブジェクトの表を返すSQLファンクションです。SQL文の中で、表またはビューの名前を指定したい任意の部分にOLAP_TABLEファンクション・コールを指定できます
OLAP_TABLEは、制限マップを使用して、アナリティック・ワークスペース内で定義されているディメンションやメジャーを、論理表の列にマップします。制限マップとSQL SELECT文のWHERE句が組み合されて、アナリティック・ワークスペース内で実行される一連のOLAP DML LIMITコマンドが生成されます。
OLAP_TABLEでは、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。
制限マップでのディメンション階層のマッピングをサポートするためには、アナリティック・ワークスペース内で次のオブジェクトが事前定義されている必要があります。
親リレーション: 階層内の各ディメンション・メンバーの親を識別します。詳細は、「parentrelリレーション」を参照してください。
階層ディメンション: ディメンションの階層を表します。詳細は、「hierlistディメンション」を参照してください。
階層内変数または値セット: 階層の各レベルに属するディメンション・メンバーを表します。詳細は、「inhier値セットまたは変数」を参照してください。
グルーピングID変数: 各ディメンション・メンバーの階層内の深さを識別します。詳細は、「gidrelリレーション」を参照してください。
ファミリ・リレーション: 階層内の各ディメンション・メンバーの完全な親子関係を表します。詳細は、「familyrelリレーション」を参照してください。
レベル・ディメンション: ディメンションのレベルを表します。詳細は、「levellistディメンション」を参照してください。
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では、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。
|
関連項目:
|
オブジェクトを格納する表は、事前に定義することも、動的に生成することもできます。表型を事前にデータベース内に作成しておけば、その表はOLAP_TABLEをコールしたときにいつでも使用できます。一般に、動的にオブジェクトを生成する問合せよりも、事前定義されたオブジェクトを使用する問合せの方がパフォーマンスに優れています。
例A-1「事前定義されたADTを使用してビューを作成するためのテンプレート」は、事前定義されたADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。
例A-1 事前定義されたADTを使用してビューを作成するためのテンプレート
SET ECHO ON SET SERVEROUT ON DROP TYPE table_obj; DROP TYPE row_obj; CREATE TYPE row_obj AS OBJECT ( column_first datatype, column_next datatype, column_n datatype); / CREATE TYPE table_obj AS TABLE OF row_obj; / CREATE OR REPLACE VIEW view_name AS SELECT column_first, column_next, column_n FROM TABLE(OLAP_TABLE( 'analytic_workspace', 'table_obj', 'olap_command', 'limit_map')); / COMMIT; / GRANT SELECT ON view_name TO PUBLIC;
例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」では、OLAP_TABLEと事前定義された表型を使用して、MYAW_AWスキーマ内のMYAWというアナリティック・ワークスぺースのTIMEディメンションのリレーショナル・ビューを作成します。
OLAP_TABLEコールの1番目のパラメータはアナリティック・ワークスペースの名前です。2番目は事前定義された表型の名前です。4番目は、ワークスペース・ディメンションと事前定義された表型の列とのマッピングを指定する制限マップです。3番目のパラメータは指定されていません。
例A-2 事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー
CREATE TYPE time_cal_row AS OBJECT (
time_id varchar2(32),
cal_short_label varchar2(32),
cal_end_date date,
cal_timespan number(6));
CREATE TYPE time_cal_table AS TABLE OF time_cal_row;
CREATE OR REPLACE VIEW time_cal_view AS
SELECT time_id, cal_short_label, cal_end_date, cal_timespan
FROM TABLE(OLAP_TABLE(
'myaw_aw.myaw duration session',
'time_cal_table',
'',
'DIMENSION time_id from time with
HIERARCHY time_parentrel
INHIERARCHY time_inhier
ATTRIBUTE cal_short_label from time_short_description
ATTRIBUTE cal_end_date from time_end_date
ATTRIBUTE cal_timespan from time_time_span'));
表型の名前が引数として指定されていない場合、OLAP_TABLEは、制限マップの情報を使用して自動的に論理表を生成します。この場合、その表型は、SQL SELECT文をコールするコンテキスト内で、実行時にしか使用できません。
例A-3「自動ADTを使用してビューを作成するためのテンプレート」は、自動ADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。
例A-3 自動ADTを使用してビューを作成するためのテンプレート
SET ECHO ON SET SERVEROUT ON CREATE OR REPLACE VIEW view_name AS SELECT column_first, column_next, column_n FROM TABLE(OLAP_TABLE( 'analytic_workspace', '', 'olap_command', 'limit_map')); / COMMIT; / GRANT SELECT ON view_name TO PUBLIC;
例A-4「自動ADTを使用するTIMEディメンションのビュー」では例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」と同じビューが作成されますが、事前定義された表型を使用するかわりに、自動的にADTを生成します。ここでは、制限マップでAS句を使用してターゲット列のデータ型を指定しています。
例A-4 自動ADTを使用するTIMEディメンションのビュー
CREATE OR REPLACE VIEW time_cal_view AS
SELECT time_id, cal_short_label, cal_end_date, cal_timespan
FROM TABLE(OLAP_TABLE(
'myaw_aw.myaw duration session',
null,
null,
'DIMENSION time_id AS varchar2(32) FROM time WITH
HIERARCHY time_parentrel
INHIERARCHY time_inhier
ATTRIBUTE cal_short_label AS VARCHAR2(32) from time_short_description
ATTRIBUTE cal_end_date AS DATE from time_end_date
ATTRIBUTE cal_timespan AS NUMBER(6) from time_time_span'));
ユーザーが制限マップのAS句でデータ型を指定しなかった場合、OLAP_TABLEがADTを自動生成する際にはターゲット列に対してデフォルトのリレーショナル・データ型が使用されます。OLAP_TABLEで使用されるデフォルトのデータ型変換については、表A-2「デフォルトのデータ型変換」を参照してください。
OLAP_TABLEでは、アナリティック・ワークスペースの多次元データを表形式で表すために制限マップを使用します。制限マップによって、論理表の列が特定されます。OLAP_EXPRESSIONファンクションを指定するか、または問合せのSELECT構文のリストにブール・ファンクション、テキスト・ファンクション、日付ファンクションのいずれかを指定することによって、計算された列をリレーショナル・ビューに追加できます。SELECT構文のリストにいずれかのファンクションを指定した場合は、そのファンクションの結果に対応する追加の列がOLAP_TABLEによって生成されます。
これらの式のいずれかを使用する前に、OLAP_TABLEで使用される制限マップにROW2CELL句を指定して、OLAP単一行ファンクションによって使用される情報を移入するRAW列を指定する必要があります。
OLAP DMLコマンドは、SELECT FROM OLAP_TABLE文内で使用できます。詳細は次の項で説明します。
一般に、SQLファンクションは、問い合された表またはビューのすべての行について単独の結果行を返す単一行ファンクションです。Oracleでは、事前定義された複数のSQL単一行ファンクションをサポートしており、たとえば、数値データを返すCOS、LOG、ROUND、文字データを返すUPPERやLOWERなどがあります。
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句内で)指定できます。
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_CONDITIONはOLAP_TABLE内に埋め込まれていないため移植が可能で、様々な入力ポイントで適用できるので汎用性があります。
OLAP_TABLEは、問合せの結果セットを生成するLIMITコマンドの実行前に、制限マップ内のディメンションのステータスを保存します。データがフェッチされた後、OLAP_TABLEはディメンションのステータスをリストアします。ディメンションのステータスが保存される前にOLAP DMLコマンドが実行されるようにするには、制限マップでPREDMLCMD句を指定します。PREDMLCMD句による変更は、OLAP_TABLEの実行後もワークスペース内に保持されます(POSTDMLCMD句で変更を無効にする場合を除く)。詳細は、limit_mapを参照してください。
OLAP_TABLEのolap_commandパラメータには、結果セットがフェッチされる直前に実行されるOLAP DMLコマンドを指定します。一部の環境では、olap_commandパラメータにOLAP DML FETCHコマンドが含まれていることがあり、その場合はこのコマンドによってフェッチが管理されます。olap_commandパラメータによって設定された制限は、OLAP_TABLEの実行中のみ有効です。詳細は、olap_commandを参照してください。
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-2「デフォルトのデータ型変換」を参照)を使用します。「自動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句」を参照してください。
表A-1に、HIERARCHY副句のキーワードを示します。
表A-1 HIERARCHY副句のキーワード
| キーワード | 説明 |
|---|---|
|
|
|
|
|
OLAP APIを使用するJavaアプリケーションの場合、
|
|
|
|
|
|
これらの列は、level_dimension(アナリティック・ワークスペース内にある、すべてのディメンション・レベルの名前を格納しているディメンション)の順序に従って指定します。詳細は、「levellistディメンション」を参照してください。 特定のレベルを除外するには、対象の列にNULLを指定します。
|
|
|
|
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には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つの値セットを指定したりすることはできません。
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-2に、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.
OLAP_CONDITIONは、アナリティック・ワークスペースの問合せ中にOLAP DMLコマンドを動的に実行するSQLファンクションです。
OLAP_CONDITIONファンクションは、OLAP_TABLEのコールで使用される制限マップの3つの入力ポイントのうちの1つでOLAP DMLコマンドを実行します(「OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント」を参照)。
|
注意: OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。 |
構文
OLAP_CONDITION(
r2c IN RAW(32),
expression IN VARCHAR2,
event IN NUMBER DEFAULT 1);
RETURN NUMBER;
パラメータ
制限マップのROW2CELL句で指定された列の名前。このパラメータは、OLAP_TABLEの特定の呼出しを識別するためにOLAP_CONDITIONによって使用されます。
ROW2CELL列は、単一行ファンクションの処理で使用されます。(「OLAP_EXPRESSION」を参照) OLAP_CONDITIONでは、単に識別子として使用されます。
ROW2CELL列の作成方法については、「ROW2CELL句」を参照してください。
r2cパラメータによって特定される、OLAP_TABLEファンクションのコンテキスト内で実行される単独のOLAP DMLコマンド。
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の入力ポイントを表A-3で説明します。各入力ポイントの発生時点を確認するには、「OLAP_TABLEにおける処理順序」を参照してください。
表A-3 OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント
| 入力ポイント | 説明 |
|---|---|
|
0 |
制限マップの この入力ポイントは、「OLAP_TABLEにおける処理順序」の1と2の間。
|
|
1 |
この入力ポイントは、「OLAP_TABLEにおける処理順序」の4と5の間。
|
|
2 |
データがフェッチされ、制限マップ内のディメンションのステータスがリストアされた後に、OLAP DMLコマンドを実行する。 この入力ポイントは、「OLAP_TABLEにおける処理順序」の8の後。
|
例
OLAP_CONDITIONを使用する問合せの例を、例A-11「OLAP_CONDITIONを使用したUNIT_COST_PRICE_VIEWの問合せ」に示します。これらの例では、MYAWというアナリティック・ワークスペースのPRICE_CUBEを使用しています。このキューブには、時間ディメンションと製品ディメンションがあり、単位原価と単位価格のメジャーが格納されています。
これらの例は、unit_cost_price_viewというビューを基にしています。このビューを作成するためのSQLを、例A-10「PRICE_CUBEのビュー」に示します。アナリティック・ワークスペースのビューの作成方法については、「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-10「PRICE_CUBEのビュー」のUNIT_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_TABLEファンクションのコンテキスト内でOLAP DMLブール式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。
OLAP_EXPRESSION_TEXTは文字データを返します。テキスト・データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION_TEXT、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATE SQLファンクションを使用します。
このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。
|
注意: OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。 |
戻り値
OLAP_TABLEによって返された表オブジェクトの各行に対するnumeric_expressionの評価。
OLAP_EXPRESSIONは数値データを返します。テキスト・データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION_TEXT、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATEファンクションを使用します。
パラメータ
制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。
数値を結果として返すOLAP DML式。
例
次のスクリプトは、unit_cost_price_viewを作成するためのもので、このビューは、OLAP_EXPRESSIONの使用例を示すために例A-12「OLAP_EXPRESSION: WHERE句内の時系列ファンクション」および例A-13「OLAP_EXPRESSION: ORDER BY句内での数値計算」で使用されます。アナリティック・ワークスペースのビューの作成方法については、「OLAP_TABLEを使用したリレーショナル・ビューの作成」を参照してください。
サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW
-- Create the logical row
CREATE TYPE unit_cost_price_row AS OBJECT (
aw_unit_cost NUMBER,
aw_unit_price NUMBER,
aw_product VARCHAR2(50),
aw_time VARCHAR2(20),
r2c RAW(32));
/
-- Create the logical table
CREATE TYPE unit_cost_price_table AS TABLE OF unit_cost_price_row;
/
-- Create the view
CREATE OR REPLACE VIEW unit_cost_price_view AS
SELECT aw_unit_cost, aw_unit_price, aw_product, aw_time, r2c
FROM TABLE(OLAP_TABLE(
'myaw DURATION SESSION',
'unit_cost_price_table',
'',
'MEASURE aw_unit_cost FROM price_cube_unit_cost
MEASURE aw_unit_price FROM price_cube_unit_price
DIMENSION product WITH
HIERARCHY product_parentrel
INHIERARCHY product_inhier
ATTRIBUTE aw_product FROM product_short_description
DIMENSION time WITH
HIERARCHY time_parentrel
INHIERARCHY time_inhier
ATTRIBUTE aw_time FROM time_short_description
ROW2CELL r2c'));
/
次の問合せは、このビューの集計データの一部を返します。
SQL>SELECT * FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('2000', '2001', '2002', '2003')
ORDER BY aw_time;
AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_TIME R2C
------------ ------------- ---------- ------- -----
211680.12 224713.71 Hardware 2000 00...
195591.60 207513.16 Hardware 2001 00...
184413.05 194773.78 Hardware 2002 00...
73457.31 77275.06 Hardware 2003 00...
例A-12 OLAP_EXPRESSION: WHERE句内の時系列ファンクション
この例では、「サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW」のビューを使用します。
次のSELECT文は、PERIODAGOという別名の付いた式を計算し、結果セットを、計算後の値が50,000より大きいものに制限します。この計算は、LAGファンクションを使用して、1つ前の期間の値を返します。
SQL>SELECT aw_time time, aw_unit_cost unit_cost,
OLAP_EXPRESSION(r2c,
'LAG(price_cube_unit_cost, 1, time,
LEVELREL time_levelrel)') periodago
FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND OLAP_EXPRESSION(r2c,
'LAG(price_cube_unit_cost, 1, time,
LEVELREL time_levelrel)') > 50000;
このSELECT文は次の結果を返します。
TIME UNIT_COST PERIODAGO -------------------- ---------- ---------- 2003 73457.31 184413.05 2004 73457.31 1999 231095.4 162526.92 2000 211680.12 231095.4 2001 195591.6 211680.12 2002 184413.05 195591.6 Q2-99 57587.34 57856.76 Q3-99 59464.25 57587.34 Q4-99 56187.05 59464.25 Q1-00 53982.32 56187.05 Q2-00 53629.74 53982.32 Q3-00 53010.65 53629.74 Q4-00 51057.41 53010.65 Q1-01 49691.22 51057.41
例A-13 OLAP_EXPRESSION: ORDER BY句内での数値計算
この例では、「サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW」のビューを使用します。
この例では、価格からコストを引いて、その式にMARKUPという別名を付けます。返される行は、利幅(MARKUP)の高い順に並べられます。
SQL>SELECT aw_time time, aw_unit_cost unit_cost, aw_unit_price unit_price,
OLAP_EXPRESSION(r2c,
'PRICE_CUBE_UNIT_PRICE - PRICE_CUBE_UNIT_COST') markup
FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('1998', '1999', '2000', '2001')
ORDER BY OLAP_EXPRESSION(r2c,
'PRICE_CUBE_UNIT_PRICE - PRICE_CUBE_UNIT_COST') DESC;
TIME UNIT_COST UNIT_PRICE MARKUP -------------------- ---------- ---------- --------- 1999 231095.40 245412.91 14317.51 2000 211680.12 224713.71 13033.59 2001 195591.60 207513.16 11921.56 1998 162526.92 173094.41 10567.49
OLAP_EXPRESSION_BOOLは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLブール式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。
OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、テキスト・データ、日付データを返すには、OLAP_EXPRESSION、OLAP_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_EXPRESSION、OLAP_EXPRESSION_DATEまたはOLAP_EXPRESSION_TEXTファンクションを使用します。
パラメータ
制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。
ブール値を結果として返す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_TABLEファンクションのコンテキスト内でOLAP DML日時式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。
OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、ブール・データ、テキスト・データを返すには、OLAP_EXPRESSION、OLAP_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_EXPRESSION、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_TEXTファンクションを使用します。
パラメータ
制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。
日時を結果として返すOLAP DML式。
OLAP_EXPRESSION_TEXTは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLテキスト式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。
OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATE SQLファンクションを使用します。
このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。
|
注意: OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。 |
パラメータ
制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。
テキストを結果として返すOLAP DML式。