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

求正确的DAX语法:创建跨表计算两日期差值的计算列

求正确的DAX语法:创建跨表计算两日期差值的计算列

先给你理清核心问题:要跨表计算日期差,首先得确保两个表之间有可匹配的关联逻辑(比如患者ID、转诊记录ID这类唯一标识),不然DAX没办法找到对应的转诊和入院记录。下面分两种常见场景给你具体的DAX语法和注意事项:


一、优先方案:先建立表关系再计算

如果你的reporting CC Admission和column表有共同的关联键(比如PatientID或ReferralID),先在Power BI/SSAS的模型视图里,把两个表的关联键拖拽连接,建立正确的关系(一对一或一对多都可以,只要符合业务逻辑)。

关系建立好后,就可以在任意一个表中创建计算列:

1. 在reporting CC Admission表中计算天数

DaysFromReferralToAdmission = 
// 用RELATED从关联的column表中匹配对应转诊日期,再计算天数差
DATEDIFF(
    RELATED('column'[DateOfReferral]),
    'reporting CC Admission'[DateOfAdmissionToBH],
    DAY
)

2. 在column表中计算天数

DaysFromReferralToAdmission = 
// 用RELATED从关联的入院表中匹配对应入院日期
DATEDIFF(
    'column'[DateOfReferral],
    RELATED('reporting CC Admission'[DateOfAdmissionToBH]),
    DAY
)

二、无表关系时的替代方案(不推荐,性能较差)

如果暂时无法建立表关系,你可以用LOOKUPVALUE函数手动匹配记录,但要确保关联键是唯一的(否则会返回错误值):

比如在reporting CC Admission表中创建计算列:

DaysFromReferralToAdmission = 
VAR MatchReferralDate = 
    LOOKUPVALUE(
        'column'[DateOfReferral],
        'column'[关联键列],  // 替换成你的实际关联键,比如PatientID
        'reporting CC Admission'[关联键列]  // 对应入院表中的关联键
    )
RETURN
// 处理空值,避免无匹配记录时返回错误
IF(NOT ISBLANK(MatchReferralDate),
    DATEDIFF(MatchReferralDate, 'reporting CC Admission'[DateOfAdmissionToBH], DAY),
    BLANK()
)

关键注意事项

  • 确保DateOfAdmissionToBH和DateOfReferral列的数据类型是「日期/时间」,如果是文本类型要先转换成日期类型,否则DATEDIFF会直接报错。
  • 要是存在缺失的日期值,用IF+ISBLANK处理能让结果更整洁,避免出现错误值影响后续分析。
  • 表名column是SQL的保留关键字,在DAX中必须用单引号包裹('column'),否则会触发语法错误。

备注:内容来源于stack exchange,提问作者Gwen Taylor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 07:37:57