Come calcolare il numero di giorni lavorativi?Ciao comunità
Ho bisogno del tuo aiuto e del tuo consiglio ancora una volta. Come nuovo utente sto lottando per imparare.
Ho una tabella dati con data di inizio e data di fine. Vorrei calcolare il numero di giorni lavorativi tra la data di inizio e la data di fine ?? Qual è il modo migliore per farlo in JMP? La mia idea è aggiungere una colonna e creare una formula, ad es Differenza di data ?? Ma non sono sicuro di quale sarebbe l'opzione migliore.
vedere l'esempio allegato

Grazie
Martin
AnalyticsTabella datiRi: Come calcolare il numero di giorni lavorativi?La prima cosa che devi fare è definire la "giornata lavorativa". È ogni giorno della settimana (dal lunedì al venerdì)? E le festività bancarie / governative? Festività religiose?
Ri: Come calcolare il numero di giorni lavorativi?Anche altre domande: le date di JMP includono sempre un'ora, spesso impostata su zero secondi dopo la mezzanotte. Ma se l'intervallo va da mezzogiorno dal lunedì a mezzogiorno di lunedì 7 giorni dopo, come vuoi contare i due mezzi lunedì? O anche se è mezzanotte all'inizio di lunedì, dovrebbero essere contati entrambi?
Contare i giorni potrebbe non essere una cattiva scelta se i tuoi intervalli sono piccoli e non troppi (segue un codice mal testato):
// define an expression that answers the question
includeThisDate = Expr(
2/*monday*/<= Day Of Week( date ) <= 6/*friday*/
);
// brute force counting:
countSelectedDaysInRange = Function( {firstDate, lastDate, testexpr},
{date, count},
If( lastDate < firstDate,
Throw( "dates reversed" )
);
count = 0;
For( date = firstDate, date <= lastDate, date += In Days( 1 ),
count += (testexpr != 0)
);
count;
);
Show( 262 == countSelectedDaysInRange( 1jan2020, 31dec2020, Name Expr( includeThisDate ) ) );
Show( 104 == countSelectedDaysInRange( 1jan2020, 31dec2020, Expr( !(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/) ) ) );
Show( 366 == countSelectedDaysInRange( 1jan2020, 31dec2020, 1 ) );// 2020 is leap year
Show( 0 == countSelectedDaysInRange( 1jan2020, 31dec2020, 0 ) );// no days counted 262 == countSelectedDaysInRange (01Jan2020, 31Dec2020, Name Expr (includeThisDate)) = 1;
104 == countSelectedDaysInRange (01Jan2020, 31Dec2020, Expr (! (2 <= Day Of Week (date) <= 6))) = 1;
366 == countSelectedDaysInRange (01Jan2020, 31Dec2020, 1) = 1;
0 == countSelectedDaysInRange (01Jan2020, 31Dec2020, 0) = 1;
Il codice sopra include l'ultimo giorno (<= lastdate anziché
Per esperienza dolorosa so che lavorare con date e orari è difficile da ottenere.
Usa le funzioni incorporate il più possibile.
Commenta il codice per chi lo manterrà successivamente.
Testa attentamente il tuo codice!
Inoltre, se hai bisogno solo di un'approssimazione grossolana,
(1jan2021-1jan2020) / indays (1) * 5/7 == 261.428571428571
che è vicino al conteggio 262.
modificare: differenza di data (1jan2020,1jan2021, "giorno") * 5/7 potrebbe sembrare più semplice per la risposta grezza
Ri: Come calcolare il numero di giorni lavorativi?sì, i giorni lavorativi sono tutti i giorni feriali, (lun-ven) sarebbe meglio se potessi anche adattarmi alle festività locali
eventuali suggerimenti?
Ri: Come calcolare il numero di giorni lavorativi?La soluzione semplice sarebbe estendere l'espressione di test.
// define an expression that answers the question
holidays = associativearray({1jan2020,25dec2020});
includeThisDate = Expr(
(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/)
&
!(holidays<<CONTAINS></CONTAINS>Capodanno e Natale cadono nei giorni feriali nel 2020, quindi 260 anziché 262. Avrai bisogno di aggiornare l'array associativo in futuro e potresti aver bisogno anche di dati storici. Alcune festività non cadono nello stesso giorno ogni anno. Che brutto problema, che porta a ...
Una soluzione complicata potrebbe usare qualcosa di simile https://www.abstractapi.com/holidays-api
(Credito a @Jeff_Perkinson per Modifica di una colonna di data e ora per fornire solo la data. )
Ri: Come calcolare il numero di giorni lavorativi?lavorare con la codifica è nuovo per me e non mi sembra di farlo funzionare. tuttavia ho giocato con alcune delle formule standard e ho trovato una soluzione. che comunque utilizzano solo i giorni di calendario e non i giorni lavorativi. Per questo esperimento è abbastanza buono in quanto è lo stesso per il confronto.
Ri: Come calcolare il numero di giorni lavorativi?Per aggiungere un po 'a @Craige_Hales è e @Jeff_Perkinson pensieri sulle vacanze, ecc., hai menzionato pensieri sulla contabilizzazione delle "festività locali". Ciò diventa davvero difficile a meno che non si adotti una definizione standard di "locale". Ad esempio, il Canada ha una festa del "Ringraziamento", proprio come gli Stati Uniti. Tranne che è un giorno diverso sul calendario per il Canada rispetto agli Stati Uniti. E non farmi nemmeno iniziare a livello di città o stato negli Stati Uniti. Ad esempio, negli stati del Maine e del Massachusetts, il Patriot's Day è una festa, non celebrata in nessun'altra parte degli Stati Uniti. Per renderlo ancora più appiccicoso, alcune attività chiudono ... altre rimangono aperte. Banche e istituzioni finanziarie incluse.
Ri: Come calcolare il numero di giorni lavorativi?Il mio preferito è il vecchio North Carolina vacanza di baseball .
Ri: Come calcolare il numero di giorni lavorativi?Ciao @Martinej ,
Qualche tempo fa ho scritto un add-in che calcola il numero di giorni lavorativi tra due colonne di date. Le festività e gli altri giorni specifici che si desidera escludere vengono risolti mantenendo un file Holiday List.jmp archiviato nella directory del componente aggiuntivo. Nota: questo file potrebbe essere qualsiasi documento (Excel, .txt, .csv, ecc.) Mantenuto in qualsiasi posizione accessibile dalla macchina dell'utente JMP, tuttavia, ciò richiederebbe una piccola modifica al JSL sottostante per fornire la posizione del file. Altrimenti, credo che soddisfi la tua esigenza richiesta così com'è. Segui le istruzioni per scaricare, installare e modificare il file dell'elenco delle festività: Funzione NETWORKDAYS
Spero che questo ti aiuti,
Jerry
Ri: Come calcolare il numero di giorni lavorativi?Ciao Jerry
questo è stato davvero utile. Ho creato la mia lista e ora ha mostrato quello che vorrei.
Grazie
Martin