Club Power BI

Please login or click SIGN UP FOR FREE to create your PowerBIUG account to join this user group.
Expand all | Collapse all

Déterminer automatiquement les jours fériés variables en fonction de chaque année

  • 1.  Déterminer automatiquement les jours fériés variables en fonction de chaque année

    Posted Sep 17, 2021 04:59 AM
    Bonjour,
    Je cherches une méthode pour déterminer les jours fériés variables de chaque année à partir d'une table Date CalendarAuto() en DAX powerBI.
    Merci pour votre aide.

    ------------------------------
    Bagayoko Fatim
    Student
    Lyon
    ------------------------------


  • 2.  RE: Déterminer automatiquement les jours fériés variables en fonction de chaque année

    Bronze Contributor
    Posted Sep 17, 2021 10:22 AM

    Il existe des sources de données publiques listant les jours fériés. Voir ici pour la France:
    sous forme de csv : Jours fériés en France - data.gouv.fr
    via une API: ReDoc (api.gouv.fr)

    Dans ce cas de figure il est préférable de créer la table calendrier avec Power Query et combiner les données des jours fériés afin créer une colonne 'Ferié' de type true/false.



    ------------------------------
    Bertrand d'Arbonneau
    ------------------------------



  • 3.  RE: Déterminer automatiquement les jours fériés variables en fonction de chaque année

    Silver Contributor
    Posted 29 days ago
    Bonjour,

    Ci-dessous, exemple en Code M pour ajouter les jours fériés, fixes et mobiles.

    Jours fériés et WE

    Pour les Week-End, nous supposons que la table de dates contient une colonne avec le libellé du nom du jour de la semaine. Cela fonctionnerait aussi sur un code numérique entre 1 et 7 (et même plus rapidement), attention cependant selon le système informatique le premier jour de la semaine n'est pas toujours identique, soyez donc vigilants.

    Les Week-End

    Dans votre table de dates, ajouter une nouvelle colonne, ici nommée EstWE. On suppose ici que votre :

    Table de dates se nomme : MonCalendrier

    La colonne qui contient le nom du jour : JourSemaineNom

    EstWE = SWITCH (MonCalendrier[JourSemaineNom], "dimanche" , 0, "samedi",0,1) //0=jour de WE 1=Jour Semaine

     Votre test sera encore plus rapide sur le code numérique du jour de semaine, le choix du libellé du jour a été fait pour une meilleure lisibilité.

     Vous obtiendrez une colonne avec des 0 ou des 1 selon que c'est un jour de semaine ou de WE. Il ne vous reste plus qu'à faire des sommes dans cette colonne pour ne prendre en compte que les jours de semaine.

    Le premier pas vers les calculs en jours ouvrés, ne peut se faire que si vous pouvez positionner, repérer les jours fériés, les week-end..
    Les week-end sont faciles à identifier (voir ci-dessus), les jours fériés à dates fixes (1er janvier ou 8 mai) aussi relativement…
    Le problème se posera plus sur les jours fériés mobiles (lundi de Pâques et autres jeudi de l'Ascension), mais il y aussi une solution.

    Comme vous le savez déjà, ou non, les fêtes dites mobiles sont calculées à partir du lundi de Pâques, il nous faudra calculer celui-ci pour déduire tous les autres.

    Pour les plus curieux, en savoir plus sur le jour de Pâques (dimanche) et son lundi.

    Nous utiliserons la fonction SWITCH() qui permet de faire des tests, un peu comme sous Excel avec les tests SI imbriquées ou des Select Case en VBA.

    Les jours fériés fixes

    Il va nous falloir les énumérer (du jour de l'an, à Noël…) afin de les repérer. On vérifie les dates au format jour-mois, ce qui fonctionne chaque année 😉

     JoursFeriesFixes = SWITCH (FORMAT (MonCalendrier[DateRef], "dd/mm"),

                            "01/01",0, //Jour de lan

                            "01/05",0, //Fete du travail

                            "08/05",0, //Armistice 39-45                                               

                            "14/07",0, //Fete nationale

                            "15/08",0, //Assomption

                            "01/11",0, //Toussaint

                            "11/11",0, //Armistice 14-18

                            "25/12",0, //Noel

                            1) //Jour Ferie=0, Non Ferie=1

     

    WE + Jours fériés fixes

    Et si besoin, on fait le mix jours fériés fixes et les  WE, pour obtenir un double SWITCH():

    JoursOuvres WE + FERIE FIXE = SWITCH (FORMAT (MonCalendrier[DateRef], "dd/mm"),

                            "01/01",0, //Jour de lan

                            "01/05",0, //Fete du travail

                            "08/05",0, //Armistice 39-45                                               

                            "14/07",0, //Fete nationale

                            "15/08",0, //Assomption

                            "01/11",0, //Toussaint

                            "11/11",0, //Armistice 14-18

                            "25/12",0, //Noel

                   SWITCH(MonCalendrier[JourSemaineNom], //Test du WE (sam dim)

                                "samedi",0,

                                "dimanche",0,1)) //Jour Ferie=0, Non Ferie=1

     

     Il nous reste à ajouter les fériés mobiles pour pouvoir créer des calculs en jours ouvrés.

     

    Jours fériés mobiles

    Pour les calculer, il vous faut créer les 4 colonnes suivantes :

    Lundi de Pâques :

    Date Lun Paques = DATE(1900,1,1)+(ROUND(DATE(MonCalendrier[Annee],4,MOD(234-11*MOD(MonCalendrier[Annee],19),30))/7,0)*7-6)-1

    Dimanche & LUNDI de Pentecôte

    Date Dim Pentecote = MonCalendrier[Date Lun Paques]+48

    Date Lundi Pentecote = MonCalendrier[Date Lun Paques]+49

    Jeudi de l'Ascension

    Date Jeu Ascension = MonCalendrier[Date Lun Paques]+38

     

    Test FINAL (WE + FERIES)

    Pour le test final, il faut bien sûr avoir créé au préalable les colonnes qui calculent les jours fériés mobiles.

    DateRef=colonne de dates uniques du calendrier

    JourSemaineNom=colonne contenant le nom du jour de la semaine

    JoursOuvres = SWITCH (FORMAT (MonCalendrier[DateRef], "dd/mm"),

                            "01/01",0, //Jour de lan

                            "01/05",0, //Fete du travail

                            "08/05",0, //Armistice 39-45                                               

                            "14/07",0, //Fete nationale

                            "15/08",0, //Assomption

                            "01/11",0, //Toussaint

                            "11/11",0, //Armistice 14-18

                            "25/12",0, //Noel

                   SWITCH(VALUE(MonCalendrier[DateRef]),

                   VALUE(MonCalendrier[Date Lun Paques]),0, //Lundi de paques

                   VALUE(MonCalendrier[Date Jeu Ascension]),0, //Jeudi de l'Ascension

                   VALUE(MonCalendrier[Date Dim Pentecote]),0, //Dimanche de Pentecote

                   VALUE(MonCalendrier[Date Lundi Pentecote]),0, //Lundi de Pentecote

                   SWITCH(MonCalendrier[JourSemaineNom], //Test du WE (sam dim)

                                "samedi",0,

                                "dimanche",0,1))) //Jour Ferie=0, Non Ferie=1

     

    Avec tout ça vous devriez avoir ce qu'il vous faut, sinon comme le suggère Bertrand, il est possible de les récupérer en ligne, via une requête Web par exemple.

    Bonne journée



    ------------------------------
    Olivier
    ------------------------------