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 1 année et 3 mois.
-
AuteurArticles
-
11 février 2023 à 15 h 53 min #125491nicolas.bruneelParticipant
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 :-).
13 février 2023 à 7 h 46 min #125497Kim LeblancMaître des clésBonjour,
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:
Au plaisir,
Kim
19 mai 2023 à 2 h 41 min #128501nicolas.bruneelParticipantBonjour 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
13 juin 2023 à 8 h 34 min #129193Kim LeblancMaître des clésBonjour,
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
-
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.