排除两天之间的周末时间

2020-09-26 05:40发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨社区

我有一个艰巨的任务。 我需要获取报告中两个日期字段之间的分钟数。

这种差异需要排除周末时间,此外,还需要按工作时间计算分钟数。

这里是一个例子:

DATE1 20/09/2017 14:56 DATE2 27/09/2017 23:02

每天工作8小时(9:00 am至6:00 pm)需要像DATE2-DATE1这样的差异

如何解决?

任何帮助将不胜感激!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨社区

我有一个艰巨的任务。 我需要获取报告中两个日期字段之间的分钟数。

这种差异需要排除周末时间,此外,还需要按工作时间计算分钟数。

这里是一个例子:

DATE1 20/09/2017 14:56 DATE2 27/09/2017 23:02

每天工作8小时(9:00 am至6:00 pm)需要像DATE2-DATE1这样的差异

如何解决?

任何帮助将不胜感激!

付费偷看设置
发送
3条回答
CPLASF-自律
1楼 · 2020-09-26 06:19.采纳回答

帕维尔,

我要说一句 Koen Hesters 所说的话,并说这样做最好在后端完成。 幸运的是,尽管首选后端解决方案,但我认为在Webi层尝试解决这一挑战非常有趣。 以下是我的解决方案-它将在博客文章中进行说明,因此我不会做过多的详细介绍,但是,如果您按照以下步骤进行操作,它将可以正常工作。 这里的主要目的是尝试从概念上分离周,天和分钟,然后将它们重新组合在一起,以获取您想要的计算。

由于您每天说8个小时,但引用了9到6个小时,因此我假设午餐时间是12点到1点。我还假设您有两个日期维度,分别称为[start_date]和[end_date]。 相应调整

首先"调整"您的日期,以将其移动到一周的开始或结束日期(假设它们是在周末)

创建变量调整后的开始

 =如果DayNumberOfWeek([start_date])> 5然后ToDate(FormatDate(RelativeDate([start_date]; 8-DayNumberOfWeek([start_date])));" MM/dd/yyyy 09:00:00");" MM/dd/yyyy HH:mm:ss")其他[开始日期] 

创建可变调整后的结束

 =如果DayNumberOfWeek([end_date])> 5然后ToDate(FormatDate(RelativeDate([end_date]; 5-DayNumberOfWeek([end_date])));" MM/dd/yyyy 18:00:00");" MM/dd/yyyy HH:mm:ss")其他[结束日期]
 

现在,让我们计算已经过去了多少个完整的工作周,以及"剩余"工作日

创建变量可调增量

 = DaysBetween([Adjusted Start]; [Adjusted End])
 

创建介于两周之间的可变调整周数

 = Floor([Adj Delta]/7)

创建可变剩余天数

 = Abs(DayNumberOfWeek([Adjusted End])-DayNumberOfWeek([Adjusted Start]))

现在,我们需要查看我们的开始/结束时间戳记,以计算出开始日期实际经过了多少"工作时间",或为结束日期留在了表格上。 还可以考虑从中午到下午1点的午餐时间

创建变量可调开始时间

 = ToNumber(FormatDate([Adjusted Start];" HH"))

创建变量可调结束时间

 = ToNumber(FormatDate([Adjusted End];" HH"))

创建变量可调启动总线最小时间

 =如果[Adj Start Hour] <9然后480 ElseIf [Adj Start Hour]> = 18然后0 ElseIf [Adj Start Hour] = 12然后300 Else 1080-(([Adj Start Hour] +([Adj Start 小时] <12))* 60 + ToNumber(FormatDate([Adjusted Start];" mm")))

创建可变的末梢最小总线剩余量

 =如果[Adj End Hour] <9然后480 ElseIf [Adj End Hour]> = 18然后0 ElseIf [Adj End Hour] = 12然后300 Else 1080-(([Adj End Hour] +([Adj End 小时] <12))* 60 + ToNumber(FormatDate([Adjusted End];" mm")))

现在您拥有了所需的一切,因此只需将所有内容放到最后一个变量中即可获得"业务记录"

 = [调整周数之间] * 5 * 480 + [剩余可调整天数] * 480 + [可调整的起始巴士最小时间]-[可调整的最低巴士结束时间] 

这真的很简单

SAP砖家
2楼-- · 2020-09-26 06:10

上午9点到下午6点是9个小时-您是否认为午休时间在12点到1点之间?

悠然的二货
3楼-- · 2020-09-26 06:01

嗨,

如果您的后端是BW,则建议您尽可能在该级别进行计算。 这样您就可以使用工厂日历

Grtz

科恩

一周热门 更多>