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)
Autre solution : J'ai pensé à un autre moyen peut-être plus performant mais je sèche un peu pour le finaliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
- 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
Code : Sélectionner tout - Visualiser dans une fenêtre à part = 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)J'ai écrit ça :
- 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
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Toute aide serait la bienvenue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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]
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