You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:06:03