Necesita ayuda para asignar una columna en función de los tiempos variablesHola,
Estoy intentando crear una nueva columna en mi tabla de datos 'Personal' basada en una columna de fecha y hora existente, LadleOpenTime (a continuación se muestra un pequeño subconjunto de ladleopentimes).
Los tiempos para las tripulaciones (turnos A, B, C o D) siguen un horario fijo que se muestra en la siguiente tabla de excel:
El horario es de 7 días, dos días de descanso, 7 días de descanso, dos días de descanso, 7 días de 3 días de descanso, luego se repite para cada tripulación.
Medianoche (11:00 PM-7:00AM), días (7:00 AM-3:00PM), tardes (3:00 PM-11:00PM).
¿Hay alguna manera de codificar esto en jsl?
Aprecio cualquier y todos los comentarios


Re: Necesito ayuda para asignar una columna basada en tiempos variablesCreo que lo siguiente te dará lo que quieres. Lo único que debes hacer es establecer una fecha en el pasado, que es un domingo, donde la tripulación C está trabajando Medianoche, la tripulación A está trabajando los días, la tripulación D está trabajando por las tardes y la tripulación B está apagada. Esta fecha inicia el ciclo de 28 días para su patrón. La fórmula determina la cantidad de días desde el último comienzo del ciclo, determina el Cambio y luego determina qué Tripulación estaba trabajando en ese Cambio. No tengo ningún dato real, pero creo que la metodología funcionará. Pruébalo con algunos de tus datos reales. Recuerda, mi valor de StartingDate no es correcto. Necesitas cambiarlo como se describe arriba. Simplemente crea tu nueva columna llamada "Equipo" y pega esta fórmula en ella. Si tiene algún problema, responda y proporcione una Fecha de inicio correcta, y adjunte una tabla de datos de muestra que tenga su columna 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: Necesito ayuda para asignar una columna basada en tiempos variables¡Gracias! Eso funcionó perfectamente.
Re: Necesito ayuda para asignar una columna basada en tiempos variablesSin ver sus datos: LadleOpenTime, no puedo ser positivo en mi declaración, pero parece que sus valores LadleOpenTime no están alineados con su hourSchedule.
Re: Necesito ayuda para asignar una columna basada en tiempos variables¿Podría ser debido al hecho de que los turnos se compensan una hora? es decir. 11-7, 7-3, 3-11, frente a 12-8, 8-4, 4-12.
Cambié hourSchedule a "MMMMMMMDDDDDDDDAAAAAAAAM" y revertí el turno para comenzar en la posición +1 y esto funcionó de todos modos.
Gracias por tomarse el tiempo para responder,
Greg
Re: Necesito ayuda para asignar una columna basada en tiempos variablesHola Jim,
Estoy tratando de crear una nueva columna para un programa de rotación inversa de 3 vueltas. La tripulación D ya no existe, solo quedan A, B y C.
Las cuadrillas rotan los turnos en orden inverso desde medianoche -> tardes -> días -> medianoche cada 7 días. Entonces se completa un ciclo completo cada 21 días.
El 7/1/19, la tripulación A estaba en la medianoche, la tripulación B estaba en días y la tripulación C estaba en las tardes.
He intentado modificar su fórmula anterior como se muestra a continuación:
Eliminé el horario de la tripulación D y asocié las declaraciones if, reemplacé los horarios de la tripulación A, B, C con los nuevos horarios, modifiqué el "desplazamiento" para verificar los días desde el último comienzo del ahora ciclo de 21 días, ingresé el 7/1/19 como la fecha de inicio, y cambió "shift" para comenzar en la posición +2 desde la Hora (targetTime). Esto requirió algunas pruebas y errores.
¿Puede explicar por qué cambiar el turno para comenzar en la posición +2 desde la Hora (targetTime) permitió que esta fórmula funcionara en lugar de comenzar en la posición +1 como se hizo para el horario original de 4crew? Estoy tratando de entender mejor esto para poder implementar de manera más efectiva los cambios futuros.
Gracias,
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;