可変時間に基づく列の割り当てに関するヘルプが必要こんにちは、
既存のdatetime列LadleOpenTimeに基づいて、データテーブル 'Crew'に新しい列を作成しようとしています(ladleopentimesの小さなサブセットを以下に示します)。
乗組員のための時間(A、B、C、またはDのスイングシフト)は、下のエクセル表に示された固定スケジュールに従います:
スケジュールは7日オン、2日オフ、7日オン、2日オフ、7日3日オフの順で、その後、各クルーについて繰り返します。
深夜(11:00 PM - 7:00 AM)、日数(7:00 AM - 3:00 PM)、午後(3:00 PM - 11:00 PM)。
これをjslにコーディングする方法はありますか?
ありとあらゆるフィードバックを高く評価する


再:可変時間に基づいて列を割り当てるのに助けが必要私は以下があなたが望むものをあなたに得ると信じています。 あなたがする必要がある唯一のことは、クルーCがミッドナイトで働いていて、クルーAが日で働いていて、クルーDが午後に働いていて、そしてクルーBがオフである日曜日です。 この日付はあなたのパターンの28日間のサイクルを始めます。 計算式は、サイクルの最後の開始からの日数を決定し、シフトを決定してから、どのシフトがそのシフトを実行していたかを見つけます。 実際のデータはありませんが、方法論はうまくいくと思います。 実際のデータをいくつか試してみてください。 覚えておいて、私の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;
再:可変時間に基づいて列を割り当てるのに助けが必要ありがとうございました!それは完璧に機能しました。
再:可変時間に基づいて列を割り当てるのに助けが必要あなたの:LadleOpenTimeデータを見ることなく、私は私の声明に肯定的ではありませんが、あなたのLadleOpenTime値はあなたのhourScheduleと整合していないようです。
再:可変時間に基づいて列を割り当てるのに助けが必要それはシフトが1時間相殺されるという事実によるものでしょうか?すなわち。11-7、7-3、3-11、対12-8、8-4、4-12。
hourScheduleを「MMMMMMMDDDDDDDDAAAAAAAAAAM」に変更し、シフトを元の位置+1に戻すと、すべて同じように機能しました。
お返事ありがとうございます。
グレッグ
再:可変時間に基づいて列を割り当てるのに助けが必要こんにちはジム、
3ターンの逆回転スケジュールの新しい列を作成しようとしています。D乗組員はもはや存在せず、A、B、およびCのみが残ります。
乗組員は、7日ごとに深夜->午後->日->深夜から逆順にシフトを交代します。したがって、完全なサイクルは21日ごとに完了します。
19年7月1日、A乗組員は真夜中に、B乗組員は日中、C乗組員は午後にいました。
以下に示すように、以前の式を変更しようとしました。
D乗組員のスケジュールを削除し、ifステートメントを関連付け、A、B、C乗組員のスケジュールを新しいスケジュールに置き換え、「オフセット」を調整して、21日サイクルの最後の開始以降の日数を確認し、19/1/19を入力しました開始日として、および「shift」をHour(targetTime)から位置+2で開始するように変更しました。これには試行錯誤が必要でした。
Hour(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;