【问题标题】:MDX; Get aggregation of measure over all values in a hiercharchy except named onesMDX;获取层次结构中除命名值之外的所有值的度量聚合
【发布时间】:2012-08-09 06:23:59
【问题描述】:

这个元组让我得到了 [MyHierarchy].[MyHierarchy].&[some_value] 维度中度量 X 的聚合。

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

但是什么是补充 - 即同一层次结构中的Measures.X 但不包括 [MyHierarchy].[MyHierarchy].&[some_value]

我确定这是 EXCEPT 函数,但我似乎无法正确理解语法。

【问题讨论】:

    标签: ssas hierarchy mdx


    【解决方案1】:

    聚合任何类型的集合的一般想法是这样的:

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

    Aggregate() 正在处理 [Measures] 的任何实际聚合。问题是,如果 [hierarchy].members 包含一些中间(父)成员,那么您的值将被计算两次。

    如果聚合是 SUM 并且您有一个 all 成员,那么下面给出了预期的结果:

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

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

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

    _

    【讨论】:

    • 很好 - 所以基本上我自己的计算都是 - not_wanted?感谢您的详细解释。我不知道 LEVELS(0)。
    【解决方案2】:

    以下表达式适用于非线性聚合函数:

    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] )
           )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多