Ssas MDX自定义合并:仅合并最后一级子体
我正在寻找一个优雅的MDX表达式,它只对最后一级维度的元素求和: 我有一个度量M,还有一个层次化的父子维度U,它是非平衡树: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包含
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])