如何在MDX筛选器中使用动态年份(当前年份-2)?
实现MDX中动态年份筛选(当前年份-2)
可以通过MDX的日期函数结合成员构造来实现动态年份下限,以下是两种常用方案:
方案1:直接拼接成员唯一名称(简洁高效)
利用Year(Now())获取当前年份,减2后通过StrToMember构造目标年份成员:
SELECT NON EMPTY { [Measures].[QTY] } ON COLUMNS FROM ( SELECT ( StrToMember("[DATE].[YEAR].&[" + CStr(Year(Now()) - 2) + "]") : null ) ON COLUMNS FROM [MY_DATA_CUBE] )
说明:
Year(Now()):获取当前系统的年份数值CStr():将计算后的年份数值转为字符串,用于拼接成员的唯一名称StrToMember():把拼接好的成员字符串转换为MDX可识别的成员对象,最终实现年份 >= 当前年份-2的筛选逻辑
方案2:通过筛选成员集合(更安全)
如果担心目标年份不存在导致StrToMember报错,可以先定义计算成员存储目标年份,再筛选符合条件的年份成员:
WITH MEMBER [Measures].[TargetYear] AS Year(Now()) - 2 SELECT NON EMPTY { [Measures].[QTY] } ON COLUMNS FROM ( SELECT ( Filter([DATE].[YEAR].Members, [DATE].[YEAR].CurrentMember.MemberValue >= [Measures].[TargetYear]) ) ON COLUMNS FROM [MY_DATA_CUBE] )
说明:
- 先定义
[Measures].[TargetYear]存储当前年份-2的数值 Filter()遍历所有年份成员,筛选出成员值大于等于目标年份的项,替代原有的范围筛选逻辑
注意事项
- 部分MDX环境中,获取当前日期的函数可能为
CurrentDate(),若Year(Now())报错,可替换为Year(CurrentDate()) - 若
[DATE].[YEAR]成员的MemberValue不是数值类型,需调整类型转换逻辑,例如用CInt([DATE].[YEAR].CurrentMember.Name)来获取年份数值
内容的提问来源于stack exchange,提问作者sbrbot
相关产品推荐
相关产品推荐

