需要幫助根據可變時間分配列你好,
我試圖在我的數據表'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?
感謝所有反饋


Re:需要幫助根據可變時間分配列我相信以下內容可以滿足您的需求。 你唯一需要做的就是設置一個過去的日期,即周日,船員C正在工作Midnights,船員A正在工作日,船員D工作在下午,船員B是關閉。 此日期為您的模式開始28天的周期。 該公式確定從周期的最後一個開始的天數,確定Shift,然後查找哪個Crew正在使用該Shift。 我沒有任何實際數據,但我相信這種方法可行。 嘗試使用一些真實數據。 請記住,我的StartingDate值不正確。 您需要如上所述進行更改。只需創建名為“Crew”的新列並將此公式粘貼到其中。 如果您有任何問題,請回复並提供正確的StartingDate,並附上包含LabelOpenTime列的示例數據表。
If(Row()==1,
groupAschedule = "DOOAAAAAAAOOMMMMMMMOOODDDDDD";
groupBschedule = "ODDDDDDDOOAAAAAAAOOMMMMMMMOO";
groupCschedule = "MMMMMOOODDDDDDDOOAAAAAAAOOMM";
groupDschedule = "AAAOOMMMMMMMOOODDDDDDDOOAAAA";
hourSchedule = "MMMMMMMDDDDDDDDAAAAAAAA";
startingDate = informat("12/31/2017", "M/D/Y");
);
targetTime = :LadleOpenTime;
If(hour(targettime)==23, targetTime=targetTime+in hours(1));
shift = substr(hourSchedule,hour(targetTime)+1,1);
offset = Mod(date difference(startingDate,targetTime,"Day"),28)+1;
If( substr(groupASchedule,offset,1)==shift, theCrew="A",
groupBSchedulesubstr(offset,offset,1)==shift, theCrew="B",
groupCSchedulesubstr(offset,offset,1)==shift, theCrew="C",
groupDSchedulesubstr(offset,offset,1)==shift, theCrew="D"
);
thecrew;
Re:需要幫助根據可變時間分配列謝謝!這非常有效。
Re:需要幫助根據可變時間分配列在沒有看到你的:LadleOpenTime數據的情況下,我的聲明中我不能肯定,但看起來你的LadleOpenTime值與你的hourSchedule不一致。
Re:需要幫助根據可變時間分配列可能是因為班次偏移了一個小時?即。11-7,7-3,3-11,與12-8,8-4,4-12。
我將hourSchedule更改為“MMMMMMMDDDDDDDDAAAAAAAAM”並將班次恢復為從+1位置開始,這樣做完全相同。
感謝您抽出時間回复,
格雷格
Re:需要幫助根據可變時間分配列吉姆,嗨,
我正在嘗試為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;