Déterminer la date de fin de semaine à partir de l’année et du N° semaine

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 1 mois.
7 sujets de 1 à 7 (sur un total de 7)
  • Auteur
    Articles
  • #126901
    Francois91
    Participant

    Bonjour,
    J’ai une table avec :
    – Une colonne qui comprend l’année : Année
    – une colonne qui comprend le numéro de la semaine : NumSemaine

    Je 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.
    #126912
    Éric Ste-Croix
    Participant

    Bonjour,

    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

    #126914
    Francois91
    Participant

    Bonjour,

    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 unique

    #126958
    Stéphane Lorin
    Participant

    Bonjour
    Attention : le 3e argument de #duration correspond aux minutes et non aux jours.
    Vous ajoutez 7 min et non 7 jours
    Stéphane

    #126959
    Francois91
    Participant

    Bonjour,

    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 ISO

    En 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)

    #126960
    Xavier Allart
    Participant

    Bonjour
    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 autres

    Voici 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

    #126961
    Stéphane Lorin
    Participant

    Bonjour

    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

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