Power Query中+运算符无法应用于Duration和Number类型报错解决
报错原因
Power Query 中两个日期类型值做减法时,返回结果为Duration(时间间隔)类型,该类型无法直接和普通数字类型做算术运算,这就是触发「We cannot apply operator + to types Duration and Number」报错的核心原因。
除此之外原公式存在两处逻辑问题:
- 括号位置错误:按照计划完成率的常规计算逻辑,应该是「已执行天数 / 总计划工期天数」,原公式因括号错位导致运算优先级错误,计算结果完全不符合预期
- 缺失边界判断:既没有处理数据日期晚于计划完成日时完成率应为100%的场景,也没有处理计划开完工为同一天时的除零报错问题
修复方案
使用Duration.Days()函数将日期差得到的Duration类型值转换为数字格式的天数,同时修正计算逻辑、补全边界判断,可用的M公式如下:
if [Data Date] < [Plan_Actual_Start_Date] then 0 else if [Data Date] >= [Plan_Actual_Finish_Date] then 1 else let total_days = Duration.Days([Plan_Actual_Finish_Date] - [Plan_Actual_Start_Date]) + 1, passed_days = Duration.Days([Data Date] - [Plan_Actual_Start_Date]) + 1 in passed_days / total_days
逻辑说明
- 第一层判断:数据日期早于计划开始日期时,计划完成率为0
- 第二层判断:数据日期大于等于计划完成日期时,计划完成率为1(即100%)
- 工期计算默认首尾日期都计入有效工期,因此分子分母统一+1,适配开完工为同一天的任务场景,避免除零报错
- 用let语句拆分计算步骤,比嵌套括号的写法可读性更高,后续调整计算规则时修改更方便
内容的提问来源于stack exchange,提问作者Project Insights
相关产品推荐
相关产品推荐

