MDX挿入仕様

挿入句は、MDXを使用して、ソースからターゲットにタプルを挿入することにより、Essbaseデータベースを新しいデータで更新する方法です。

MDX挿入は、集約ストレージ・データベースおよびハイブリッド・モード・データベースでサポートされます。

構文

[WITH MEMBER calculated_member_name AS ' <numeric_value_expr> ']
INSERT
         <source_tuple> TO <target_tuple>
         ....
        <source_tuple> TO <target_tuple>
        [<offset> <debitmember> <creditmember>]
        [USING <load_buffer_method>]
INTO
          APP.DB
FROM
 ( 
        <nested_select_statement>
 )
[WHERE [<slicer_specification>]]

表4-13 MDX INSERT句の要素

Item 説明
source_tuple

データ値を取得するデータベース・リージョン。

ソース・タプルには、動的メンバーまたは格納されたメンバーを含められます。メンバーベースの関数は含められますが、CurrentMemberなどのコンテキスト依存のメンバー関数は含められません。

例:

  • "([Scenario].[S1], [Jan])"

  • "([Scenario].[S1])"

  • "([Measures].[Payroll])"

ソース・タプルを、更新するターゲット・タプルにマップします。

target_tuple

ソース・タプルからの値を入力するデータベース・リージョン。

ターゲット・タプルは、格納されたメンバー、動的計算/保管メンバー、またはメンバーベースの関数のみで構成される必要があります。動的メンバーは含められません。

例:

  • "([Actual])"

  • "([Actual], [Revised_payroll])"

  • "([Actual], [Year].CurrentMember.PrevMember)"

offset, creditmember, debitmember 複式簿記のオプションのパラメータ。集約ストレージ・キューブのカスタム計算にのみ適用できます。これらのパラメータの詳細は、集約ストレージ・データベースでのカスタム計算と割当ての実行を参照してください。
USING load_buffer_method

オプションであり、集約ストレージ・データベースでのみサポートされます。集約ストレージ・データベースを更新するときに使用するデータ・ロード・バッファ方式を指定します。

例:

  • USING Add Values

  • USING Subtract Values

メソッドが指定されていない場合、更新により値がロード・バッファの内容に置き換えられます。

INTO app.db Insert句の対象のデータベースに名前を付けるキューブ仕様。内部SELECT文のFROM句で使用されるキューブと同じである必要があります。
FROM nested_select_statement 挿入するタプルを取得するデータベース・リージョンを定義する内部Select文。

WITHセクションはオプションであり、計算されたメンバーを使用して、挿入するリージョンを定義できます。

WHEREセクションはオプションであり、スライサを定義できます。

ノート

  • ソース・タプルまたはターゲット・タプルで属性ディメンション・メンバーを使用しないでください。

  • ソース・タプル内で、CurrentMemberやPrevMemberなどのコンテキスト依存のメンバー関数を使用しないでください。

  • ソース・タプルとターゲット・タプルは同じディメンションである必要があります。たとえば、次のソース・タプルとターゲット・タプルは、格納されているターゲット・タプル[Scenario].[Actual]が、WITHセクションで定義された計算されたメンバーであるソース・タプル[Scenario].[S1]の形式と一致するため、同じディメンションになります。

     “([Scenario].[S1])” TO “([Scenario].[Actual])”
  • #Missing値は挿入またはコピーされません。

  • 割り当てられたフィルタによって挿入できるデータのリージョンが制限されることがあります。

  • INTO句のソース・キューブ(app.db)は、内部SELECT文のFROM句で使用されるソース・キューブと同じである必要があります。

例4-1 計算されたメンバーとネストされたSelect文

次の例では、計算されたメンバーM1をソース・タプルとして使用して、Sample BasicでターゲットメンバーCommissionを更新します。

WITH
           Member [Measures].[M1] as 'Sales * 0.1'
INSERT 
           "([Measures].[M1])" TO "([Measures].[Commission])"
INTO [Sample].[Basic]
FROM ( 
       SELECT 
             {[Measures].[M1]} on columns,
             {(Jan, Actual, [100-10], [New York])} on  ROWS
        FROM  [Sample].[Basic]
);

例4-2 データのコピー

次の例では、CrossJoinの内部Select文を使用して、あるアウトライン・メンバーから別のアウトライン・メンバーにデータをコピーします。

INSERT "([Measures].[Payroll])" TO "([Measures].[Revised_Payroll])"
INTO [Test].[Basic]
FROM (
       SELECT 
            {[Measures].[Payroll]} ON COLUMNS,
                {Crossjoin
                  (Crossjoin(Descendants([Year]), 
                   Crossjoin(Descendants([Scenario]),
                  Descendants([Product]))),
                  Descendants([Market]))} ON ROWS
       FROM [Test].[Basic]
);

