// modification simple du code trouvé
//https://www.developpez.net/forums/d2060820/logiciels/solutions-d-entreprise/business-intelligence/microsoft-bi/power-bi/modele-table-dates-code-m-num-sem-iso/
//let
//CreateDateTable = (StartDate as date, EndDate as date, optional Culture as nullable text) as table =>
let
StartDate = Date.FromText("01/01/2005") , //Date.From(38353),
EndDate= Date.FromText("01/01/2030") , //Date.From(47848),
Culture= "en-US",
//Culture= "fr-BE",
//Calcul du nombre de jours du calendrier
DayCount = Duration.Days(Duration.From(EndDate - StartDate)),
//lister les dates pour la durée et créer la table
Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
//Application du format date à la colonne crée et renommage
ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "DateRef"}}),
//Année à 4 caractères
InsertYear = Table.AddColumn(RenamedColumns, "Annee", each Date.Year([DateRef])), ChangeType1=Table.TransformColumnTypes(InsertYear,{{"Annee", Int64.Type}}),
//Trimestre chiffre seul
InsertQuarter = Table.AddColumn(ChangeType1, "Trimestre", each
Date.QuarterOfYear([DateRef])), ChangeType2=Table.TransformColumnTypes(InsertQuarter,{{"Trimestre", Int64.Type}}),
//N° Mois (de 1 à 12)
InsertMonth = Table.AddColumn(ChangeType2, "MoisNum", each Date.Month([DateRef])), ChangeType3=Table.TransformColumnTypes(InsertMonth,{{"MoisNum", Int64.Type}}),
//Jour du mois
InsertDay = Table.AddColumn(ChangeType3, "JourMois", each Date.Day([DateRef])), ChangeType4=Table.TransformColumnTypes(InsertDay,{{"JourMois", Int64.Type}}),
//Date en nombre ISO
InsertDayInt = Table.AddColumn(ChangeType4, "DateNombreISO", each [Annee] * 10000 + [MoisNum] * 100 + [JourMois]), ChangeType7=Table.TransformColumnTypes(InsertDayInt,{{"DateNombreISO", Text.Type}}),
//Nom du mois
InsertMonthName = Table.AddColumn(ChangeType7, "MoisNom", each Date.ToText([DateRef], "MMMM", Culture)), ChangeType8=Table.TransformColumnTypes(InsertMonthName,{{"MoisNom", Text.Type}}),
//N° Mois à deux chiffres
InsertMonthNum2 = Table.AddColumn(ChangeType8, "MoisNum2", each Date.ToText([DateRef], "MM", Culture)), ChangeType9=Table.TransformColumnTypes(InsertMonthNum2,{{"MoisNum2", Text.Type}}),
//Année-Mois
InsertYearMonth = Table.AddColumn(ChangeType9, "Annee-Mois", each Date.ToText([DateRef], "yyyy-MM", Culture)), ChangeType10=Table.TransformColumnTypes(InsertYearMonth,{{"Annee-Mois", Text.Type}}),
//Nom du mois et année
InsertCalendarMonth = Table.AddColumn(ChangeType10, "MoisNomAnnee", each (try(Text.Range([MoisNom],0,4)) otherwise [MoisNom]) & " " & Number.ToText([Annee])), ChangeType11=Table.TransformColumnTypes(InsertCalendarMonth,{{"MoisNomAnnee", Text.Type}}),
//Année-Trimestre (préfixé d'un T)
InsertCalendarQtr = Table.AddColumn(ChangeType11, "Annee-Trimestre", each Number.ToText([Annee]) & " T" & Number.ToText([Trimestre])), ChangeType12=Table.TransformColumnTypes(InsertCalendarQtr,{{"Annee-Trimestre", Text.Type}}),
//Jour de la semaine (numérique)
InsertDayWeek = Table.AddColumn(ChangeType12, "JourSemaineNum", each
Date.DayOfWeek([DateRef])), ChangeType6=Table.TransformColumnTypes(InsertDayWeek,{{"JourSemaineNum", Int64.Type}}),
//Nom du Jour de la semaine (langue selon culture ou langue de Windows)
InsertDayName = Table.AddColumn(ChangeType6, "JourSemaineNom", each Date.ToText([DateRef], "dddd", Culture), type text),
//Calcul du jour de fin de semaine
InsertWeekEnding = Table.AddColumn(InsertDayName, "DateFinSemaine", each Date.EndOfWeek([DateRef]), type date),
//Calcul du jour de fin de mois
InsertMonthEnding = Table.AddColumn(InsertWeekEnding, "DateFinMois", each Date.EndOfMonth([DateRef]), type date),
//Calcul numéro de semaine ISO (Europe) en 4 étapes
//1. Determiner la date du jeudi-Thursday de la semaine en cours
InsertCurrThursday = Table.AddColumn(InsertMonthEnding, "CurrThursday", each Date.AddDays([DateRef], -Date.DayOfWeek([DateRef],1) + 3), type date),
//2. Determiner le 1er janvier de la date (cf étape 1)
InsertFirstJan = Table.AddColumn(InsertCurrThursday, "FirstJan", each
#date(Date.Year([CurrThursday]),1,1),type date),
//3. Calculer le nombre de jours entre le 1er janvier et le jeudi (cf étape 1)
InsertDuration= Table.AddColumn(InsertFirstJan, "Duration", each Duration.Days(Duration.From([CurrThursday] - [FirstJan])), type number),
//4. Diviser le nombre de jours calculé à l'étape 3 par 7, arrondir en dessous et ajouter 1
InsertISOWeekNum = Table.AddColumn(InsertDuration, "NumSemISO", each Number.RoundDown([Duration]/7)+1), ChangeType5=Table.TransformColumnTypes(InsertISOWeekNum,{{"NumSemISO", Int64.Type}}),
//Supprimer les colonnes de calculs inutiles
RemovedColumns = Table.RemoveColumns(ChangeType5, {"CurrThursday","FirstJan","Duration"})
in
RemovedColumns
//in
//CreateDateTable