MDX StrToMember日期范围筛选失效,Sector Name下拉值筛选异常咨询
问题根因排查
- 日期成员有效性校验
先运行以下单测查询确认日期参数是否能返回有效成员:
若查询报错或返回空,说明参数传入的成员唯一名称与Cube中定义不匹配,常见问题包括:日期维度属性名拼写错误、成员键格式不符(例如Cube中存储的是整型日期键SELECT {} ON 0, {STRTOMEMBER("[Sector_Join_Date].[Date].&[2020-07-29T00:00:00]", CONSTRAINED)} ON 1 FROM [Model]20200729而非带时间戳的字符串)、层级路径缺失(例如实际层级为[Sector_Join_Date].[Year].[Month].[Date],你传入的路径少了上层级)。- 日期成员有效性校验
- 缺失非空过滤逻辑
你当前查询行轴直接取[ADM_TRANS_IN].[Sector Name].ALLMEMBERS,默认会返回该维度的所有成员,无论对应日期范围内是否存在关联的事实数据,看起来就像日期筛选未生效。
- 缺失非空过滤逻辑
- 维度关联配置错误
检查Cube中[Sector_Join_Date]维度与[ADM_TRANS_IN]所属度量组的维度关系是否配置正确,若未建立关联,日期筛选不会对[Sector Name]的成员产生过滤效果。
- 维度关联配置错误
解决方案
- 修正日期参数格式
若确认是成员名称不匹配,可在多维模型工具中查看[Sector_Join_Date]维度Date属性的真实成员格式,调整参数传入值即可。也可以改用日期值匹配的方式避免拼成员名出错,将日期范围筛选逻辑改为:
此时Filter( [Sector_Join_Date].[Date].Members, [Sector_Join_Date].[Date].MemberValue >= CDate(@FromDateStr) AND [Sector_Join_Date].[Date].MemberValue <= CDate(@ToDateStr) )@FromDateStr直接传入普通日期字符串(如2020-07-29)即可,无需拼接维度成员前缀。 - 增加维度关联过滤
推荐使用EXISTS函数直接关联日期范围筛选Sector Name成员,效率高于非空过滤,优化后的完整查询如下:
也可以简单给行轴加上WITH MEMBER [Measures].[ParameterCaption] AS [ADM_TRANS_IN].[Sector Name].CURRENTMEMBER.MEMBER_CAPTION MEMBER [Measures].[ParameterValue] AS [ADM_TRANS_IN].[Sector Name].CURRENTMEMBER.UNIQUENAME MEMBER [Measures].[ParameterLevel] AS [ADM_TRANS_IN].[Sector Name].CURRENTMEMBER.LEVEL.ORDINAL SELECT { [Measures].[ParameterCaption], [Measures].[ParameterValue], [Measures].[ParameterLevel] } ON COLUMNS, EXISTS( [ADM_TRANS_IN].[Sector Name].ALLMEMBERS, {STRTOMEMBER(@FromJoinDateDate, CONSTRAINED) : STRTOMEMBER(@ToJoinDateDate, CONSTRAINED)}, "替换为你的事实表对应的度量组名称" ) ON ROWS FROM ( SELECT ( STRTOSET(@ADMTRANSINSpecialty, CONSTRAINED) ) ON COLUMNS FROM ( SELECT ( STRTOSET(@ADMTRANSINSite, CONSTRAINED) ) ON COLUMNS FROM [Model] ) )NON EMPTY关键字实现过滤:NON EMPTY [ADM_TRANS_IN].[Sector Name].ALLMEMBERS ON ROWS。 - 修复维度关联
若排查到是维度关系配置错误,在Cube设计界面重新建立[Sector_Join_Date]与对应度量组的关联,处理部署后即可生效。
内容的提问来源于stack exchange,提问作者tym
相关产品推荐
相关产品推荐

