Bonjour,
J'espère que je poste au bon endroit, je n'ai pas trouvé de forum spécifique pour Power Query que j'utilise dans excel.
Mon besoin : je cherche à calculé le nombre de jours ouvrés entre 2 dates dans Power Query.
1ère solution : J'ai trouvé une solution en générant à la volée une liste des dates entre mes deux dates (début et fin) puis en retirant les samedis et dimanches, puis en retirant les jours "de fermeture" qui sont stockés dans une liste externe puis je compte le nombre d'éléments restant dans ma liste. ca marche mais au niveau performance c'est pas top, ça mouline un moment.... (34000 lignes avec autant de fois le calcul)
1 2 3 4 5 6 7 8
| (DateDebut as date, DateFin as date) as number =>
let
ListeDates = List.Dates(DateDebut,Number.From(DateFin-DateDebut),#duration(1,0,0,0)),
RetireWeekEnd = List.Select(ListeDates, each Date.DayOfWeek(_,Day.Monday)<5),
RetireJoursfériés = List.RemoveItems(RetireWeekEnd, Tabl_jours_fériés),
CompteJours = List.Count(RetireJoursfériés)
in
CompteJours |
Autre solution : J'ai pensé à un autre moyen peut-être plus performant mais je sèche un peu pour le finaliser
- J'ai une table (Calendrier des jours ouvrés) générée par script M avec les dates et un top 0/1 pour dire si c'est ouvré ou non
= Table.AddColumn(OrdreCol, "Ouvre", each if [Num du jour Sem] >= 6 or List.Contains(Tabl_jours_fériés,[Date])=true then 0 else 1)
- J'ai écrit une fonction que je vais appeler avec 2 dates (date de début et date de fin)
- Je génère à la volée une liste des dates entre mes deux bornes
- Je transforme la liste en table
- Je joints ma table à la table "Calendrier des jours ouvrés" sur la clé Date de chacune des tables pour compléter ma première table (celle générée à la volée) du top 1/0 disant si c'est ouvré ou non
- J'agrège le résultat en sommant le top 1/0
=> ça doit me donner le nombre de jours ouvrés entre mes deux dates
J'ai écrit ça :
1 2 3 4 5 6 7 8 9 10 11
| let
Source = (DateDebut as date, DateFin as date) as number =>
let
ListeDates = List.Dates(DateDebut,Number.From(DateFin-DateDebut),#duration(1,0,0,0)),
Tb_Date = Table.FromList(ListeDates),
Tb_jointe = Table.NestedJoin(Tb_Date, "Column1", #"Calendrier des jours ouvrés", "Date", "Ouvre", JoinKind.LeftOuter),
CompteJours = Table.AggregateTableColumn(Tb_jointe, {"Ouvre", List.Sum})
in
CompteJours
in
Source |
et ça marche pas... pas d'erreur de syntaxe mais quand je lance il me dit qu'il arrive pas à convertir ma 1ère date en Texte (je sais pas pourquoi il veut faire ça)
1 2 3 4
| Une erreur s'est produite dans la requête « Requête1 ». Expression.Error : Désolé... Nous n'avons pas pu convertir la valeur #date(2022, 3, 1) en type Text.
Détails :
Value=01/03/2022
Type=[Type] |
Toute aide serait la bienvenue.
Je précise que je suis débutant en M, j'ai juste cherché du code à droite à gauche sur le net, et sur l'aide Microsoft, du coup je passe peut-être à coté de quelque chose, mais je ne demande qu'à apprendre.
Merci à vous.
Partager