RESSOURCES POWER BI

Ressources Power BI : jeu de données, calendrier DAX et Power Query

Retrouvez ici le jeu de données utilisé dans mes formations, deux scripts de calendrier Power BI prêts à l’emploi (DAX et Power Query M, avec jours fériés français) et les liens vers les références officielles. Tout est gratuit et réutilisable.

Jeu de données de formation

Ce jeu de données sert de fil rouge à mes formations Power BI. Il reproduit l’activité d’une entreprise fictive.

  • Format : fichiers csv et xlsx dans un fichier zip
  • Tables : ventes, clients, produits, commerciaux, stocks
  • Période couverte : 2018 à 2024
  • Utilisation : libre pour vous entraîner. Les données sont entièrement fictives.

Pourquoi une table calendrier dans Power BI ?

Une table calendrier est indispensable à tout modèle Power BI sérieux. Elle permet les calculs de time intelligence (cumul annuel, comparaison avec l’année précédente, moyennes glissantes), garantit qu’aucune date ne manque, et offre des colonnes d’analyse cohérentes : mois en français, semaines ISO, jours ouvrés.

La date automatique de Power BI crée une table cachée par colonne de date, alourdit le modèle et ne gère ni les semaines ISO ni les jours fériés. Désactivez-la (Fichier → Options → Données chargées → Date/heure automatique) et utilisez l’un des deux scripts ci-dessous.

Calendrier Power BI en DAX et Power Query avec jours fériés français et semaines ISO

Calendrier Power BI en Power Query (M), avec jours fériés

C’est la version que je recommande : le calendrier est calculé au chargement, et les jours fériés français sont récupérés automatiquement depuis l’API officielle du gouvernement.

Mode d’emploi

  • Accueil → Obtenir des données → Requête vide
  • Cliquez sur Éditeur avancé, remplacez tout le contenu par le script ci-dessous
  • Renommez la requête Calendrier, puis Fermer et appliquer
  • Si Power BI le demande, définissez la source web en accès anonyme et niveau de confidentialité Public

Colonnes créées : Date, Année, N° mois, Mois, Mois court, Année-mois, Trimestre, N° jour semaine, Jour, Semaine ISO, Année ISO, Année-semaine, Jour férié, Férié, Jour ouvré.

