Loading

Calcolo delle ore di lavoro tra due timestamp

Data pubblicazione: Jun 6, 2023
Operazione
Come calcolare il numero di ore lavorative tra due timestamp, ad esempio per calcolare il tempo dedicato a qualcosa sulla base di un timestamp per l'invio ([Nuovo]) e quando è stato completato ([Elaborato]).
 
Fasi
Questa soluzione presuppone che si disponga di timestamp per l'inizio e la fine di una particolare azione, qui denominata [Avvio azione] e [Fine azione].  I passaggi seguenti sono illustrati nella cartella di lavoro allegata.

Passaggio 1:

Crea parametri per contrassegnare l'inizio e la fine dell'orario di lavoro. Questo ti permetterà di regolare l'orario di lavoro in base alle tue esigenze.
  1. Fai clic con il tasto destro del mouse nel riquadro dati e seleziona Crea Parametri
  2. Denomina il parametro Orario di apertura giornaliera, immetti i seguenti valori, quindi fai clic su OK
    • Tipo di dati: Numero intero
    • Valori ammessi: Intervallo
    • Minimo: 1
    • Massimo: 12
    • Dimensione incremento: 1
  3. Fai clic con il tasto destro del mouse nel riquadro dati e seleziona Crea parametri.
  4. Denomina il parametro Minuto di apertura giornaliera, immetti i seguenti valori, quindi fai clic su OK
    • Tipo di dati: stringa
    • Valori ammessi: elenco
    • Elenco di valori: "00", "15", "30" e "45" 
  5. Ripeti i due passaggi precedenti per Ora di chiusura giornaliera e Minuto di chiusura giornaliera
Nota: I passaggi precedenti si basano sul formato a 12 ore e gli orari di inizio e fine in intervalli di 15 minuti. Regola secondo necessità (formato di 24 ore invece che di 12, ogni 10 invece che ogni 15 minuti, ecc.) per la tua pianificazione.

Passaggio 2:

Crea calcoli per arrotondare al giorno lavorativo successivo.
  1. Seleziona Analisi > Crea campo calcolato 
  2. Denomina il campo "Inizio azione: arrotondato", immetti il seguente calcolo, quindi fai clic su OK
     
    IF (DATEPART('hour', [Action Start]) * 60) + DATEPART('minute', [Action Start])  > (60 * (12 + [Day Close Hour]) ) + INT([Day Close Minute])
    THEN
    // created after End of Day so round to start of next business day
    DATEADD('minute', (60 * (24 + [Day Open Hour])) + INT([Day Open Minute]), DATETRUNC('day',[Action Start])) 
    ELSEIF
    (DATEPART('hour', [Action Start]) * 60) + DATEPART('minute', [Action Start])  < (60 * [Day Open Hour]) + INT([Day Open Minute])
    THEN
    // created before Start of Day so round to start of business day
    DATEADD('minute', (60 * [Day Open Hour]) + INT([Day Open Minute]), DATETRUNC('day',[Action Start])) 
    ELSE
    [Action Start]
    END
  3. SelezionaAnalisi > Crea campo calcolato, denomina il campo "Inizio azione: Arrotonda al giorno della settimana" e immetti il seguente calcolo per verificare se i nuovi timestamp arrotondati cadono nel fine settimana:
    IF DATENAME('weekday',[Action Start : Rounded]) = "Saturday" 
    THEN 
    // move to start of day monday by adding two days (48 hrs) and the monday morning hours
    DATEADD('minute', (60 * (48 + [Day Open Hour])) + INT([Day Open Minute]), DATETRUNC('day', [Action Start : Rounded]))
    ELSEIF DATENAME('weekday',[Action Start : Rounded]) = "Sunday" 
    THEN
    // move to start of day monday by adding a day (24 hrs) and the monday morning hours
    DATEADD('minute', (60 * (24 + [Day Open Hour])) + INT([Day Open Minute]), DATETRUNC('day', [Action Start : Rounded]))
    ELSE 
    [Action Start : Rounded]
    END
  4. Ripeti i due calcoli sopra indicati per [Fine azine].

Passaggio 3:

Crea calcoli per trovare la differenza di tempo.
  1. Crea il calcolo sottostante e denominaloInizio: Tempo fino alla fine del giorno"
    DATEDIFF(  'minute',
        [Action Start: Round to Weekdays], 
        DATEADD('minute', (60 * (12 + [Day Close Hour])) + INT([Day Close Minute]), DATETRUNC('day',[Action Start: Round to Weekdays]))
    )
  2. Ripeti il calcolo di cui sopra con Orarioe Minuto di apertura giornaliera e denominalo "Fine: Tempo dall'inizio del giorno:"
  3. Crea tre calcoli DATEDIFF per calcolare il risultato finale di minuti, giorni e settimane:
    "Giorni DateDiff"
    DATEDIFF('day', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
    "Minuti DateDiff"
    DATEDIFF('minute', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
    "Settimane DateDiff"
    DATEDIFF('week', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
  4. Crea un calcolo per tenere traccia del numero di minuti per giorno lavorativo e denominalo "minuti per giorno lavorativo" 
    (60 * (12 + [Day Close Hour (pm)] - [Day Open Hour (am)]) + INT([Day Close Minute (pm)]) - 
    INT([Day Open Minute (am)]))
  5. Crea un calcolo finale per mettere insieme tutti i pezzi:
     
    IF DATETRUNC('day', [Action Start: Round to Weekdays]) = DATETRUNC('day', [Action End : Round to Weekdays])
    THEN
    // the same day so just return the minutes between the two times on the same day
    [DateDiff minutes]
    ELSEIF DATETRUNC('week', [Action Start: Round to Weekdays]) = DATETRUNC('week', [Action End : Round to Weekdays])
    THEN
    // the two days are in the same week, so add the time on the created day, the time on the end day, plus a full day for each day between
    (([DateDiff days] - 1) * [Minutes per workday] ) + [Start: Time to end of day] + [End : Time from start of day ]
    ELSE
    // the days are in two different weeks, so get the same calc as above, and subtract the weekends between
    // weekends between would be datediff weeks * 2 * work minutes per day
    (([DateDiff days] - 1 - ([DateDiff weeks] * 2)) * [Minutes per workday] ) + [Start: Time to end of day] + [End: Time from start of day ]
    END
Risorse aggiuntive
In sintesi, nei passaggi sopra elencati vengono arrotondati tutti i timestamp in modo che, se rientrano nel normale orario di lavoro giornaliero, saranno arrotondati all'inizio del giorno lavorativo successivo.

Commenta questo articolo... Feedback Forum
Numero articolo Knowledge

001456485

Allegati

DATEDIFF weekends & business hours.twbx

176 KB

 
Caricamento
Salesforce Help | Article