在Tableau中计算工单创建与回复间的有效工作时长
计算工作日工作时段内的工单首响时长
假设你已经有Is_Workday(判断日期是否为工作日)、Is_WorkingHours(判断时间是否在工作时段,如9:00-18:00)这类基础计算字段,下面分步骤实现有效首响时长的计算:
核心思路
把工单创建到回复的时间窗口拆成三部分计算,再求和:
- 创建当天剩余的有效工作时长
- 中间完整工作日的总有效时长
- 回复当天的有效工作时长
步骤1:定义基础参数
先固定工作时段的核心参数(根据你的实际情况调整):
WORK_DAY_HOURS = 9(每日工作时长,比如9:00-18:00共9小时)WORK_START = '09:00:00'(工作时段开始时间)WORK_END = '18:00:00'(工作时段结束时间)
步骤2:计算创建当天的剩余有效时长
IF Is_Workday([Ticket created date]) THEN CASE WHEN TIME([Ticket created date]) >= [WORK_END] THEN 0 WHEN TIME([Ticket created date]) <= [WORK_START] THEN [WORK_DAY_HOURS] ELSE DATEDIFF('hour', TIME([Ticket created date]), [WORK_END]) + DATEDIFF('minute', TIME([Ticket created date]), [WORK_END])/60 END ELSE 0 END
逻辑:如果创建日是工作日,根据创建时间所在位置计算当天剩余的工作时长;非工作日则为0。
步骤3:计算回复当天的有效时长
IF Is_Workday([ticket replied date]) THEN CASE WHEN TIME([ticket replied date]) >= [WORK_END] THEN [WORK_DAY_HOURS] WHEN TIME([ticket replied date]) <= [WORK_START] THEN 0 ELSE DATEDIFF('hour', [WORK_START], TIME([ticket replied date])) + DATEDIFF('minute', [WORK_START], TIME([ticket replied date]))/60 END ELSE 0 END
逻辑:如果回复日是工作日,根据回复时间所在位置计算当天贡献的有效时长;非工作日则为0。
步骤4:计算中间完整工作日的总时长
先算出创建日和回复日之间的间隔天数,减去首尾两天得到中间天数,再乘以每日工作时长,最后扣除中间非工作日的时长:
(DATEDIFF('day', DATE([Ticket created date]), DATE([ticket replied date])) - 1) * [WORK_DAY_HOURS] - (COUNT_OF_NON_WORKDAYS_BETWEEN([Ticket created date], [ticket replied date])) * [WORK_DAY_HOURS]
注:COUNT_OF_NON_WORKDAYS_BETWEEN可以通过生成日期序列,用Is_Workday字段过滤统计非工作日数量实现(不同BI工具/SQL的写法略有差异,比如SQL用递归生成日期,Tableau用表计算)。
步骤5:总有效首响时长
将上述三部分结果相加,得到最终的有效首响时长:
[创建当天剩余时长] + [中间完整工作日时长] + [回复当天有效时长]
特殊场景处理
- 若创建和回复均在非工作日:有效时长为0
- 若创建在非工作日、回复在工作日:仅计算回复当天的有效时长
- 若创建在工作日非工作时段、回复在当天工作时段:计算从工作开始到回复的时长
- 若创建在工作日工作时段、回复在非工作时段:计算从创建到工作结束的时长
内容的提问来源于stack exchange,提问作者user13687410
相关产品推荐
相关产品推荐

