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

Power Query自定义NetWorkDays函数报循环引用错误

自定义NetWorkDays函数跨用户使用触发循环引用报错修复

问题现象

通过空白查询创建的自定义NetWorkDays函数,用于计算剔除周末、节假日后的工作日天数,在本地文件中可正常运行,团队其他成员打开同一份文件时触发固定报错:

Expression.Error: 评估过程中遇到循环引用。
错误触发位置始终指向该自定义函数。

原始函数代码

Query1 = (StartDate as date, EndDate as date) as number => 
let 
DateList = List.Dates(StartDate, Number.From(EndDate - StartDate) , #duration(1, 0, 0, 0)),
RemoveWeekends = List.Select(DateList, each Date.DayOfWeek(_, Day.Monday) < 5),
RemoveHolidays = List.RemoveItems(RemoveWeekends, Holidays),
CountDays = List.Count(RemoveHolidays)
in
CountDays,
   Custom1 = Query1
in
   Custom1 

根因分析

  • 代码外层存在冗余嵌套结构:先把函数赋值给Query1,再把Query1赋值给Custom1,最终返回Custom1,属于无意义的自引用包裹,本地环境因为有求值缓存不会触发校验,其他用户打开文件重建查询依赖链时,会把这种结构识别为循环依赖
  • 原始代码存在逻辑bug:List.Dates的日期计数参数没有加1,生成的日期列表不包含结束日期当天,计算结果会少1天

修复步骤

  • 注意:替换代码前请确认文件中已存在名为Holidays的节假日日期列表查询,否则会触发引用缺失报错
  1. 打开Power Query编辑器,定位到该自定义函数查询
  2. 清空原有代码,替换为修复后的版本:
(StartDate as date, EndDate as date, optional HolidayList as list) as number =>
let
    ValidHolidays = if HolidayList = null then Holidays else HolidayList,
    DateList = List.Dates(StartDate, Number.From(EndDate - StartDate) + 1, #duration(1, 0, 0, 0)),
    RemoveWeekends = List.Select(DateList, each Date.DayOfWeek(_, Day.Monday) < 5),
    RemoveHolidays = List.RemoveItems(RemoveWeekends, ValidHolidays),
    CountDays = List.Count(RemoveHolidays)
in
    CountDays
  1. 保存修改后的文件,分发给团队成员即可正常使用,不会再触发循环引用报错,同时修正了原函数漏算结束日期的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:18:18