求正确的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
相关产品推荐
相关产品推荐

