如何在MDX查询的IIF函数中使用日期范围实现指定区间数据聚合
实现方案
你可以通过SUM遍历日期维度成员+IIF区间判断的组合实现需求,不需要用到WHERE子句或额外筛选器,参考MDX写法如下:
WITH MEMBER [Measures].[指定区间销售配额汇总] AS SUM( -- 遍历日期维度的日期级所有成员 [Date].[Date].[Date].MEMBERS, IIF( -- 判断当前日期是否落在目标区间内 [Date].[Date].CurrentMember.MemberValue >= CDate("2002-07-01") AND [Date].[Date].CurrentMember.MemberValue <= CDate("2002-11-30"), -- 符合区间条件则返回对应度量值,否则返回0不参与求和 [Measures].[Sales Amount Quota], 0 ) ) SELECT [Measures].[指定区间销售配额汇总] ON 0 FROM [你的Cube名称]
逻辑说明
- 内层
IIF会对每个日期成员做校验,只有落在你指定的起止日期范围内的成员才会返回对应的Sales Amount Quota数值,其余成员返回0 - 外层
SUM会对所有日期的IIF返回结果做聚合,最终得到整个区间的总聚合值 - 如果需要动态传入日期范围,只需要把
CDate内的固定日期值替换为你上层应用传入的参数即可,逻辑完全通用
针对你给出的2002年7月1日至2002年11月30日测试区间,以上查询返回结果就是你预期的$24,381,800。
如果你的日期维度的MemberValue不是标准日期格式,可以替换为日期维度上的其他日期属性字段做比对,比如[Date].[Date].CurrentMember.Properties("Date Key"),只要能拿到每个成员对应的可比对日期值即可。
内容的提问来源于stack exchange,提问作者TAMILARASAN R
相关产品推荐
相关产品推荐

