You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Tableau中计算排除周末的两日期间业务工作时长?

在Tableau中计算排除周末的业务工作时长

要解决这个问题,我们可以把整个时间段拆成三部分计算:开始当天的有效时长、结束当天的有效时长,以及中间完整工作日的总时长,最后把三者加起来。下面是具体的步骤,对应你的例子(2018-05-10 10:00 到 2018-05-14 11:00,工作时间9:00-18:00,周一到周五),最终结果会是19小时。

第一步:创建判断工作日的计算字段

首先我们需要一个字段来判断某个日期是否是工作日。Tableau里的DATEPART('weekday', [Date])返回的数字可能因地区设置不同(比如美国默认周日=1,周一=2;有些地区周一=1),你可以先自己测试下:

  • 如果你的周一对应2、周五对应6(周日=1),创建计算字段Is Workday
IF DATEPART('weekday', [Date]) BETWEEN 2 AND 6 THEN TRUE ELSE FALSE END
  • 如果你的周一对应1、周五对应5,就改成BETWEEN 1 AND 5

之后我们需要分别判断开始日期和结束日期是否是工作日,所以可以再创建两个字段(分开更清晰):

  • Is Workday (Start Date):把上面公式里的[Date]换成[Start Date]
  • Is Workday (End Date):把上面公式里的[Date]换成[End Date]

第二步:计算中间完整工作日的数量

创建计算字段Full Workdays Between,用来统计开始日期次日到结束日期前一天之间的工作日总数:

DATEDIFF('day', DATEADD('day', 1, [Start Date]), DATEADD('day', -1, [End Date])) 
- (DATEDIFF('week', DATEADD('day', 1, [Start Date]), DATEADD('day', -1, [End Date])) * 2)

这个公式的逻辑是:先算中间的总天数,再减去这段时间里的周末天数(每周2天)。

第三步:计算开始当天的有效工作时长

创建计算字段Start Day Hours,计算开始日期当天实际能统计的工作时长:

IF [Is Workday (Start Date)] THEN
  DATEDIFF('hour', 
    MAX([Start Date], DATETRUNC('day', [Start Date]) + MAKE_TIME(9,0,0)),
    MIN(DATETRUNC('day', [Start Date]) + MAKE_TIME(18,0,0), [Start Date])
  ) + 
  DATEDIFF('minute', 
    MAX([Start Date], DATETRUNC('day', [Start Date]) + MAKE_TIME(9,0,0)),
    MIN(DATETRUNC('day', [Start Date]) + MAKE_TIME(18,0,0), [Start Date])
  )/60
ELSE 0 END

逻辑说明:

  • 如果开始日期不是工作日,时长为0
  • 如果开始时间早于9:00,就从9:00开始算;如果晚于18:00,当天没有有效时长
  • 同时计算小时和分钟,把分钟转成小时加进去,确保精度

第四步:计算结束当天的有效工作时长

创建计算字段End Day Hours,计算结束日期当天的有效时长:

IF [Is Workday (End Date)] THEN
  DATEDIFF('hour', 
    MAX(DATETRUNC('day', [End Date]) + MAKE_TIME(9,0,0), [End Date]),
    MIN([End Date], DATETRUNC('day', [End Date]) + MAKE_TIME(18,0,0))
  ) + 
  DATEDIFF('minute', 
    MAX(DATETRUNC('day', [End Date]) + MAKE_TIME(9,0,0), [End Date]),
    MIN([End Date], DATETRUNC('day', [End Date]) + MAKE_TIME(18,0,0))
  )/60
ELSE 0 END

逻辑类似开始当天:

  • 非工作日时长为0
  • 结束时间早于9:00则当天0时长;晚于18:00则算到18:00

第五步:计算总业务工作时长

最后创建计算字段Total Business Hours,把三部分加起来:

[Start Day Hours] + ([Full Workdays Between] * 9) + [End Day Hours]

这里的9是每天的工作时长(18-9=9小时),如果你的工作时长不同,替换成对应数字即可。

验证你的例子

对应你的测试数据:

  • 开始日期2018-05-10 10:00(周四,工作日):Start Day Hours是8小时(10:00到18:00)
  • 中间完整工作日:从5.11到5.13,只有5.11(周五)是工作日,所以Full Workdays Between=1,对应9小时
  • 结束日期2018-05-14 11:00(周一,工作日):End Day Hours是2小时(9:00到11:00)
  • 总和:8+9+2=19小时,完全符合预期!

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

火山引擎 最新活动