Hai bisogno di aiuto per assegnare una colonna in base a tempi variabiliCiao,
Sto tentando di creare una nuova colonna nella mia tabella di dati 'Crew' basata su una colonna datetime esistente, LadleOpenTime (un sottoinsieme di ladleopentimes è mostrato sotto).
I tempi per gli equipaggi (turni di swing A, B, C o D) seguono un programma prestabilito indicato dalla tabella excel qui sotto:
Il programma dura 7 giorni, 2 giorni di riposo, 7 giorni di riposo, 2 giorni di riposo, 7 giorni di riposo su 3 giorni, quindi si ripete per ciascun equipaggio.
Midnight (11:00 PM-7:00AM), Days (7:00 AM-3:00PM), Afternoons (3:00 PM-11:00PM).
C'è un modo per codificarlo in jsl?
Apprezzo qualsiasi e tutti i feedback


Ri: Hai bisogno di aiuto per assegnare la colonna in base a tempi variabiliCredo che quanto segue ti porterà ciò che desideri. L'unica cosa che devi fare è impostare una data nel passato che è una domenica, dove Crew C sta lavorando in Midnight, la squadra A sta lavorando ai giorni, la squadra D sta lavorando ai pomeriggi e la squadra B è disattivata. Questa data inizia il ciclo di 28 giorni per il tuo modello. La formula determina il numero di giorni dall'ultimo inizio del ciclo, determina lo Shift e quindi trova quale Crew stava lavorando su quel turno. Non ho dati reali, ma credo che la metodologia funzionerà. Provalo con alcuni dei tuoi dati reali. Ricorda, il mio valore StartingDate non è corretto. È necessario modificarlo come descritto sopra. Crea la tua nuova colonna chiamata "Crew" e incolla questa formula in essa. In caso di problemi, si prega di rispondere e fornire una data di avvio corretta e allegare una tabella di dati di esempio con la colonna 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;
Ri: Hai bisogno di aiuto per assegnare la colonna in base a tempi variabiliGrazie! Ha funzionato perfettamente.
Ri: Hai bisogno di aiuto per assegnare la colonna in base a tempi variabiliSenza vedere i tuoi dati: LadleOpenTime, non posso essere positivo nella mia affermazione, ma sembra che i tuoi valori LadleOpenTime non siano allineati con hourSchedule.
Ri: Hai bisogno di aiuto per assegnare la colonna in base a tempi variabiliPotrebbe essere dovuto al fatto che i turni sono compensati di un'ora? vale a dire. 11-7, 7-3, 3-11, contro 12-8, 8-4, 4-12.
Ho cambiato l'oraSchedule in "MMMMMMMDDDDDDDDAAAAAAAAM" e ho ripristinato il turno per iniziare dalla posizione +1 e questo ha funzionato lo stesso.
Grazie per il tempo dedicato a rispondere,
Greg
Ri: Hai bisogno di aiuto per assegnare la colonna in base a tempi variabiliCiao Jim,
Sto cercando di creare una nuova colonna per un programma di rotazione inversa di 3 giri. L'equipaggio D non esiste più, rimangono solo A, B e C.
Gli equipaggi ruotano i turni in ordine inverso passando da mezzanotte -> pomeriggi -> giorni -> mezzanotte ogni 7 giorni. Quindi un ciclo completo viene completato ogni 21 giorni.
Il 7/1/19, un equipaggio era a mezzanotte, l'equipaggio B era nei giorni e l'equipaggio C era nei pomeriggi.
Ho provato a modificare la formula precedente come mostrato di seguito:
Ho cancellato il programma dell'equipaggio D e associato le dichiarazioni if, sostituito i programmi dell'equipaggio A, B, C con i nuovi programmi, ottimizzato "offset" per controllare i giorni dall'ultimo inizio del ciclo ora 21 giorni, immesso il 7/1/19 come data di inizio e ha cambiato "shift" per iniziare nella posizione +2 dall'ora (targetTime). Ciò ha richiesto alcuni tentativi ed errori.
Puoi spiegare perché la modifica del turno per iniziare nella posizione +2 dall'ora (targetTime) ha permesso a questa formula di funzionare rispetto a partire dalla posizione +1 come è stato fatto per il programma originale a 4 viti? Sto cercando di capire meglio questo in modo da poter implementare in modo più efficace i cambiamenti futuri.
Grazie,
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;