Loading

Calcul des heures ouvrables entre deux horodatages

Date de publication: Jun 6, 2023
Tâche
Comment calculer le nombre d'heures ouvrables entre deux horodatages, par exemple pour calculer le temps consacré à une action en fonction d'un horodatage de soumission ([New]) et d'heure d'achèvement ([Processed]). 
 
Étapes
Cette solution part de l'hypothèse que vous utilisez des horodatages pour le début et la fin d'une action particulière, désignée ici comme [Action Start] et [Action End].  Les étapes ci-dessous sont démontrées dans le classeur joint.

Étape 1 :

Créez des paramètres pour marquer le début et la fin des heures ouvrables. Ceci vous permet d'ajuster les heures ouvrables selon vos besoins.
  1. Faites un clic droit dans le volet Données, puis sélectionnez Créer un paramètre.
  2. Nommez le paramètre Heure d'ouverture du jour, entrez les valeurs suivantes puis cliquez sur OK : 
    • Type de données : Entier
    • Valeurs autorisées : Plage
    • Minimum :
    • Maximum : 12 
    • Taille d'incrément :
  3. Faites un clic droit dans le volet Données, puis sélectionnez Créer un paramètre.
  4. Nommez le paramètre Minute d'ouverture du jour, entrez les valeurs suivantes puis cliquez sur OK : 
    • Type de données : Chaîne
    • Valeurs autorisées : Liste 
    • Liste des valeurs : « 00 », « 15 », « 30 » et « 45 » 
  5. Répétez les deux étapes ci-dessus pour Heure de fermeture du jour et Minute de fermeture du jour
Remarque : les étapes ci-dessus sont basées sur un format temporel 12 heures, et des heures de début et de fin par intervalles de 15 minutes. Effectuez les ajustements nécessaires (0-24 au lieu de 1-12 pour les heures, toutes les 10 minutes au lieu de toutes les 15 minutes, etc.) pour votre programmation. 

Étape 2 :

Créez des calculs pour arrondir au jour ouvrable suivant.
  1. Sélectionnez Analyse > Créer un champ calculé
  2. Nommez le champ « Action Start: Rounded », entrez le calcul suivant, puis cliquez sur 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. Sélectionnez Analyse > Créer un champ calculé et nommez le champ « Action Start: Round to Weekday » et entrez le calcul suivant pour vérifier si les nouveaux horodatages arrondis tombent sur une fin de semaine :
    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. Répétez les deux calculs ci-dessus pour [Action End].

Étape 3 : 

Créez des calculs pour trouver la différence temporelle.
  1. Créez le calcul ci-dessous et nommez- le « Start : Time to end of day"
    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. Répétez le calcul suivant avec Day Open Hour et Minute et nommez-le « End : Time from Start Of Day »
  3. Créez trois calculs DATEDIFF pour vous aider lors du calcul du résultat final, un pour les minutes, les jours et les semaines respectivement :
    « DateDiff Days »
    DATEDIFF('day', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
    « DateDiff minutes »
    DATEDIFF('minute', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
    « DateDiff weeks »
    DATEDIFF('week', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
  4. Créez un calcul pour enregistrer le nombre de minutes par jour de travail et appelez-le « minutes par jour de travail »
    (60 * (12 + [Day Close Hour (pm)] - [Day Open Hour (am)]) + INT([Day Close Minute (pm)]) - 
    INT([Day Open Minute (am)]))
  5. Créez un calcul final pour rassembler toutes les pièces :
     
    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
Ressources supplémentaires
En résumé, les étapes ci-dessus arrondissent les horodatages. Ainsi, s'ils tombent en-dehors des horaires d'ouverture quotidiens habituels, ils seront arrondis au début du jour ouvrable suivant.

Discuter de cet article... Forum de commentaires
Numéro d’article de la base de connaissances

001456485

Pièces jointes

DATEDIFF weekends & business hours.twbx

176 KB

 
Chargement
Salesforce Help | Article