2013-03-13 91 views
2

這裏是從艾德一個簡單的例子:MDX計算成員並設置減法

with 

member test1 as sum([Measures].[Internet Sales Amount]) 
       - [Customer].[Customer].&[28187] 

member test2 as sum([Measures].[Internet Sales Amount]) 
       - sum([Customer].[Customer].&[28187],[Measures].[Internet Sales Amount]) 

member test3 as sum 
       (
        {[Customer].[Customer].children - [Customer].[Customer].&[28187]}, 
        [Measures].[Internet Sales Amount] 
       ) 

select {test1, test2, test3} on 0 
from [Adventure Works] 

結果幾乎相等,除「測試1」具有非貨幣類型的格式

問題:

  1. 「test1」calc-member:如何從「sum」的數字結果中減去「Customer」成員表達式?這看起來不合邏輯並且頭腦不靈。我希望算術減法,設置減法,但不是算術減法的成員...

  2. 所有(test1,test2,test3)邏輯上和「執行」相等的計算成員?如果不是,「test1」成員的正確顯式形式是什麼?它看起來像「test2」將在大多數情況下表現更好,因爲「test3」設置減法可能會導致非常大的設置。

+0

我會給一個嘗試except語句http://msdn.microsoft.com/library/ms144900.aspx – michele 2013-03-13 14:28:33

+0

「除了」只是一個快捷方式到「TEST3」 :[Customer]。[Customer]。[Customer]。[Customer]。&[28187]與Except相同([Customer]。[Customer] .children,[Customer]。[Customer]。&[28187] )。 「test3」(以任何形式)比「test2」慢了近10倍。 「test1」的工作速度比「test2」慢2倍。所以「test1」不是任何其他成員的捷徑...... – infideltfo 2013-03-14 05:39:15

回答

2

「test1」與「test2」相同。

正確明確的形式是

member test as ([Measures].[Internet Sales Amount]) 
       - ([Measures].[Internet Sales Amount], [Customer].[Customer].&[28187])