// =====================================================================
// Calendrier Power BI – Power Query (M) avec jours fériés français
// Nicolas Carrère – nicolas-carrere.fr
// Utilisation : Accueil > Obtenir des données > Requête vide
//               > Éditeur avancé > coller ce script > nommer la requête "Calendrier"
// Jours fériés : API Etalab https://calendrier.api.gouv.fr/jours-feries/
// =====================================================================
let
    // ---- Paramètres ------------------------------------------------
    DateDebut  = #date(2020, 1, 1),
    DateFin    = #date(Date.Year(DateTime.LocalNow()) + 1, 12, 31),
    ZoneFeries = "metropole",   // ou "alsace-moselle", "la-reunion", "guadeloupe"...

    // ---- Liste des dates -------------------------------------------
    NbJours = Duration.Days(DateFin - DateDebut) + 1,
    Dates   = List.Dates(DateDebut, NbJours, #duration(1, 0, 0, 0)),
    Base    = Table.FromList(Dates, Splitter.SplitByNothing(), type table [Date = date]),

    // ---- Colonnes calendaires --------------------------------------
    Annee      = Table.AddColumn(Base, "Année", each Date.Year([Date]), Int64.Type),
    NumMois    = Table.AddColumn(Annee, "N° mois", each Date.Month([Date]), Int64.Type),
    Mois       = Table.AddColumn(NumMois, "Mois", each Text.Proper(Date.MonthName([Date], "fr-FR")), type text),
    MoisCourt  = Table.AddColumn(Mois, "Mois court", each Text.Proper(Date.ToText([Date], [Format = "MMM", Culture = "fr-FR"])), type text),
    AnneeMois  = Table.AddColumn(MoisCourt, "Année-mois", each Date.ToText([Date], [Format = "yyyy-MM"]), type text),
    Trimestre  = Table.AddColumn(AnneeMois, "Trimestre", each Date.QuarterOfYear([Date]), Int64.Type),
    NumJour    = Table.AddColumn(Trimestre, "N° jour semaine", each Date.DayOfWeek([Date], Day.Monday) + 1, Int64.Type),
    Jour       = Table.AddColumn(NumJour, "Jour", each Text.Proper(Date.DayOfWeekName([Date], "fr-FR")), type text),

    // ---- Semaine ISO 8601 (la semaine appartient à l'année de son jeudi)
    SemaineISO = Table.AddColumn(Jour, "Semaine ISO", each
        let Jeudi = Date.AddDays([Date], 3 - Date.DayOfWeek([Date], Day.Monday))
        in  Number.IntegerDivide(Duration.Days(Jeudi - #date(Date.Year(Jeudi), 1, 1)), 7) + 1,
        Int64.Type),
    AnneeISO   = Table.AddColumn(SemaineISO, "Année ISO", each
        Date.Year(Date.AddDays([Date], 3 - Date.DayOfWeek([Date], Day.Monday))), Int64.Type),
    AnneeSem   = Table.AddColumn(AnneeISO, "Année-semaine", each
        Text.From([Année ISO]) & "-S" & Text.PadStart(Text.From([Semaine ISO]), 2, "0"), type text),

    // ---- Jours fériés (API Etalab) --------------------------------
    Api        = Json.Document(Web.Contents("https://calendrier.api.gouv.fr/jours-feries/" & ZoneFeries & ".json")),
    Feries     = Table.TransformColumns(
                    Table.RenameColumns(Record.ToTable(Api), {{"Name", "DateFerie"}, {"Value", "Jour férié"}}),
                    {{"DateFerie", each Date.FromText(_, [Format = "yyyy-MM-dd"]), type date}, {"Jour férié", each _, type text}}),
    Jointure   = Table.NestedJoin(AnneeSem, {"Date"}, Feries, {"DateFerie"}, "F", JoinKind.LeftOuter),
    Developpe  = Table.ExpandTableColumn(Jointure, "F", {"Jour férié"}, {"Jour férié"}),
    EstFerie   = Table.AddColumn(Developpe, "Férié", each [Jour férié] <> null, type logical),
    JourOuvre = Table.AddColumn(EstFerie, "Est férié", each [#"N° jour semaine"] <= 5 and not [Férié], type logical)
in
    JourOuvre

Calendrier Power BI en DAX

Pratique quand vous ne pouvez pas modifier les requêtes, ou pour un modèle rapide. Cette version ne contient pas les jours fériés : pour les avoir, préférez le calendrier Power Query.

Mode d’emploi

  • Onglet Modélisation → Nouvelle table
  • Collez le script ci-dessous et validez
  • Clic droit sur la table → Marquer comme table de dates, colonne Date
  • Triez la colonne Mois par N° mois, et Jour par N° jour semaine
Calendrier = 
// =====================================================================
// Calendrier Power BI – DAX
// Nicolas Carrère – nicolas-carrere.fr
// Utilisation : onglet Modélisation > Nouvelle table > coller ce script
// Puis : clic droit sur la table > Marquer comme table de dates (colonne Date)
//        et trier la colonne "Mois" par "N° mois", "Jour" par "N° jour semaine"
// =====================================================================

VAR DateDebut = DATE ( 2020, 1, 1 )
VAR DateFin   = DATE ( YEAR ( TODAY () ) + 1, 12, 31 )
RETURN
    ADDCOLUMNS (
        CALENDAR ( DateDebut, DateFin ),
        "Année", YEAR ( [Date] ),
        "N° mois", MONTH ( [Date] ),
        "Mois",
            VAR m = FORMAT ( [Date], "mmmm", "fr-FR" )
            RETURN UPPER ( LEFT ( m, 1 ) ) & MID ( m, 2, 20 ),
        "Mois court",
            VAR m = FORMAT ( [Date], "mmm", "fr-FR" )
            RETURN UPPER ( LEFT ( m, 1 ) ) & MID ( m, 2, 20 ),
        "Année-mois", FORMAT ( [Date], "yyyy-mm" ),
        "Trimestre", QUARTER ( [Date] ), // A formater avec \T00 dans Outils de colonne/Format
        "N° jour semaine", WEEKDAY ( [Date], 2 ),
        "Jour",
            VAR j = FORMAT ( [Date], "dddd", "fr-FR" )
            RETURN UPPER ( LEFT ( j, 1 ) ) & MID ( j, 2, 20 ),
        "Semaine ISO", WEEKNUM ( [Date], 21 ), // A formater avec \S00 dans Outils de colonne/Format
        "Année ISO", YEAR ( [Date] + 4 - WEEKDAY ( [Date], 2 ) ),
        "Année-semaine",
            YEAR ( [Date] + 4 - WEEKDAY ( [Date], 2 ) ) & "-S"
                & FORMAT ( WEEKNUM ( [Date], 21 ), "00" ),
        "Week-end", WEEKDAY ( [Date], 2 ) > 5
    )

DAX ou Power Query : quel calendrier choisir ?

Power Query (M)DAX
Jours fériésOui, via l’API EtalabNon
CalculAu chargement des donnéesDans le modèle
Réutilisable dans un dataflowOuiNon
Mise en placeRequête videNouvelle table

Dans les deux cas, adaptez la date de début (2020 par défaut) à la plus ancienne date de vos données.

Jours fériés français : la source officielle

Les jours fériés utilisés dans le calendrier Power Query proviennent des données ouvertes publiées par Etalab.

  • Toutes les années : https://calendrier.api.gouv.fr/jours-feries/metropole.json (20 ans passés, 5 ans à venir)
  • Une année : https://calendrier.api.gouv.fr/jours-feries/metropole/2026.json
  • Autres zones : alsace-moselle, guadeloupe, guyane, la-reunion, martinique, mayotte, nouvelle-caledonie, polynesie-francaise, saint-barthelemy, saint-martin, saint-pierre-et-miquelon, wallis-et-futuna

Dans le script M, il suffit de modifier le paramètre ZoneFeries. Les données sont publiées sous Licence Ouverte Etalab.

Référence DAX

Toutes les fonctions DAX, avec syntaxe et exemples, sur la documentation officielle Microsoft.

Référence Power Query M

Toutes les fonctions du langage M utilisé par Power Query, sur la documentation officielle Microsoft.

Besoin d’aller plus loin ?

Formation de vos équipes, audit d’un modèle existant ou migration depuis Qlik : parlons de votre projet Power BI.