MDX为度量值添加集合归属判断条件 匹配返回默认值否则返回0
问题核心原因
你写的条件判断逻辑用错了函数,这是导致所有行都返回患者数量的根本原因:
- MDX中
IsEmpty()函数仅用于判断单元格值/成员值是否为空,无法判断集合是否为空。你给IsEmpty()传入Intersect()返回的集合,不管集合有没有内容,IsEmpty()的返回结果永远是False,所以IIF判断永远走返回度量值的分支。 - 补充可优化问题:判断成员是否属于指定集合不需要用
Intersect,MDX原生支持IN运算符直接完成判断,写法更简洁性能也更好。
修正方案
把判断集合是否为空的逻辑换成Count(Intersect(集合1,集合2)) = 0,或者直接用IN运算符简化逻辑即可。
修正后代码
with -- 固定取指定专科ID对应的名称 MEMBER spename AS [Dim misc].[SpePats].[Speciality Id].[{1037B3B2-EB0C-4DA3-BD9D-EB54F6CA92A5}].FirstChild.membervalue -- 过滤出所有同名的专科ID集合 SET spesSame AS filter( [Dim misc].[SpePats].[Speciality Id].MEMBERS, [Dim misc].[SpePats].CurrentMember.FirstChild.MemberValue = spename ) -- 用IN运算符判断当前成员是否在集合中 MEMBER nb AS iif( [Dim misc].[SpePats].CurrentMember IN spesSame, Measures.[VParcours Nombre], 0 ) SELECT {nb} ON 0, { [Dim misc].[SpePats].[Speciality Id].&[{1037B3B2-EB0C-4DA3-BD9D-EB54F6CA92A5}], [Dim misc].[SpePats].[Speciality Id].&[{1095C7D1-F24C-4E22-B2E4-4C2959E29FFD}] } ON 1 FROM [BDD PBM]
额外确认点
如果修改后还是不符合预期,请确认[Dim misc].[SpePats].[Speciality Id]级别成员的FirstChild确实是存储专科名称的属性,避免取错级别导致spesSame集合过滤结果不对。
内容的提问来源于stack exchange,提问作者lolveley
相关产品推荐
相关产品推荐

