2013-03-13 94 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])