Besoin d'aide pour assigner une colonne en fonction de durées variablesBonjour,
Je tente de créer une nouvelle colonne dans ma table de données 'Crew' basée sur une colonne datetime existante, LadleOpenTime (un petit sous-ensemble de ladleopentimes est présenté ci-dessous).
Les horaires des équipages (équipes A, B, C ou D) suivent un horaire fixe indiqué dans le tableau Excel ci-dessous:
L'horaire est de 7 jours, 2 jours, 7 jours, 2 jours, 7 jours sur 3 jours, puis répétez pour chaque équipage.
Midnights (23h00-19h00), jours (7h00-15h00), après-midi (15h00-23h00).
Est-il possible de coder ceci en jsl?
Apprécier tous les commentaires


Re: Besoin d'aide pour assigner une colonne en fonction de durées variablesJe crois que ce qui suit vous donnera ce que vous voulez. La seule chose que vous devez faire est de fixer une date dans le passé qui est un dimanche, où l’équipage C travaille à minuit, l’équipe A travaille, l’équipe D travaille l’après-midi et l’équipe B est en congé. Cette date commence le cycle de 28 jours pour votre modèle. La formule détermine le nombre de jours à partir du dernier début du cycle, détermine le décalage, puis détermine quel équipage travaillait sur ce décalage. Je n'ai pas de données réelles, mais je pense que la méthodologie fonctionnera. Essayez-le avec certaines de vos données réelles. N'oubliez pas que ma valeur StartingDate n'est pas correcte. Vous devez le changer comme décrit ci-dessus. Créez simplement votre nouvelle colonne intitulée "Crew" et collez-y cette formule. Si vous rencontrez des problèmes, veuillez répondre et fournir une date de départ correcte, puis joignez un exemple de table de données contenant votre colonne 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: Besoin d'aide pour assigner une colonne en fonction de durées variablesJe vous remercie! Cela a fonctionné parfaitement.
Re: Besoin d'aide pour assigner une colonne en fonction de durées variablesSans voir vos données: LadleOpenTime, je ne peux pas être positif dans ma déclaration, mais il semble que vos valeurs LadleOpenTime ne soient pas alignées sur votre hourSchedule.
Re: Besoin d'aide pour assigner une colonne en fonction de durées variablesSerait-ce dû au fait que les quarts de travail sont décalés d'une heure? c'est à dire. 11-7, 7-3, 3-11, par rapport à 12-8, 8-4, 4-12.
J'ai changé le hourSchedule en "MMMMMMMDDDDDDDDAAAAAAAAM" et inversé le décalage pour commencer à la position +1 et cela a fonctionné de la même manière.
Merci de prendre le temps de répondre,
Greg
Re: Besoin d'aide pour assigner une colonne en fonction de durées variablesSalut Jim,
J'essaie de créer une nouvelle colonne pour un programme de rotation inversée à 3 tours. L'équipage D n'existe plus, il ne reste que A, B et C.
Les équipes tournent les équipes en sens inverse, à partir de minuit -> après-midi -> jours -> minuit tous les 7 jours. Donc, un cycle complet se termine tous les 21 jours.
Le 7/1/19, un équipage était en milieu de nuit, un équipage B en jours, et un équipage C en après-midi.
J'ai essayé de modifier votre formule précédente comme indiqué ci-dessous:
J'ai supprimé l'horaire de l'équipage D et les déclarations si associées, remplacé les horaires d'équipage A, B, C par les nouveaux horaires, modifié "offset" pour vérifier les jours depuis le dernier début du cycle de 21 jours, entré le 1/7/19 comme date de début, et changé "shift" pour commencer à la position +2 de l'heure (targetTime). Cela a pris des essais et des erreurs.
Pouvez-vous expliquer pourquoi le fait de changer le quart de travail pour commencer à la position +2 de l'heure (targetTime) a permis à cette formule de fonctionner par rapport à la position +1, comme cela a été fait pour le programme d'origine à 4 équipes? J'essaie de mieux comprendre cela afin de pouvoir mettre en œuvre plus efficacement les changements futurs.
Merci,
Greg
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;