你好,
我试图在我的数据表'Crew'中基于现有的datetime列创建一个新列,LadleOpenTime(下面显示了一小部分ladleopentimes)。
船员的时间(A,B,C或D摆动班次)遵循以下excel表所示的固定时间表:
时间表是7天,两天休息,7天休息,休息两天,休息3天休息7天,然后重复每个工作人员。
MidNights(晚上11:00至7:00),日(上午7:00至下午3:00),下午(下午3:00至11:00)。
有没有办法把它编码成jsl?
感谢所有反馈


吉姆,嗨,
我正在尝试为3转反向旋转计划创建一个新列。D工作人员不再存在,只剩下A,B和C.
工作人员按照相反的顺序从中午 - >下午 - >天 - >中午每7天轮换一次。因此,整个周期每21天完成一次。
在2009年7月1日,一名船员在中午,B船员在几天,C船员在下午。
我尝试修改您之前的公式,如下所示:
我删除了D机组时间表和相关的if语句,用新的时间表替换了A,B,C机组时间表,调整了“offset”以检查自现在21天周期的最后一个开始以来的天数,输入7/1/19作为开始日期,并将“shift”更改为从Hour(targetTime)开始的位置+2。这需要一些试验和错误。
你能解释一下为什么从小时(targetTime)改变从+2位置开始的转换允许这个公式工作而不是从原来的4crew计划开始的位置+1开始?我正在努力更好地理解这一点,以便我可以更有效地实施未来的变化。
谢谢,
格雷格
If( Row() == 1,
groupAschedule = "MMMMMMMAAAAAAADDDDDDD";
groupBschedule = "DDDDDDDMMMMMMMAAAAAAA";
groupCschedule = "AAAAAAADDDDDDDMMMMMMM";
hourSchedule = "MMMMMMMMDDDDDDDDAAAAAAAA";
startingDate = Informat( "7/1/2019", "M/D/Y" );
);
targetTime = :LadleOpenedTime;
If( Hour( targetTime ) == 23,
targetTime = targetTime + In Hours( 1 )
);
shift = Substr( hourSchedule, Hour( targetTime ) + 2, 1 );
offset = Mod( Date Difference( startingDate, targetTime, "Day" ), 21 ) + 1;
If(
Substr( groupASchedule, offset, 1 ) == shift, theCrew = "A",
Substr( groupBSchedule, offset, 1 ) == shift, theCrew = "B",
Substr( groupCSchedule, offset, 1 ) == shift, theCrew = "C"
);
thecrew;