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

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. 选中新建的自定义列,在右侧「格式」面板找到「条件格式」→「字体颜色」
  2. 设置规则:
    • 当值等于1时,字体颜色设为黑色
    • 当值等于0时,字体颜色设为红色
    • 空值可保持默认格式

原度量值失效原因

你写的两段度量值用了MAX()聚合函数:

  • 第一段中MAX(Actual_Finish)会取整个表内最晚的实际完成日期,若该日期≤今天,整个度量值就返回1,所以所有行都显示1
  • 第二段先判断MAX(Schedule_Finish),只要表内存在任意一条计划日期≤今天的记录,度量值就返回0,导致全列显示0
    这完全不符合你需要的逐行判断单条记录的逻辑。

内容的提问来源于stack exchange,提问作者KEVBLA24

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:06:32