如何在MDX计算度量中获取子查询(MDX+ FILTERBY)定义的时间成员?
在计算度量中获取MDX子查询或FILTERBY定义的时间成员
嘿,我来帮你解决这个问题——要在计算度量[ist]里拿到子查询或者FILTERBY指定的时间成员,其实有很直接的实现方式,我分两种场景给你说明:
1. 针对子查询(Subselect)的情况
你的子查询已经把时间维度限定在了[Time].[Time].[month].&[2018-04-01],这个筛选会直接影响整个查询的上下文。在计算度量里,你可以通过[Time].[Time].CurrentMember直接获取这个被限定的时间成员,然后把它传给你的自定义函数__get_time_member__就行。
修改后的MDX语句示例:
WITH MEMBER [Measures].[ist] AS // 将当前上下文的时间成员传入自定义函数 __get_time_member__([Time].[Time].CurrentMember) SELECT // 度量轴 {[Measures].[ist],[Measures].[soll]} ON 0, // 行轴(子查询已限定时间,只会返回目标月份) [Time].[Time].[month].Members ON 1 FROM ( SELECT [Time].[Time].[month].&[2018-04-01] ON 0 FROM [Finance] )
如果需要获取该时间成员的具体属性(比如键、名称),可以用[Time].[Time].CurrentMember.Member_Key、[Time].[Time].CurrentMember.Member_Caption这类属性来实现。
2. 针对MDX+的FILTERBY情况
MDX+的FILTERBY语法本质上和子查询的上下文限定逻辑一致,同样可以利用[Time].[Time].CurrentMember来获取被筛选的时间成员,实现起来更简洁:
WITH MEMBER [Measures].[ist] AS __get_time_member__([Time].[Time].CurrentMember) SELECT {[Measures].[ist],[Measures].[soll]} ON 0, [Time].[Time].[month].Members ON 1 FROM [Finance] FILTERBY [Time].[Time].[month].&[2018-04-01]
补充说明
如果你的筛选条件是多个时间成员(比如选了多个月份),可以用Generate或者SetToStr来处理时间成员集合,但针对你当前单个成员的场景,CurrentMember完全够用,是最直接的方案。
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

