2012-08-13 54 views
1

此元组得到尺寸为[MyHierarchy].[MyHierarchy].&[some_value]的度量X的集合。MDX;获得除了名称之外的所有值的度量集合度量

([Measures].[X], [MyHierarchy].[MyHierarchy].&[some_value]) 

但什么是补体 - 即Measures.X在同一层次,但不包括[MyHierarchy].[MyHierarchy].&[some_value]

我敢肯定它的EXCEPT功能,但我似乎无法得到正确的语法。

回答

2

的总体思路,以任何一种集聚集了是一样的东西:

with member [Measures].[Y] as 
     aggregate( 
     except([hierarchy].members, { excluded }), 
     [Measures].[X]) 
     ) 

骨料()正在处理[措施]的任何实际的聚合。问题是,如果[层次结构] .members包含一些中间(父)成员,则会计算两次值。

如果聚集SUM和你已经一个所有成员,则给出预期的结果如下:

with member [Measures].[Y] as 
     ([hierarchy].[all], [Measures].[X]) 
     - sum({ excluded }, [Measures].[X]) 

如果没有所有那么你可以使用第一级成员:

with member [Measures].[Y] as 
     sum([hierarchy].levels(0), [Measures].[X]) 
     - sum({ excluded }, [Measures].[X]) 

_

+0

尼斯 - 所以基本上做我的自我钙 - 所有 - 不需要?感谢您的详细解释。我不知道LEVELS(0)。 – 2012-08-13 03:40:54

1

以下expresion可与非线性aggrega重刑功能:

WITH MEMBER [Measures].[Y] as 
     Aggregate( 
     Except([MyHierarchy].[MyHierarchy].&[some_value].Level.Members, { [MyHierarchy].[MyHierarchy].&[some_value] }), 
     [Measures].[X]) 
     ) 

你可以概括它时,你必须排除一些成员属于同一级别(排除的成员都在excludedMembers集):

WITH MEMBER [Measures].[Y] as 
     Aggregate( 
     Except(excludedMembers.Item(0).Level.Members , excludedMembers), 
     [Measures].[X]) 
     )