Calculer le délai de travail entre deux dates Power BI (DAX)

Accueil – Le CFO masqué Forums Power Query Calculer le délai de travail entre deux dates Power BI (DAX)

Mots-clés :  Calculer la durée par heure entre deux dates

  • Ce sujet contient 16 réponses, 9 participants et a été mis à jour pour la dernière fois par PALEX966, le il y a 1 mois et 1 semaine.
15 sujets de 1 à 15 (sur un total de 17)
  • Auteur
    Articles
  • #29342
    haitham.zomorda
    Participant

    Je suis appelé à faire un calcul de délais entre deux dates(Timestamp) D1 et D2 sur l’ensemble des lignes d’une table en prenant en compte les jours fériés, les weekend et les heures de travail(8h à 12h et de 12h à 18h).
    J’ai commencé par calculer les jours ouvrés c’est à dire le nombre de jours de travail en éliminant les jours fériés et les weekends.
    CALCULATE(SUM(DimDate[JourTravail]);DATESBETWEEN(DimDate[Date];table[Date1];table[Date2]))
    Et j’essais de calculer le délai en minute de travail en prenant en compte les horaires de travail de 8 à 12 et de 14 à 18h.
    Exemple :
    D1: 29/04/2016 16:25:00
    D2:3/05/2016 8:57:00
    La formule doit calculer 1h35mn le Vendredi, ne prend pas en compte le samedi et dimanche, calculer le 2/05 toute la journée cà dire 8h de travail, et enfin me rendre 0h57mn du 03/05 pour m’afficher 8+0:57+1h35 en total.
    Voici des exemples des dates en image ci-jointe.
    Avez-vous une idée sur la réalisation de ceci?

    Je vous remercie infiniment pour votre aide.

    Attachments:
    You must be logged in to view attached files.
    #29344
    Sophie Marchand
    Participant

    Bonjour,

    Vous pouvez calculer le nombre de jours ouvrables via Power Query (ou l’équivalent dans Power BI Desktop), de la façon décrite dans notre article de blogue https://www.lecfomasque.com/power-query-trouver-le-nombre-de-jours-ouvrables/.

    Sinon, si vous souhaitez utiliser Power Pivot (ou l’équivalent dans Power BI Desktop) et calculer le nombre de jours ouvrables en DAX, vous pouvez vous référer à l’article de blogue suivant http://sqlblog.com/blogs/alberto_ferrari/archive/2011/01/19/working-days-computation-in-powerpivot.aspx.

    Au plaisir,

    Sophie

    #29346
    haitham.zomorda
    Participant

    Merci Pour votre réponse, en effet je voudrais calculer le nombre d’heures et minutes de travail, pas le nombre de jours et cela en prenant en compte les jours fériés, les weekends et les horaires de travail(8->12/14->18).
    NB: Le nombre de jours ouvrables est déjà calculé.
    Exemple : entre aujourd’hui 18h01 et demain 10h du matin je dois avoir 2h de différence comme résultat entre mes deux dates.
    J’espère que j’ai bien transmis le message.

    #49952
    chaimae
    Participant

    Bonjour,
    je dois faire un calcul de la durée entre 2 dates par heure.
    Exemple: entre aujourd’hui 10h et ajourd’hui 18h, je dois avoir 8h de différence comme résultat entre mes deux dates.
    j’ai commencé par créer une table pour calculer le nombre de jours ouvrables pour éliminer les weekend et les jours fériés.Ensuite j’ai créer une colonne pour calculer la durée en utilisant la requête suivante: Age ticket = CALCULATE(SUM(‘Date'[WorkDay]);DATESBETWEEN(‘Date'[Date].[Date];Append1[Created];Append1[Closed]))
    le problème c’est qu’il m’affiche juste la différence des deux dates en jours mais pas en heure.

    #49954
    Sophie Marchand
    Participant

    Bonjour,

    Vous trouverez une explication complète ici https://community.powerbi.com/t5/Desktop/Calculating-day-time-difference/td-p/59601.

    Au plaisir,

    Sophie

    #85954
    JMAIN
    Participant

    Bonjour,
    Je rencontre le même problème.
    Comment faire dans Power BI (en DAX ou Query) pour ôter les heures non travaillées.
    Exemple ci-joint (fais dans Excel) :
    Les heures travaillées sont 8h 17h, donc entre 17h et 8h ça ne devrait pas être compté.
    Je souhaite obtenir le résultat de la colonne F et non celui de H.
    Je ne vois pas comment faire, si quelqu’un à la solution ou une piste.

    Attachments:
    You must be logged in to view attached files.
    #85966
    Stéphane Lorin
    Participant

    Bonjour

    Voici une solution avec Power Query

    J’ai une table avec une référence (“Id”) et une date/heure de “Début” et une date/heure de “Fin”
    Ainsi qu’un planning d’ouverture pour chaque jour “H_Début” et “H_Fin” (via une table de correspondance)

    Avec la fonction List.Dates je crée une liste des jours entre “Début” et “Fin”
    Je développe en lignes puis je fusionne pour récupérer les “H_Début” et “H_Fin” de chaque jour
    Ensuite la durée de mon “Id” sur chacune de ces journée “Date” est donnée par la différence si elle est positive de
    MIN(“Fin” , “Date + H_Fin”)-MAX(“Début” , “Date + H_Début)

    Il ne reste plus qu’à regrouper la table en sommant ces durées quotidiennes

    Voir exemple Excel ci-joint

    Cordialement

    Stéphane

    Attachments:
    You must be logged in to view attached files.
    #86139
    JMAIN
    Participant

    Bonjour,

    Merci Stéphane, tout a fonctionné parfaitement.

    Cordialement.

    #86881
    Lamia Zumsteg
    Participant

    Bonjour Stephane,
    J’ai exactement le même besoin que Jmain sauf que je n’y arrive pas. Je ne suis malheureusement pas encore assez à l’aise avec les formules 🙁
    J’ai fait la fonction List.Dates pour créer la liste des jours entre “Début” et “Fin” puis j’ai récupéré les “H_Début” et “H_Fin” de la table “Type d’ouverture”.
    A partir de là je bloque.

    Est ce que je reviens sur la table initiale (ID, Début, Fin)?
    Comnment ecrire cette formule en M?
    Je ne suis vraiment pas très fier 🙁
    Salutations
    Zumsl

    #87387
    Stéphane Lorin
    Participant

    Bonjour

    Si je comprends bien vous bloquez après avoir récupéré les “H_Début” et “H_Fin” de la table “Type d’ouverture”.
    J’ajoute ensuite 2 colonnes personnalisées (menu “ajouter une colonne”, “colonne personnalisée”)
    La première pour faire le max entre le début de la plage étudiée et le jour + heure début du jour avec la fonction List.Max
    La seconde pour faire le min entre la fin de la plage étudiée et le jour + heure fin du jour avec la fonction List.Min
    Ensuite j’ajoute une troisième colonne personnalisée pour faire la différence entre les deux uniquement si elle est positive avec la formule
    each if [Date_Heure fin] > [Date_Heure début] then [Date_Heure fin] – [Date_Heure début] else #duration(0,0,0,0)
    J’obtiens ainsi la durée de ma plage sur le jour étudié.
    Enfin je regroupe le tout en additionnant toutes les valeurs quotidiennes obtenues

    Est-ce plus clair ?

    Stéphane

    #87798
    Enzo Manfredi
    Participant

    Bonjour Stephane,

    Je n’arrive pas à comprendre comment le calcul peut se faire (surtout si la différence de date est supérieure à 1 jour!).
    Serait-il possible de joindre votre planche BI afin qu’il soit plus facile de comprendre votre démarche svp ?

    Typiquement je ne comprends pas comment vous regroupez “le tout en additionnant toutes les valeurs quotidiennes obtenues”

    En vous remerciant.

    Cordialement,

    Enzo

    #87904
    Stéphane Lorin
    Participant

    Bonjour Enzo

    regardez la pièce jointe de mon message du 15 janvier et ouvrez les requêtes Power Query.
    vous comprendrez comment je gère les plages > à 1 jour et le regroupement pour additionner les valeurs quotidiennes.

    Cordialement

    Stéphane

    #87905
    Enzo Manfredi
    Participant

    Bonjour Stephane,

    Merci beaucoup ! C’est top. Merci pour votre patience et votre rapidité.

    Bonne journée.

    Cordialement,

    Enzo

    #88063
    Lamia Zumsteg
    Participant

    Bonjour Stephane,
    J’ai du m’absenter un moment et je n’ai pas pu te donner un feedback. Désolée.
    C’est génial
    Merci encore pour ta disponibilité.
    Lamia

    #89741
    Axsus
    Participant

    Bonjour Stéphane,

    Pourriez vous m’aider a réaliser ce que vous avez fait. Je n’ai pas tout compris comment il fallait faire.

    Merci,
    Cordialement.

15 sujets de 1 à 15 (sur un total de 17)
  • Vous devez être connecté pour répondre à ce sujet.