Power BI中DAX编写Update Health日期计算指标代码问题求助
DAX代码错误修正说明
现有代码的错误点
- 语法逻辑错误:你编写的
[Project Modified Date]= NOW() <= (NOW()-10)属于非法条件表达式,DAX不支持连续使用=和<=两个运算符做复合判断,系统无法识别对应的判断逻辑。 - 时间函数选择不合理:
NOW()函数返回带时分秒的当前时间,如果你仅需要按自然日期判断修改时间所属区间,使用不带时间的TODAY()函数可以避免时间部分导致的日期判断偏差。 - 判断顺序逻辑错误:现有代码优先判断「修改日期早于10天前」的条件,所有早于10天、5天、1天的记录都会先命中第一个条件,后面的区间判断永远不会生效,应该按照区间从小到大的顺序先判断时间更近的区间。
- 条件含义混乱:要判断「修改日期距今天超过10天」,对应的表达式应为
DATEDIFF([Project Modified Date], TODAY(), DAY) >=10或者[Project Modified Date] <= TODAY() -10,现有写法的逻辑完全不符合需求。
修正后代码
对齐原有嵌套IF结构的版本
Update Health = VAR DiffDays = DATEDIFF([Project Modified Date], TODAY(), DAY) RETURN IF( DiffDays >=10, 'Projects'.[PWA URL] & "/_layouts/15/inc/PWA/images/cf_6p.png", IF( DiffDays >=5, 'Projects'.[PWA URL] & "/_layouts/15/inc/PWA/images/cf_1p.png", IF( DiffDays >=1, 'Projects'.[PWA URL] & "/_layouts/15/inc/PWA/images/cf_2p.png", 'Projects'.[PWA URL] & "/_layouts/15/inc/PWA/images/cf_11p.png" ) ) )
更易维护的SWITCH优化版本
Update Health = VAR DiffDays = DATEDIFF([Project Modified Date], TODAY(), DAY) VAR BaseURL = 'Projects'.[PWA URL] & "/_layouts/15/inc/PWA/images/" RETURN SWITCH( TRUE(), DiffDays >=10, BaseURL & "cf_6p.png", DiffDays >=5, BaseURL & "cf_1p.png", DiffDays >=1, BaseURL & "cf_2p.png", BaseURL & "cf_11p.png" )
区间对应关系
- 距离上次修改>=10天:对应cf_6p.png
- 距离上次修改5-9天:对应cf_1p.png
- 距离上次修改1-4天:对应cf_2p.png
- 距离上次修改小于1天(当天修改):对应cf_11p.png
如果图标对应的区间和上述规则不同,直接调整判断条件的数值即可。
内容的提问来源于stack exchange,提问作者Terran Brown
相关产品推荐
相关产品推荐

