PowerBI Measure中IF与MAX函数使用异常求助
问题诊断与解决
核心错误点
- 混淆自定义列与度量值的逻辑:你写的是度量值(Measure)代码,但需求是逐行判断的自定义列。度量值里的
MAX()是聚合函数,会取整个表(或当前筛选上下文)的最大值,而非逐行判断单条记录的字段值,这才导致全列显示1或0的异常结果。 - 判断逻辑不符合需求:你原代码是判断「实际完成日期≤今天」,但需求是只要存在实际完成日期(即字段非空)就返回1;同时逻辑顺序颠倒,应该先判断是否有实际完成,再处理逾期场景。
正确的自定义列代码
直接在数据表中新建自定义列,输入以下DAX代码:
Schedule Finish vs Today = IF ( NOT ISBLANK(oData_Activity_Dimension[Actual_Finish]), 1, IF ( oData_Activity_Dimension[Schedule_Finish] <= TODAY(), 0, BLANK() // 无实际完成且未逾期的场景,返回空值,可按需改为其他数值 ) )
格式设置步骤
- 选中新建的自定义列,在右侧「格式」面板找到「条件格式」→「字体颜色」
- 设置规则:
- 当值等于1时,字体颜色设为黑色
- 当值等于0时,字体颜色设为红色
- 空值可保持默认格式
原度量值失效原因
你写的两段度量值用了MAX()聚合函数:
- 第一段中
MAX(Actual_Finish)会取整个表内最晚的实际完成日期,若该日期≤今天,整个度量值就返回1,所以所有行都显示1 - 第二段先判断
MAX(Schedule_Finish),只要表内存在任意一条计划日期≤今天的记录,度量值就返回0,导致全列显示0
这完全不符合你需要的逐行判断单条记录的逻辑。
内容的提问来源于stack exchange,提问作者KEVBLA24
相关产品推荐
相关产品推荐

