在Tableau中,如何计算两个日期之间的营业时间/分钟,不包括周末?
例如,我的营业时间是周一至周五上午9点至下午6点。您想计算05/10/2018上午10点和05/14/2018 11点之间的处理时间,因为您的团队只计算营业时间。答案是19个小时,但在Tableau中如何做到这一点?
答案 0 :(得分:3)
这是一个经常被问到的非常常见的问题,但实际上并没有完整的答案。以下是我的解决方案。
1.打电话给[Weekends Count]。了解这两次之间有多少个周末
typeof(Splitter).GetField("minExtra", Reflection.BindingFlags.Instance | Reflection.BindingFlags.NonPublic).SetValue(mySplitter, -10000);
2.拨打[开始时间],计算[开始]小时与营业时间的小时差(将18(下午6点)替换为关闭时间,并将9(您的营业时间)替换为您的号码)。 (我的时间是上午9点到下午6点)
int( (DATEDIFF('day',[Start],[End])+DATEPART('weekday',[Start])) /7 )
*2
+ (if DATEPART('weekday',[Start]) = 1 then 1 else 0 end)
- (if DATEPART('weekday',[End]) = 7 then 1 else 0 end)
3.拨打[Start Min],与#2相同的逻辑分钟,用你的收盘时间替换18
IF
18 - DATEPART('hour',[Start]) >0 and 18 - DATEPART('hour',[Start]) <=9
and DATEPART('minute',[Start]) > 0
then 18 - DATEPART('hour',[Start]) - 1
elseif 18 - DATEPART('hour',[Start]) >0
and DATEPART('minute',[Start]) = 0
then 18 - DATEPART('hour',[Start])
elseif 18 - DATEPART('hour',[Start]) <= 0 then 0
elseif 18 - DATEPART('hour',[Start]) >9
then 9
END
4.拨打[结束时间]。与#2相同,以找出您的开始时间与[结束]小时之间的差异
if [Start Hour] > 0
and DATEPART('minute',[Start]) != 0
then 60 - DATEPART('minute',[Start])
elseif [Start Hour] = 0 and
DATEPART('hour',[Start]) < 18
then 60 - DATEPART('minute',[Start])
elseif [Start Hour] = 0 and
DATEPART('hour',[Start]) >= 18
then 0
elseif DATEPART('minute',[Start]) = 0
then 0
END
5.拨打[结束最小],与#4相同,找出你的开始分钟与[结束]分钟之间的差异
IF
DATEPART('hour',[End]) >= 9 then DATEPART('hour',[End]) - 9
END
6.拨打[总小时],计算总小时数。两部分,第一部分是如果[开始]和[结束]是在同一天,那么只需使用差异。第二部分,如果他们不是在同一天,那么这样的公式(再次用你的营业时间替换9) 总和(开始和结束的小时)+天之间*营业时间/天 - 周末*营业时间/天
DATEPART('minute',[End])
7.拨打[Total Min],计算总分钟数
if
DATEDIFF('day',[Start],[End])=0 and
datepart('hour',[Start])- datepart('hour',[End]) =0
then
0
elseif
DATEDIFF('day',[Start],[End])=0 and
datepart('hour',[Start])- datepart('hour',[End]) !=0 and
datepart('minute',[Start])- datepart('minute',[End])<=0
then
DATEPART('hour',[End]) - DATEPART('hour',[Start])
elseif DATEDIFF('day',[Start],[End])=0 and
datepart('hour',[Start])- datepart('hour',[End]) !=0 and
datepart('minute',[Start])- datepart('minute',[End])>0
then
DATEPART('hour',[End]) - DATEPART('hour',[Start]) -1
elseif
DATEDIFF('day',[Start],[End]) > 0
then
([Start Hour]+[End Hour])+
(DATEDIFF('day',[Start],[End]) -1)
* 9
- [Weekends Count]*9
END
完成,这是两个时间戳之间的总小时和总分钟的差异,并且仅在没有周末的工作时间内工作。如果有任何拼写错误或错误,请告诉我。