例4-3 複数のタプルの挿入

次の例では、複数のタプルをTest.Basicに挿入します。

WITH
       Member [Measures].[M2] as 'Sales * 0.5'
INSERT 
       "([Measures].[M2])" 
        TO 
       "([Measures].[Commission])"

       "([East].[New York],[Measures].[Payroll])" 
        TO 
       "([Measures].[Revised_Payroll])"

INTO [Test].[Basic]
FROM (
       SELECT 
            {[Measures].[M2]} ON COLUMNS,
            {Crossjoin(Crossjoin(Descendants([Year]), 
             Crossjoin(Descendants([Scenario]), 
             Descendants([Product]))),  
             Descendants([Market]))} ON ROWS
      FROM [Test].[Basic]
);

例4-4 割当ての実行

次の例では、計算されたメンバーを使用して、Scenarioディメンションで割当てを実行します。

WITH MEMBER 
 [Scenario].[S1] 
AS 
 '([PY Actual], [Total Expenses]) * 
  ([Budget] / ([Total Expenses], [Budget]))'
INSERT 
 "([Scenario].[S1])" 
 TO 
 "([Scenario].[PY Actual])"
INTO 
 [Sample1].[Basic]
FROM 
 (SELECT  
   {[Scenario].[S1]} 
   ON COLUMNS,
    Crossjoin
     (Crossjoin
      ({[Jan]}, 
       Crossjoin([Total Expenses].Children, {[100],[200]})
     ), {[New York]}) 
   ON ROWS
   FROM 
   [Sample1].[Basic]
 );

前述のMDXの例には、次の計算スクリプトの例に示すように、ブロック・ストレージの割当てと同様の機能があります。

FIX("Total Expenses", {[Jan]}, [[New York]])
"PY Actual" = @ALLOCATE("PY Actual"->"Total Expenses",@CHILDREN("Total Expenses"), "Budget",,share);
ENDFIX

例4-5 メンバー・コンテキストを使用した挿入

次の例では、前年のコンテキストに基づいて、改訂された給与を更新します。

INSERT 
  "([Measures].[Payroll])" 
TO 
  "([Measures].[Revised_Payroll],[Year].CurrentMember.PrevMember)"

INTO [Test].[Basic]
FROM
 (
  SELECT  
   {[Measures].[Payroll]} 
   ON COLUMNS,
   {Descendants([Year])} 
   ON ROWS
   FROM [Test].[Basic]
   WHERE ([Actual],[100-10],[New York])
 );

例4-6 カスタム計算の実行

次の例では、集約ストレージ・データベースでカスタム計算を実行します。

WITH 

 MEMBER [Amount Type].[AT1] 
 AS 
 'CASE 
   WHEN IS ([Account].CurrentMember, [ACC19802]) 
    THEN ([ACC19802],[CC10000],[ORG63],[Beginning Balance]) 
   WHEN IS([Account].CurrentMember, [ACC19803]) 
    THEN ([ACC19803],[FEB-05/06],[ORG00],[CC20000],[Beginning Balance]) * 2
   WHEN IS([Account].CurrentMember, [ACC19804]) 
    THEN ([ACC19804],[Feb-05/06],[ORG65],[CC19000],[Beginning Balance]) * 
         ([ACC19803],[Feb-08],[ORG63],[CC12000],[Beginning Balance])
   WHEN IS([Account].CurrentMember, [ACC19805]) 
    THEN ([ACC12000],[Beginning Balance]) + ([ACC19802],[Beginning Balance]) + 20
   WHEN IS([Account].CurrentMember, [ACC19806]) 
    THEN ([ACC19805],[Feb-08],[ORG63],[CC12000],[Beginning Balance])- 0.00000020e7
   WHEN IS([Account].CurrentMember, [ACC19807]) 
    THEN 1
   ELSE Missing
  END'

 MEMBER [Amount Type].[AT3] 
 AS 
 'IIF
   ([Amount Type].[AT1] < 0, 
   [Amount Type].[AT1] * -1, Missing)'

 MEMBER [Amount Type].[AT4] 
 AS 
 'IIF
  ([Amount Type].[AT1] >= 0, 
   [Amount Type].[AT1], Missing)'	
							 
 MEMBER [Amount Type].[AT5] 
 AS 
 'IIF(IS([Organisation].CurrentMember, [ORG00]) 
  AND IS([Account].CurrentMember, [ACC19807]),
   SUM(Crossjoin(
    [ACC19801].Children, 
    {[ORGT].Children}),
   [Amount Type].[AT1]), Missing)'
            
 MEMBER [Amount Type].[AT6] 
 AS 
 'IIF
  ([Amount Type].[AT5] < 0, 
   [Amount Type].[AT5] * -1, Missing)'

 MEMBER [Amount Type].[AT7] 
 AS 
 'IIF
  ([Amount Type].[AT5] >= 0,
   [Amount Type].[AT5], Missing)'

