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

DAX度量中Age Group筛选未生效问题及修改后生效原因疑问

卡普兰-迈耶分析中DAX度量的筛选问题解决解析

我在做卡普兰-迈耶(Kaplan Meier)计算时,需要统计Length大于等于当前行Length的唯一患者数(按RequestNumber去重),为此创建了度量Total Patients m。

初始DAX代码(存在筛选失效问题)

Total Patients m = 
VAR CurrentLength = SELECTEDVALUE(KM[Length])

RETURN
CALCULATE(
    DISTINCTCOUNT(SDP_Patients[RequestNumber]),
    FILTER(
        ALL(SDP_Patients),
        SDP_Patients[Length] >= CurrentLength
    ),
   ALLEXCEPT(SDP_Patients, SDP_Patients[Age Group])
)

问题描述

最初我把它设为计算列,后来改成动态度量,但发现Age Group的筛选始终无法作用于这个度量。其中KM表的Length是通过GENERATESERIES(0,MAX(SDP_Patients[Length]),1)生成的,代表起止日期的周差值。

修改后的DAX代码(问题解决)

Total Patients m = 
VAR CurrentLength = SELECTEDVALUE(KM[Length])
RETURN
    CALCULATE(
        DISTINCTCOUNT(SDP_Patients[RequestNumber]),
        SDP_Patients[Length] >= CurrentLength,
        ALLEXCEPT(SDP_Patients, SDP_Patients[Service])
    )

问题原因解析

初始代码的问题根源

  1. FILTER(ALL(SDP_Patients), ...)会清除SDP_Patients表的所有筛选上下文,包括外部的Age Group筛选条件。
  2. 后续的ALLEXCEPT(SDP_Patients, SDP_Patients[Age Group])试图保留Age Group的筛选,但由于ALL(SDP_Patients)已经清空了表的筛选状态,ALLEXCEPT此时仅能保留Age Group的筛选结构,无法继承外部的Age Group筛选上下文——外部筛选已被ALL完全清除,导致Age Group筛选无法生效。

修改后代码的生效逻辑

  1. 去掉FILTER(ALL(...)),直接使用SDP_Patients[Length] >= CurrentLength作为筛选条件,这个筛选会在当前的筛选上下文中执行,不会清除外部已有的筛选规则。
  2. ALLEXCEPT(SDP_Patients, SDP_Patients[Service])的作用是:清除SDP_Patients表中除Service之外的所有筛选,但会保留外部传入的Service筛选条件。此时Length >= CurrentLength的筛选会基于这个保留了Service筛选的上下文执行,外部的Service筛选也能正常作用于度量,最终实现了正确的筛选效果。

内容的提问来源于stack exchange,提问作者Fatima Arshad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:39:52