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などのコンテキスト依存のメンバー関数は含められません。 例:
ソース・タプルを、更新するターゲット・タプルにマップします。 |
target_tuple |
ソース・タプルからの値を入力するデータベース・リージョン。 ターゲット・タプルは、格納されたメンバー、動的計算/保管メンバー、またはメンバーベースの関数のみで構成される必要があります。動的メンバーは含められません。 例:
|
offset, creditmember, debitmember | 複式簿記のオプションのパラメータ。集約ストレージ・キューブのカスタム計算にのみ適用できます。これらのパラメータの詳細は、集約ストレージ・データベースでのカスタム計算と割当ての実行を参照してください。 |
USING load_buffer_method |
オプションであり、集約ストレージ・データベースでのみサポートされます。集約ストレージ・データベースを更新するときに使用するデータ・ロード・バッファ方式を指定します。 例:
メソッドが指定されていない場合、更新により値がロード・バッファの内容に置き換えられます。 |
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])
);