INSERT

 "([Amount Type].[AT3])" 
 TO 
 "([Allocations],[Beginning Balance Credit])"

 "([Amount Type].[AT4])" 
 TO 
 "([Allocations],[Beginning Balance Debit])"

 "([Amount Type].[AT6])" 
 TO 
 "([Allocations],[Beginning Balance Debit],[ORG66])"

 "([Amount Type].[AT7])" 
 TO 
 "([Allocations],[Beginning Balance Credit],[ORG66])"

INTO 
   [Gl].[Basic]

FROM 
(
   SELECT 
      {[ACC19801].Children} 
   ON COLUMNS,
      {Crossjoin(Crossjoin([ORGT].Children,[CCT].Children),
      {[Amount Type].[AT1],
       [Amount Type].[AT3],
       [Amount Type].[AT4],
       [Amount Type].[AT5],
       [Amount Type].[AT6],
       [Amount Type].[AT7]})} 
   ON ROWS
   FROM 
    [Gl].[Basic]
   WHERE 
     ([Actual],[PUBT],[OUTT], [Feb-08],[FRED],[ANLT])
);

例4-7 カスタム割当ての実行

次の例では、集約ストレージ・データベースでカスタム割当てを実行します。

WITH 
 MEMBER [Amount Type].[AT1] 
 AS 
  '([Beginning Balance],[ORG63],[CC10000])'

 MEMBER [Amount Type].[AT2] 
 AS 
 '[Amount Type].[AT1]/
   Count(
    Crossjoin(
     {[Beginning Balance Credit]},
      CrossJoin(
       Descendants(
        [ORGT],
        [Organisation].Levels(0)
       ),
       Descendants([CCT],[Cost Centre].Levels(0))
       )
      )
     )'

 MEMBER [Amount Type].[AT3] 
 AS 
 'IIF([Amount Type].[AT2] < 0, [Amount Type].[AT2] * -1, Missing)'

 MEMBER [Amount Type].[AT4] 
 AS 
 'IIF([Amount Type].[AT2] >= 0, [Amount Type].[AT2], Missing)'

 MEMBER [Amount Type].[AT5] 
 AS 
 'IIF(IS([Organisation].CurrentMember, [ORG00]) 
  AND IS([Cost Centre].currentMember,[CC19000]) 
  AND [Amount Type].[AT1] < 0, [Amount Type].[AT1] * -1, Missing)'

 MEMBER [Amount Type].[AT6] 
 AS 
 'IIF (IS([Organisation].currentMember, [ORG00]) 
 AND IS([Cost Centre].currentMember,[CC19000]) 
 AND [Amount Type].[AT1] >= 0, [Amount Type].[AT1], Missing)'

INSERT 
 "([Amount Type].[AT3],[Scenario])" 
 TO 
 "([Allocations],[Beginning Balance Credit])"

 "([Amount Type].[AT4],[Scenario])" 
 TO 
 "([Allocations], [Beginning Balance Debit])"

 "([Amount Type].[AT5],[Scenario])" 
 TO "([Allocations],[Beginning Balance Debit],[ORG63],[CC19000])"

 "([Amount Type].[AT6],[Scenario])" 
 TO 
 "([Allocations],[Beginning Balance Credit],[ORG63],[CC19000])"
	 
INTO [Gl].[Basic]
FROM 
 (
   SELECT 
   {[Amount Type].[AT1],
    [Amount Type].[AT2],
    [Amount Type].[AT3],
    [Amount Type].[AT4],
    [Amount Type].[AT5],
    [Amount Type].[AT6]} 
   ON COLUMNS,
   {Crossjoin(
    [Acc19801].Children, 
     CrossJoin(
      Descendants(
       [ORGT],[Organisation].Levels(0)
      ),
      Descendants(
      [CCT],[Cost Centre].Levels(0)
      )
     )
    )} 
   ON ROWS
   FROM [Gl].[Basic]
   WHERE ([ANLT],[OUTT],[Scenario],[PUBT],[FRED],[Feb-08])
 );