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

Power BI中基于日历与任务表的S曲线平滑计算求助

解决Power BI中项目S曲线未完成任务进度计算问题

原公式核心问题

  1. RELATED函数误用:在Calendar表的计算列中,无需使用RELATED('Calendar'[Data]),直接引用当前行的'Calendar'[Data]即可,RELATED用于从关联表多端向一端取值,此处逻辑完全错误。
  2. DATEDIFF参数顺序颠倒:你需要计算的是(日历日期-任务开始日期),但原公式中写成了(日历日期到任务结束日期),导致计算结果完全不符合预期。
  3. 筛选条件逻辑不严谨:原筛选未明确任务实际开始日期与当前日历日期的关系,可能错误包含未启动的任务。
  4. 未处理分母为0的情况:若任务开始和结束日期相同,会出现除以0的风险,需特殊处理。

修正后的计算列DAX公式

Parciais = 
VAR CurrentDate = 'Calendar'[Data]
RETURN
CALCULATE(
    SUMX(
        MSP_EpmTask_OlapView,
        VAR TaskStart = MSP_EpmTask_OlapView[Início]
        VAR TaskEnd = MSP_EpmTask_OlapView[Término]
        VAR TaskDuration = DATEDIFF(TaskStart, TaskEnd, DAY) + 1 // 包含首尾日期的任务总天数
        VAR ElapsedDays = DATEDIFF(TaskStart, CurrentDate, DAY) + 1 // 从任务开始到当前日期的已过天数(含当日)
        VAR ProgressRatio = DIVIDE(ElapsedDays, TaskDuration, 0) // 用DIVIDE避免除以0,异常时返回0
        RETURN
        MSP_EpmTask_OlapView[Valor Planejado] * ProgressRatio
    ),
    MSP_EpmTask_OlapView[É Resumo] = FALSE(),
    // 筛选当前日期处于任务执行期间的未完成任务
    MSP_EpmTask_OlapView[Início] <= CurrentDate,
    MSP_EpmTask_OlapView[Término] > CurrentDate,
    // 确保任务已按计划启动
    MSP_EpmTask_OlapView[Início Agendado] <= CurrentDate
)

更推荐的度量值写法(动态计算更灵活)

如果用于报表可视化,度量值比计算列更高效——它是动态计算的,不会提前占用内存存储所有日期的计算结果:

Parciais_Measure = 
VAR SelectedDate = MAX('Calendar'[Data])
RETURN
CALCULATE(
    SUMX(
        MSP_EpmTask_OlapView,
        VAR TaskStart = MSP_EpmTask_OlapView[Início]
        VAR TaskEnd = MSP_EpmTask_OlapView[Término]
        VAR TaskDuration = DATEDIFF(TaskStart, TaskEnd, DAY) + 1
        VAR ElapsedDays = DATEDIFF(TaskStart, SelectedDate, DAY) + 1
        VAR ProgressRatio = DIVIDE(ElapsedDays, TaskDuration, 0)
        RETURN
        MSP_EpmTask_OlapView[Valor Planejado] * ProgressRatio
    ),
    MSP_EpmTask_OlapView[É Resumo] = FALSE(),
    MSP_EpmTask_OlapView[Início] <= SelectedDate,
    MSP_EpmTask_OlapView[Término] > SelectedDate,
    MSP_EpmTask_OlapView[Início Agendado] <= SelectedDate
)

关键说明

  • 用VAR定义变量简化逻辑,提升公式可读性和计算效率。
  • 调整筛选条件,确保只计算已启动且未完成的任务进度。
  • 使用DIVIDE函数处理分母为0的边界情况(如当日完成的任务)。
  • 若任务表有专门的「完成状态」字段(如[Status] = "未完成"),可加入筛选条件进一步精准识别未完成任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:05:07