RollupChildren 関数の操作 (MDX)
多次元式 (MDX) RollupChildren 関数は、メンバの子をロールアップし、それぞれの子に異なる単項演算子を適用して、このロールアップの値を数値として返します。単項演算子は、子メンバに関連付けられたメンバ プロパティによって提供されるか、関数に直接指定される文字列式の場合もあります。
RollupChildren 関数の例
RollupChildren 関数を多次元式 (MDX) ステートメントで使用する方法は簡単に説明できますが、この関数が MDX クエリに与える影響は広範囲にわたります。
RollupChildren 関数は、既存のキューブ データに対して選択的な分析を実行するように設計されている MDX クエリに影響を与えます。たとえば、次の表は、Net Sales 親メンバの子メンバの一覧です。かっこ内は各子メンバの単項演算子です (UNARY_OPERATOR メンバ プロパティによって表されます)。
親メンバ |
子メンバ |
---|---|
Net Sales |
国内売上 (+) 国内返品 (-) 国外売上 (+) 国外返品 (-) |
現在、Net Sales 親メンバは、売上の総合計から、国内と国外の返品の合計値を差し引いた値に相当します。国内と国外の返品は、ロールアップの一部として減算されています。
ここで、国内と国外の返品は無視し、国内と国外の総売上が 10% 増加した場合の予測をすばやく簡単に行いたいとします。この値を計算するには、RollupChildren 関数を 2 つの方法で使用できます。1 つはカスタム メンバ プロパティを使用する方法で、もう 1 つは IIf 関数を使用する方法です。
カスタム メンバ プロパティの使用
ロールアップ計算を頻繁に実行する場合、特定の関数に対してそれぞれの子が使用する演算子を格納するメンバ プロパティを作成しておくという方法があります。次の表では、有効な単項演算子を示し、予期される結果を説明します。
演算子 |
結果 |
---|---|
+ |
合計 = 合計 + 現在の子 |
- |
合計 = 合計 - 現在の子 |
* |
合計 = 合計 * 現在の子 |
/ |
合計 = 合計 / 現在の子 |
~ |
子はロールアップでは使用されません。子の値は無視されます。 |
たとえば、SALES_OPERATOR というメンバ プロパティを作成し、次の表に示すように、単項演算子をそのメンバ プロパティに割り当てます。
親メンバ |
子メンバ |
---|---|
Net Sales |
国内売上 (+) 国内返品 (~) 国外売上 (+) 国外返品 (~) |
この新しいメンバ プロパティを使用すれば、次の MDX ステートメントで、総売上の予測をすばやく効率的に実行できます (国外と国内の返品は無視されます)。
RollupChildren([Net Sales], [Net Sales].CurrentMember.Properties("SALES_OPERATOR")) * 1.1
関数が呼び出されると、それぞれの子の値は、メンバ プロパティに格納されている演算子を使用して合計に算入されます。国内と国外の返品のメンバは無視され、RollupChildren 関数によって返されるロールアップ合計に 1.1 が乗算されます。
IIf 関数の使用
この例のような操作が一般的でない場合、または操作が 1 つの MDX クエリのみに適用される場合は、RollupChildren 関数と共に IIf 関数を使用して、同じ結果を得ることができます。次の MDX クエリでは、前の例の MDX クエリと同じ結果を返します。ただし、カスタム メンバ プロパティは使用していません。
RollupChildren([Net Sales], IIf([Net Sales].CurrentMember.Properties("UNARY_OPERATOR") = "-", "~", [Net Sales].CurrentMember.Properties("UNARY_OPERATOR))) * 1.1
MDX ステートメントは、子メンバの単項演算子を調べます。単項演算子が減算 (この例では、国内と国外の返品のメンバの場合) のために使用されている場合、IIf 関数はその代わりにティルダ (~) 単項演算子を使用します。それ以外の場合、IIf 関数は子メンバの単項演算子を使用します。最後に、返されたロールアップ合計に 1.1 が乗算され、国内と国外の総売上の予測値が得られます。