如何在ServiceNow中生成排除周末的工作日SLA任务报表
在ServiceNow中实现仅按工作日计算SLA的报表方案
方法1:用内置工作日函数直接计算
ServiceNow自带处理工作日计算的原生函数,可自动排除周末和系统配置的节假日:
- 打开报表构建器,在筛选条件中选择「新建条件」,类型选「脚本」
- 输入以下脚本作为筛选逻辑,判断任务从创建到关闭的工作日天数是否符合5天要求:
var start = new GlideDateTime(current.sys_created_on); var end = new GlideDateTime(current.closed_at); var cal = new GlideCalendar(); return cal.getBusinessDaysBetween(start, end) == 5; - 保存条件后,报表将只展示工作日SLA达标的任务
方法2:创建自定义脚本字段简化报表配置
如果需要频繁复用这个工作日计算逻辑,建议给任务表添加自定义字段:
- 导航到你的任务表(如
task或自定义业务表)的字段列表,点击「新建」 - 字段类型选脚本,命名为
business_days_sla这类清晰标识的名称 - 在脚本框中写入:
if (!current.sys_created_on || !current.closed_at) return null; var start = new GlideDateTime(current.sys_created_on); var end = new GlideDateTime(current.closed_at); var cal = new GlideCalendar(); return cal.getBusinessDaysBetween(start, end); - 保存字段后,在报表中直接用该字段做筛选(如
business_days_sla = 5),无需每次编写脚本
方法3:修正现有SLA定义的日历配置
如果任务已关联SLA记录,调整SLA的日历配置是更彻底的解决方案:
- 进入「合同SLA」(
contract_sla)表,找到对应任务的SLA定义 - 在日历字段中选择系统默认的「工作日日历」(或你自定义的排除周末/节假日的日历)
- 保存后,SLA将自动按工作日计算时长,报表直接关联SLA的「已用时间」字段筛选即可
关键提醒
- 先确认系统工作日日历配置:在
sys_calendar表中检查,确保周六、周日被标记为非工作日,特殊节假日也可在此添加 - 若任务未关闭,计算时需将
closed_at替换为gs.nowDateTime(),避免空值导致计算错误
内容的提问来源于stack exchange,提问作者csriman09
相关产品推荐
相关产品推荐

