SSAS多维数据集月度累计求和度量值实现求助(基于Wide World Importers DW)
解决SSAS多维数据集月度累计求和的问题
嘿,我完全get到你的需求了——就是要做一个月度累计的度量值,选1月就返回1,选11月返回11,选12月就得到全年累计的12对吧?结合Wide World Importers数据仓库的场景,我给你两个靠谱的实现方法,都能搞定这个问题:
方法一:用*YTD(Year-to-Date)*函数快速实现(推荐,前提是时间维度配置正确)
如果你的时间维度已经正确设置了年份-月份的层次结构,并且标记了时间属性(比如把Calendar维度标记为时间维度),那直接用SSAS内置的YTD函数就能轻松搞定。
假设你现在已经有一个基础度量值(比如叫[Measures].[单月计数]),这个度量值单独选一个月份时返回1。那累计度量值的MDX代码可以这么写:
SumofMonths = YTD( [Date].[Calendar].[Month].CurrentMember, [Measures].[单月计数] )
YTD函数的作用就是自动定位到当前选中月份所在年份的第一个月,然后计算从那个月到当前月份的[单月计数]总和。刚好符合你的需求:选1月就加1次,11月加11次,12月加12次。
方法二:自定义累计范围(适配特殊时间维度场景)
要是你的时间维度没标记时间属性,或者有特殊的时间划分(比如财务年度和自然年度不一致),那可以手动定义累计的时间范围,灵活性更高:
SumofMonths = SUM( { [Date].[Calendar].[Month].FirstSibling : [Date].[Calendar].[Month].CurrentMember }, [Measures].[单月计数] )
这里的FirstSibling会获取当前选中月份所在年份的第一个月,冒号:用来定义从起始月到当前选中月的时间集合,最后用SUM函数把这个集合里的基础度量值加起来。效果和方法一完全一样,但适配性更强。
验证小提示:
- 先确认时间维度的
Month级别是正确归属到对应年份的,不然FirstSibling可能会拿到错误的起始月 - 测试的时候先选单个月份(比如1月),确认返回1;再选11月,看是不是11;最后选12月验证是否是12
如果还有问题,比如时间维度的配置细节不清楚,可以再补充说明你的维度结构,我再帮你调整~
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

