Power BI中基于关联至中心事实表的两个维度表创建DATEDIFF度量值的可行性咨询
解决方案:计算事实表与关联表日期的日期间隔
当然可以实现这个需求!不过先得区分下DAX里计算列和度量值的适用场景——你要的是给事实表每条记录返回对应日差,用计算列会更直接;如果是需要配合动态筛选的场景,度量值也能搞定,下面给你详细说明:
一、用计算列实现(推荐,适合每条记录存固定值)
因为StartVerkoopdatum在你的事实表中,而KAOOndertekend在关联的维度表里,我们可以用RELATED函数拉取关联表的日期,再计算日差:
销售至K签约天数 = DATEDIFF( '你的事实表名称'[StartVerkoopdatum], RELATED('关联维度表名称'[KAOOndertekend]), DAY )
关键说明:
RELATED函数会根据表间已建立的关联(就是你图里红线标出来的关联字段),自动匹配当前事实表记录对应的维度表日期- 如果存在某条记录的日期为空的情况,可以加个空值判断,避免报错:
销售至K签约天数 = IF( NOT(ISBLANK('你的事实表名称'[StartVerkoopdatum])) && NOT(ISBLANK(RELATED('关联维度表名称'[KAOOndertekend]))), DATEDIFF('你的事实表名称'[StartVerkoopdatum], RELATED('关联维度表名称'[KAOOndertekend]), DAY), BLANK() )
二、用度量值实现(适合动态筛选场景)
如果你的需求是在可视化中根据筛选条件动态计算日差,而不是在表中固定每条记录的值,可以用度量值:
销售至K签约天数_度量值 = VAR CurrentStartDate = MAX('你的事实表名称'[StartVerkoopdatum]) VAR CurrentKDate = CALCULATE(MAX('关联维度表名称'[KAOOndertekend]), RELATEDTABLE('你的事实表名称')) RETURN IF( NOT(ISBLANK(CurrentStartDate)) && NOT(ISBLANK(CurrentKDate)), DATEDIFF(CurrentStartDate, CurrentKDate, DAY), BLANK() )
关键说明:
MAX用来获取当前筛选上下文里的日期值,RELATEDTABLE确保关联关系的正确性- 这个度量值在你把事实表的记录放到可视化组件(比如表格)时,会自动为每条记录返回对应的日差
前提条件:
一定要确保事实表和维度表的关联关系是正确建立的(一对一或事实表为“多”端的一对多关系),否则RELATED或RELATEDTABLE无法正确拉取数据。
内容的提问来源于stack exchange,提问作者Sander De Weert




