MDX计算度量:获取每年1月至12月的累计求和
MDX实现年度全年累计Revenue求和方案
嘿,我来帮你搞定这个年度累计求和的需求!你想要把原来代码里的FirstMonth和LastMonth替换成当前年份的1月到12月,从而计算全年的Revenue累计值,对吧?结合你的2014-2017数据范围,我给你几个适配不同维度结构的解决方案:
方案1:日期维度有明确的年→月层级
如果你的[Ship Date].[Date]维度是标准的年→月→日层级结构,直接用Ancestor函数定位当前成员所属的年份,再取该年份的首尾月份即可:
Sum( Ancestor([Ship Date].[Date].CURRENT_MEMBER, [Ship Date].[Date].[Year]).FirstChild : Ancestor([Ship Date].[Date].CURRENT_MEMBER, [Ship Date].[Date].[Year]).LastChild, [Measures].[Revenue] )
- 解释:
Ancestor(..., [Year])会找到当前日期成员对应的年份节点,FirstChild就是该年的1月,LastChild是12月,这样求和范围就精准锁定在当前年份的全年。
方案2:当前成员已经是年份层级
如果你的查询上下文里,[Ship Date].[Date].CURRENT_MEMBER本身就是年份成员(比如直接筛选了2014年),可以简化成:
Sum( [Ship Date].[Date].CURRENT_MEMBER.FirstChild : [Ship Date].[Date].CURRENT_MEMBER.LastChild, [Measures].[Revenue] )
方案3:日期维度包含季度等中间层级
如果你的日期维度是年→季度→月→日的结构,用Descendants函数直接提取年份下所有月份会更稳妥,不受中间层级影响:
Sum( Descendants( Ancestor([Ship Date].[Date].CURRENT_MEMBER, [Ship Date].[Date].[Year]), [Ship Date].[Date].[Month], SELF ), [Measures].[Revenue] )
- 解释:
Descendants会直接返回指定年份下所有的月份成员,不管中间有没有季度,都能准确计算全年累计值。
这几个方案都不需要硬编码2014-2017的年份值,会自动适配当前上下文的年份,非常灵活!
内容的提问来源于stack exchange,提问作者SKenneth
相关产品推荐
相关产品推荐

