Accueil – Le CFO masqué › Forums › Power Query › Déterminer la date de fin de semaine à partir de l’année et du N° semaine
- Ce sujet contient 6 réponses, 4 participants et a été mis à jour pour la dernière fois par
Stéphane Lorin, le il y a 1 année et 10 mois.
-
AuteurMessages
-
25 mars 2023 à 7 h 11 min #126901
Francois91
ParticipantBonjour,
J’ai une table avec :
– Une colonne qui comprend l’année : Année
– une colonne qui comprend le numéro de la semaine : NumSemaineJe cherche à ajouter une colonne qui me donne la date de la fin de chaque semaine
J’ai utilisé cette formule :
Date.StartOfWeek(#date([Année], 1, 1), Day.Monday) + #duration(0, 0, ([NumSemaine] – 1) * 7, 0)
Malheureusement, cela me donne toujours la même date, je ne comprends pas …
(copie d’écran du résultat )Merci de votre aide
Attachments:
You must be logged in to view attached files.25 mars 2023 à 15 h 23 min #126912Éric Ste-Croix
ParticipantBonjour,
Je vous suggere d’avoir une table de date avec une granularité journalière avec un champ date – Si ce n’est pas le cas.
A partir du champ date journalier, l’interface de PowerQuery permet d’obtenir la date de la fin de la semaine sans manipuler le code M.
Dans onglet ajouter une colonne
faites les selections suivantes : Date / Semaine / Fin de semaine.J’espere que cela vous sera utile.
Cordialement
25 mars 2023 à 15 h 39 min #126914Francois91
ParticipantBonjour,
D’habitude, je créé une table de date.
Mais cette fois, je n’ai pas de date de référence, je n’ai que ces deux informations : l’année et le numéro de la semaine.
Et je ne vois pas comment la relier à une table de date.
En effet, dans la table de date, la valeur semaine n’est pas unique27 mars 2023 à 2 h 18 min #126958Stéphane Lorin
ParticipantBonjour
Attention : le 3e argument de #duration correspond aux minutes et non aux jours.
Vous ajoutez 7 min et non 7 jours
Stéphane27 mars 2023 à 4 h 05 min #126959Francois91
ParticipantBonjour,
Merci, en effet, cela “améliore” le résultat.
Cependant,en découpant la formule, je m’aperçois que la fonction Date.StartOfWeek ne donne pas le numéro de la semaine ISOEn effet, en testant avec la valeur de l’année 2022, le résultat donne 27/12/2021 comme première semaine.
Date.StartOfWeek(#date([année], 1, 1), Day.Monday)Or le premier jour de la première semaine de 2022 est le lundi 3/01/2023 (N° ISO)
27 mars 2023 à 8 h 08 min #126960Xavier Allart
ParticipantBonjour
Je suppose que ton calendrier utilise les numéros de semaine à la norme ISO 8601. Dont l’une des Définitions de la première semaine de l’année ISO est la semaine du premier jeudi de l’année civile : Numérotation ISO des semaines — Wikipédia (wikipedia.org)Je vous propose la solution suivante en me basant sur le tuto suivant Créer une semaine ISO et une année ISO dans Power Query M (ISO 8601) (gorilla.bi)
Dont voici les étapes :
Date du premier jour de la semaine
Date du jeudi de la semaine en cours
Année du jeudi en cours
Date du 1er jeudi de l’année
Calculer du numéro de semaine ISO
Calculer la date du dimanche
Filtrer sur l’année du jeudi
Conserver les colonnes nécessaires et supprimer les autresVoici le code
let
Source = Excel.CurrentWorkbook(){[Name=”Annee2021″]}[Content],
//Date du premier jour de la semaine
Date.1erJour = Table.AddColumn(Source, “1erjour”, each Date.From(Date.AddDays(Date.FromText(Text.From([Année])&”-01-01″),([NumSemaine]-1)*7))),//Date du jeudi de la semaine en cours
Date.Jeudi = Table.AddColumn(Date.1erJour, “Jeudi”, each Date.AddDays( [1erjour],3 – Date.DayOfWeek( [1erjour], Day.Monday))),//Année du jeudi en cours
AnnéeJeudi = Table.AddColumn(Date.Jeudi, “AnnéeJeudi”, each Date.Year([Jeudi])),//Date du 1er jeudi de l’année
#”1erJeudiAnnée” = Table.AddColumn(AnnéeJeudi, “1erJeudiAnnee”, each Date.AddDays(
#date( [AnnéeJeudi],1 ,7 ),
– Date.DayOfWeek( #date( [AnnéeJeudi],1 , 1), Day.Friday )
)),//Calculer du numéro de semaine ISO
IsoNumWeek = Table.AddColumn(#”1erJeudiAnnée”, “IsoNumWeek”, each ( Duration.Days( [Jeudi] – [1erJeudiAnnee] ) / 7 )+ 1),//Calculer la date du dimanche
Date.Dimanche = Table.AddColumn(IsoNumWeek, “Dimanche”, each Date.AddDays([Jeudi],3)),//Filtrer sur l’année du jeudi
#”Colonne conditionnelle ajoutée” = Table.AddColumn(Date.Dimanche, “Personnalisé”, each if [Année] = [AnnéeJeudi] then 1 else null),
#”Lignes filtrées” = Table.SelectRows(#”Colonne conditionnelle ajoutée”, each ([Personnalisé] = 1)),//Conserver les colonnes nécessaires et supprimer les autres
#”Autres colonnes supprimées” = Table.SelectColumns(#”Lignes filtrées”,{“Année”, “IsoNumWeek”, “Dimanche”})
in
#”Autres colonnes supprimées”Cordialement
27 mars 2023 à 8 h 20 min #126961Stéphane Lorin
ParticipantBonjour
En ISO il faut partir du 4 janvier et non du 1er
Date.StartOfWeek(#date([Année], 1, 4), Day.Monday) + #duration(([NumSemaine] – 1) * 7,0, 0, 0)
Sinon, j’ai déjà proposé sur ce forum une fonction plus simple pour le calcul du n° de semaine ISO
(Date as date) => let
Jeudi_Semaine = Date.AddDays(Date,3-Date.DayOfWeek(Date,Day.Monday)),
Année=Date.Year(Jeudi_Semaine),
Premier_Jeudi_An = Date.AddDays(#date(Année,1,7),-Date.DayOfWeek(#date(Année,1,1),Day.Friday)),
#”N° Semaine” = Duration.Days(Jeudi_Semaine – Premier_Jeudi_An)/7+1
in
#”N° Semaine”Stéphane
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.