使用 RollupChildren 函數 (MDX)
多維度運算式 (MDX) RollupChildren 函數可積存成員的子系,將不同的一元運算子套用至每個子系,然後將此積存的值以數字傳回。一元運算子可由與子成員相關的成員屬性提供,或者可能是字串運算式直接將運算子提供給函數。
RollupChildren 函數範例
要說明使用多維度運算式 (MDX) 陳述式的 RollupChildren 函數是很簡單,但此函數對 MDX 查詢的影響相當廣泛。
RollupChildren 函數會對為了對現有的 Cube 資料,執行選擇性分析而設計 MDX 查詢的產生影響。例如,下表包含 Net Sales 父成員的子成員清單,以及在括號中顯示它們的一元運算子 (以 UNARY_OPERATOR 成員屬性代表)。
父成員 | 子成員 |
---|---|
Net Sales |
Domestic Sales (+) Domestic Returns (-) Foreign Sales (+) Foreign Returns (-) |
Net Sales 父成員目前是淨銷售量的總和減去國內外總銷售量值,而國內外退貨量則當作積存減去。
但是,您想要外加 10% 以簡單、快速地預測 國內外銷售總額,而不理會國內外的退貨量。若要計算此值,您能以下其中一個方式使用 RollupChildren 函數:利用自訂成員屬性,或利用IIf 函數。
使用自訂成員屬性
如果將會經常執行積存計算作業,其中一個方法是建立一個成員屬性,儲存供每個子系當作特定函數使用的運算子。下表顯示有效的一元運算子,而且描述了預期的結果。
運算子 | 結果 |
---|---|
+ |
總計 = 總計 + 目前的子系 |
- |
總計 = 總計 - 目前的子系 |
* |
總計 = 總計 * 目前的子系 |
/ |
總計 = 總計 / 目前的子系 |
~ |
子系不會被用在積存中。子系的值會被忽略。 |
例如,您可以建立一個稱為 SALES_OPERATOR 的成員屬性,將以下的一元運算子指派給此成員屬性,如下表所示。
父成員 | 子成員 |
---|---|
Net Sales |
Domestic Sales (+) Domestic Returns (~) Foreign Sales (+) Foreign Returns (~) |
有了這個新的成員屬性,以下 MDX 陳述式就可以快速且有效地執行銷售總額估計作業 (忽略國內外退貨量):
RollupChildren([Net Sales], [Net Sales].CurrentMember.Properties("SALES_OPERATOR")) * 1.1
當呼叫此函數時,就會使用成員屬性中儲存的運算子,將每個子系的值套用到總計。國內外退貨量會被忽略,而且 RollupChildren 函數所傳回的積存總計會乘以 1.1。
使用 IIf 函數
如果範例作業不會經常執行,或如果該作業只會套用到一個 MDX 查詢,那麼 IIf 函數跟 RollupChildren 函數搭配使用,就可以提供相同的結果。以下的 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,作為國內外銷售總額的預測值。