ADD_DIMENSION_MEMBERプログラムを実行すると、OLAPキューブ・ディメンションにメンバーが追加されます。OLAPキューブ・ディメンション(OLAP論理ディメンションとも呼ばれる)は、Oracleデータ・ディクショナリでファースト・クラス・データ・オブジェクトとして定義されているOLAPディメンションです。
注意: キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。 |
構文
CALL ADD_DIMENSION_MEMBER(member_id, logical_dim, hier_list, level_name, -
parent-member_id, [ auto_compile, [ merge ]])
パラメータ
ADD_DIMENSION_MEMBERは引数を持つOLAP DMLプログラムであるため、OLAP DMLのCALL文を使用して起動します。
キューブ・ディメンションに追加するメンバーの値を示すテキスト式。
変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。
ディメンション・メンバーの追加先となるすべての階層のOracleデータ・ディクショナリ名で構成された複数行のテキスト式。1行ごとに1つの階層を指定します。
メンバーをすべてのキューブ・ディメンション階層に追加する場合は、NA
を指定します。
レベル階層の場合に、プログラムによってメンバーがキューブ・ディメンションに追加される階層レベルを指定するテキスト値。レベル階層の場合、level_nameに指定する値は、次の条件を満たしている必要があります。
parent_member_idに指定する値と互換性があること。
既存のキューブ・ディメンション・メンバーと同じ階層レベルであること(キューブ・ディメンション・メンバーはすべての階層で同じレベルに追加する必要があります)。
メンバーが値階層に含まれている場合(つまりレベルが存在しない場合)は、NA
を指定します。
キューブ・ディメンションに追加するメンバーの親メンバーの値を指定するテキスト式。メンバーを階層の最上位メンバーとして追加する場合は、NA
を指定します。
関連するアナリティック・ワークスペース・オブジェクト(親リレーションなど)を即時更新するかどうかを指定するブール式。デフォルト値であるTRUE
を指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーに追加する必要のあるものはすべて即座に更新されます。パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。
注意: この引数に対して指定した値に関係なく、新しいメンバーは常にディメンションに即時追加されます。これは、コンパイル中にエラーが通知された場合でも同様です。 |
プログラムによってディメンション・メンバーの更新(ディメンション・メンバーが存在する場合)またはディメンション・メンバーの作成(ディメンション・メンバーが存在しない場合)を行うかどうかを指定するブール式。デフォルト値はFALSE
です。
使用上の注意
キューブ・ディメンションの明示的なコンパイル
auto_compileでFALSE
を指定した場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります。コンパイルの実行にはDBMS_CUBE.BUILD
パッケージ・コールを使用します。このコールを実行するには、Analytic Workspace Manager内で次の文を発行しますが、ここでcube_dimension_nameは、Oracleデータ・ディクショナリで定義されたキューブ・ディメンションの完全修飾名です。
SQL PROCEDURE DBMS_CUBE.BUILD('cube_dimension_name USING (COMPILE)');
デフォルトでは、前述の文を発行すると、データベースに対してUPDATEとCOMMITが実行されます。UPDATEとCOMMITが実行されないようにするには、次に示すようにNO COMMITを文に追加します。
SQL PROCEDURE DBMS_CUBE.BUILD'NO COMMIT cube_dimension_name USING (COMPILE)');
OLAP論理オブジェクトの名前の値を指定する場合のガイドライン
OLAP DML文において、OLAP論理オブジェクト(キューブやキューブ・ディメンションなど、Oracleデータ・ディクショナリで定義されているOLAPのファースト・クラス・オブジェクト)に対して指定するテキスト式は、次の形式の値に解決できる必要があります。ここでのLOGICAL_OBJECT_NAMEは、OLAPオブジェクトのOracleデータ・ディクショナリ名です。
[SCHEMA_NAME.] LOGICAL_OBJECT_NAME
たとえば、XADEMOスキーマのXADEMOキューブ・ディメンションを参照する場合、有効な式には次の記述が含まれます。
'product' 'xademo.product' 'PRODUCT' 'XADEMO.product' '\"XADEMO\".\"PRODUCT\"'
注意: OLAP DMLのキューブ対応のプログラムでは、OLAP論理オブジェクトに対して指定したテキスト値は大文字のテキストとして解釈されます(テキスト値を二重引用符で囲んだ場合を除く)。 |
キューブ対応のOLAP DML文におけるトランザクションの有効範囲
特に明記されていないかぎり、キューブ対応のOLAP DML文の有効範囲は、その他のOLAP DML文と同様に単一のセッションです。変更を維持するには、キューブ対応のOLAP DML文の発行前にアナリティック・ワークスペースを読取り/書込みモードでアタッチしておき、キューブ対応のOLAP DML文を実行した後でOLAP DML UPDATE文とCOMMIT文を発行する必要があります。アナリティック・ワークスペースが読取り専用モードでアタッチされている場合やUPDATE文とCOMMIT文を発行しない場合、変更内容は、アナリティック・ワークスペースがアタッチされている間のセッション内でのみ有効になります。
キューブ対応のOLAP DML文で無効なレベル名
level_nameまたはparent_member_idに無効な値を指定すると、コンパイル時にエラーがスローされます。また、メンバーの階層レベルを指定する場合に、そのメンバーが別の階層ですでに追加されているレベルとは異なるレベルを指定した場合にもエラーが発生します。この場合、auto_compileにFALSE
が指定されていると、コール・エラーがスローされます。
例
例9-5 OLAPキューブ・ディメンションへのメンバーの追加
この例では、my_time
という名前のOLAPキューブ・ディメンションにメンバーを追加します。
次のPL/SQL文を実行して、変更を加える前のmy_time
キューブ・ディメンションの値と階層に関するレポートを生成します。
select dim_key||' '||level_name||' '||parent from my_time_lvl_hier_view order by dim_key asc; DIM_KEY||''||LEVEL_NAME||''||PARENT ------------------------------------------------------------------------------- L1_0 L1 L1_1 L1 L2_1 L2 L1_1 L2_2 L2 L1_1 L3_1 L3 L2_1 L3_2 L3 L2_1 L3_3 L3 L2_2 L3_4 L3 L2_2 L3_5 L3 L2_2 9 rows selected.
次のPL/SQL文を実行して、ADD_LQ_2
という名前のユーザー作成のOLAP DMLプログラムを実行します。
exec dbms_aw.execute('call my_util_aw!add_l1_2');
ユーザー作成のOLAP DMLプログラムADD_LQ_2
の定義を次に示します。このプログラムを実行すると、OLAP DMLから提供されるADD_DIMENSION_MEMBER
プログラムがコールされ、my_time
キューブ・ディメンションに新しいメンバーが追加されます。
DEFINE ADD_L1_2 PROGRAM PROGRAM VARIABLE _aw_dim text VARIABLE _aw_sales text VARIABLE _members text VARIABLE _member text VARIABLE _i integer _aw_dim = OBJORG(DIM 'my_time') _aw_sales = OBJORG(MEASURE 'my_cube' 'sales') " Adds L1_2, L2_3, L3_6 CALL ADD_DIMENSION_MEMBER('L1_2', 'my_time', NA, 'L1', NA, NO) CALL ADD_DIMENSION_MEMBER('L2_3', 'my_time', NA, 'L2', 'L1_2', NO) CALL ADD_DIMENSION_MEMBER('L3_6', 'my_time', NA, 'L3', 'L2_3', NO) " Set my_time attribute (to meaningless values) so dimension can compile LIMIT &_aw_dim TO 'L1_2', 'L2_3', 'L3_6' _members = VALUES(&_aw_dim) _i = 1 WHILE _i LE NUMLINES(_members) DO _member = EXTLINES(_members, _i, 1) _i = _i + 1 CALL UPDATE_ATTRIBUTE_VALUE(_member, 'my_time', 'start_date', - to_date('01/01/08', 'MM/DD/YY'), NO) CALL UPDATE_ATTRIBUTE_VALUE(_member, 'my_time', 'timespan', 1, NO) DOEND &_aw_sales(&_aw_dim 'L3_6') = 3 UPDATE COMMIT END
次のPL/SQL文を発行し、my_time
キューブ・ディメンションをコンパイルします。
exec dbms_cube.build('MY_TIME USING (COMPILE)');
コンパイル後に、my_time
キューブ・ディメンションの値と階層に関するレポートを生成します。
select dim_key||' '||level_name||' '||parent from my_time_lvl_hier_view order by dim_key asc; DIM_KEY||''||LEVEL_NAME||''||PARENT ------------------------------------------------------------------------------- L1_0 L1 L1_1 L1 L1_2 L1 L2_1 L2 L1_1 L2_2 L2 L1_1 L2_3 L2 L1_2 L3_1 L3 L2_1 L3_2 L3 L2_1 L3_3 L3 L2_2 L3_4 L3 L2_2 L3_5 L3 L2_2 L3_6 L3 L2_3 12 rows selected.
次のPL/SQL文を実行し、新しい階層でmy_cube
を解決します。
exec dbms_cube.build(script => 'MY_CUBE USING (SOLVE)', add_dimensions => false);
次のPL/SQL文を発行して、my-cubeのsales
およびmoving_sales
メジャーの値に関するレポートを生成します。新しいmy_time
キューブ・ディメンションの値が表示されます。
select my_time||' '||lpad(sales, 2)||' '||lpad(moving_sales, 2) from my_cube_view order by my_time asc; MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2) -------------------------------------------------------------------- L1_0 24 27 L1_1 14 38 L1_2 3 3 L2_1 2 5 L2_2 12 14 L2_3 3 3 L3_1 1 4 L3_2 1 2 L3_3 10 11 L3_4 1 11 L3_5 1 2 L3_6 3 3 12 rows selected.