Ssas MDX自定义合并:仅合并最后一级子体

Ssas MDX自定义合并:仅合并最后一级子体,ssas,mdx,Ssas,Mdx,我正在寻找一个优雅的MDX表达式,它只对最后一级维度的元素求和: 我有一个度量M,还有一个层次化的父子维度U,它是非平衡树: R -> ( M = R1 + R2 = 157 ) ..R1 -> ( M = R11 + R12 = 150 ) ...R11 -> ( M=R111 = 100 ) .....R111 -> M=100 ...R12 -> M = 50 ..R2 -> M = 7 我有一个集合,其中包含来自此维度的一些元素: S包含

我正在寻找一个优雅的MDX表达式,它只对最后一级维度的元素求和:

我有一个度量M,还有一个层次化的父子维度U,它是非平衡树:

R -> ( M = R1 + R2 = 157 )
..R1 ->  ( M = R11 + R12 = 150 )
...R11 ->   ( M=R111 = 100 )
.....R111 ->   M=100
...R12 ->  M = 50
..R2 -> M = 7
我有一个集合,其中包含来自此维度的一些元素:

S包含R11、R111、R12

现在我需要为U.currentMember取M值(即,最后一级子代的总和)

我写过这样一句话,它很有效,但也许它们是一种更优雅的表达方式:

with member measures.XX as
sum ( 
       intersect( 
            [S], 
            Except( 
              descendants( [U].currentMember ),
              existing( descendants( [U].currentMember ).item(0) )
            )                 
       ) 
   , 
   [M]
)    
select 
 measures.xx on columns
from [CUBE]
 where [U].[R]         

注意:此MDX不运行:

with member measures.XX as
sum ( 
       intersect( 
            [S], 
            descendants( [U].currentMember )
       ) 
   , 
   [M]
)    
select 
 measures.xx on columns
from [CUBE]
 where [U].[R]         
因为返回250而不是150

正确的结果是150:R11+R12(因为R111包含在R11中)

坏结果是:两次R11+R111取250:'100'值


最终解决方案:

with member measures.XX as
sum(    
    intersect ( 
       descendants([U].currentMember,,leaves),
       [S]
    ) 
   , 
   [M]
)    
select 
 measures.XX on 0,
descendants( [Unitats].[Unitat].[All] ) on 1
   from [C]

不确定要计算什么,但假设[Member]是要评估的成员:

我会使用,并且:


您正在添加所有的子代,包括它本身,这些子代都是叶子(没有子代)。

@sehe:我已经重写了这个问题。谢谢。听起来很奇怪,这不是SSAS的错误吗?你用SUM作为聚合方法创建了度量吗?hi@icCube,是的,这很奇怪。是的,总和是加总法。你对你的事实没有异议,你正在为R11成员定义一个值?您可以使用钻取函数“ISLEAF函数要求1参数使用一个成员表达式。使用了元组集表达式”。我正在寻找类似“从成员ISLEAF所在的集合中选择成员”的函数
 Sum( 
   Filter( Descendants( [Member] ), isLeaf(Member_hierarchy.currentmember) )
   ,[M])