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

前
 
次
 

ADD_DIMENSION_MEMBER

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 ]])

パラメータ

CALL

ADD_DIMENSION_MEMBERは引数を持つOLAP DMLプログラムであるため、OLAP DMLのCALL文を使用して起動します。

member_id

キューブ・ディメンションに追加するメンバーの値を示すテキスト式。

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

hier_list

ディメンション・メンバーの追加先となるすべての階層のOracleデータ・ディクショナリ名で構成された複数行のテキスト式。1行ごとに1つの階層を指定します。

メンバーをすべてのキューブ・ディメンション階層に追加する場合は、NAを指定します。

level_name

レベル階層の場合に、プログラムによってメンバーがキューブ・ディメンションに追加される階層レベルを指定するテキスト値。レベル階層の場合、level_nameに指定する値は、次の条件を満たしている必要があります。

  • parent_member_idに指定する値と互換性があること。

  • 既存のキューブ・ディメンション・メンバーと同じ階層レベルであること(キューブ・ディメンション・メンバーはすべての階層で同じレベルに追加する必要があります)。

メンバーが値階層に含まれている場合(つまりレベルが存在しない場合)は、NAを指定します。

parent_member_id

キューブ・ディメンションに追加するメンバーの親メンバーの値を指定するテキスト式。メンバーを階層の最上位メンバーとして追加する場合は、NAを指定します。

auto_compile

関連するアナリティック・ワークスペース・オブジェクト(親リレーションなど)を即時更新するかどうかを指定するブール式。デフォルト値であるTRUEを指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーに追加する必要のあるものはすべて即座に更新されます。パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。


注意:

この引数に対して指定した値に関係なく、新しいメンバーは常にディメンションに即時追加されます。これは、コンパイル中にエラーが通知された場合でも同様です。

merge

プログラムによってディメンション・メンバーの更新(ディメンション・メンバーが存在する場合)またはディメンション・メンバーの作成(ディメンション・メンバーが存在しない場合)を行うかどうかを指定するブール式。デフォルト値はFALSEです。

使用上の注意

キューブ・ディメンションの明示的なコンパイル

auto_compileFALSEを指定した場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります。コンパイルの実行には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_compileFALSEが指定されていると、コール・エラーがスローされます。

例9-5 OLAPキューブ・ディメンションへのメンバーの追加

この例では、my_timeという名前のOLAPキューブ・ディメンションにメンバーを追加します。

  1. 次の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.
    
  2. 次の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
    
  3. 次のPL/SQL文を発行し、my_timeキューブ・ディメンションをコンパイルします。

     exec dbms_cube.build('MY_TIME USING (COMPILE)');
    
  4. コンパイル後に、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.
    
  5. 次のPL/SQL文を実行し、新しい階層でmy_cubeを解決します。

    exec dbms_cube.build(script => 'MY_CUBE USING (SOLVE)', add_dimensions => false);
    
  6. 次の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.