DATEADD en jour ouvré

Accueil – Le CFO masqué Forums Power Query DATEADD en jour ouvré

  • Ce sujet contient 3 réponses, 2 participants et a été mis à jour pour la dernière fois par Kim Leblanc, le il y a 10 mois et 1 semaine.
4 sujets de 1 à 4 (sur un total de 4)
  • Auteur
    Articles
  • #125491
    nicolas.bruneel
    Participant

    Bonjour,

    Je débute un peu en langage M et plus généralement sur PowerBi.

    Je cherche à reproduire quelques chose que je fais très simplement en SQL sans y parvenir.

    Je cherche à faire un dateadd qui me renvoie une date en jour ouvrés (WE et jours fériés inclus)
    ex : Si je reçois une commande après 15h. Je dois ajouter 1 jour OUVRE. Donc si je ma commande arrive le 24/12 à 16h30. la date renvoyée doit être le 26/12.

    J’ai bien une fonction personnalisée qui me calcul les week end et les jours feriés pour faire du DATEDIFF entre 2 dates donnéés. mais impossible de trouver comment l’appliquer dans le cas du dateadd.

    Je dois par être bien loin pourtant.

    Si quelqu’un peut m’aider ce serait super sympa :-).

    #125497
    Kim Leblanc
    Maître des clés

    Bonjour,
    Vous pourriez utiliser la fonction Date.AddDays conjointement avec Date.DayOfWeek qui renvoie le jour de la semaine. À l’aide de condition (if then else) vous ajoutez le nombre de jours en fonction du résultat du Date.DayOfWeek.

    Vous pourriez aussi faire votre calcul en DAX à l’aide de la fonction NETWORKDAYS. Vous en avez un exemple dans l’article suivant:

    Langage DAX : calculer le nombre de jours entre 2 dates

    Au plaisir,

    Kim

    #128501
    nicolas.bruneel
    Participant

    Bonjour Kim,

    déjà merci pour la réponse (que je n’avais pas vu).

    J’avais a peu près réussi à m’en sortir en M en ajoutant une liste de jour feriés mais lors du chargement des données cela mets un temps fou et me charge plusieurs GO de données lié à ma liste de jours fériés (alors que je n’ai mis que 2023) !

    Il doit y avoir quelques chose qui ne va pas.

    J’aurais préféré le faire en DAX mais je ne vois pas comment calculer une date “inconnues” avec NETWORKDAY.

    Voici ce que j’ai fais.
    Est-ce que votre œil expert voit quelque chose de choquant ?

    if Date.DayOfWeek([Mouvements.Commandes.OPE_CRDA],Day.Monday) >= 5 then
    List.Select(List.Dates(Date.AddDays([Mouvements.Commandes.OPE_CRDA],3),10,#duration(1,0,0,0)),
    each Date.DayOfWeek(_, Day.Monday)<5 and List.IsEmpty(List.Intersect({JourFeries, {_}}))){0}
    else
    if Time.Hour([Mouvements.Commandes.OPE_CRHE]) > 12 then
    List.Select(List.Dates(Date.AddDays([Mouvements.Commandes.OPE_CRDA],1),10,#duration(1,0,0,0)),
    each Date.DayOfWeek(_, Day.Monday)<5 and List.IsEmpty(List.Intersect({JourFeries, {_}}))){0}
    else List.Select(List.Dates(Date.AddDays([Mouvements.Commandes.OPE_CRDA],0),10,#duration(1,0,0,0)),
    each Date.DayOfWeek(_, Day.Monday)<5 and List.IsEmpty(List.Intersect({JourFeries, {_}}))){0}

    Merci encore pour votre aide

    #129193
    Kim Leblanc
    Maître des clés

    Bonjour,
    Est-ce que vous voulez que vos commandes apparaissent à la date où elles ont été créées ou à la date calculée avec les jours fériés et weekend?
    Et qu’entendez-vous par date “inconnue”?
    Vous pourriez peut-être nous fournir un fichier avec un exemple de ce que vous avez comme données avec le code M que vous avez créé pour que l’on puisse vous aider.

    Kim

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