In order to have a global calendar, that can be shared between multiple datasets – I use the following m-script:

/** * @author Philipp Frenzel * @version 0.1.0 * @alias Calendar * Will create the dimension Calendar **/ let varStartDate = #date(2008,1,1) //varStartDate = #date(2020,5,1) ,Source = List.Dates ,#"Invoked FunctionSource" = Source( varStartDate , Duration.Days(DateTime.Date(Date.AddDays(DateTime.FixedLocalNow(),1420)) - varStartDate) , #duration(1, 0, 0, 0) ) ,#"Table from List" = Table.FromList(#"Invoked FunctionSource", Splitter.SplitByNothing(), null, null, ExtraValues.Error) ,#"Added Index" = Table.AddIndexColumn(#"Table from List", "Index" , 1 , 1 ) ,GenerateDate = Table.RenameColumns(#"Added Index", {{"Column1", "varDate"}}) /** * Build all fields related to the year * - Year 2019 * - YearMonth 201901 * - YearWeek 201932 * - YearShort 19 * - YearToDate true * - YearToMonth true * - YearToDatePrevious true **/ ,AddYear = Table.AddColumn(GenerateDate, "Year", each Date.Year([varDate]) ) ,AddYearMonth = Table.AddColumn(AddYear, "YearMonth", each Date.ToText([varDate],"yyyy/MM") ) ,AddYearWeek = Table.AddColumn(AddYearMonth, "YearWeek", each Date.ToText([varDate],"yyyy") & "." & Number.ToText(Date.WeekOfYear([varDate]),"00") ) ,AddYearColumn = Table.AddColumn(AddYearWeek, "YearShort", each Text.From([Year]) , type text ) ,TwoDiggetYear = Table.SplitColumn(AddYearColumn, "YearShort", Splitter.SplitTextByRepeatedLengths(2), {"YearShort.1", "YearShort.2"} ) ,TwoDiggetYearToInteger = Table.TransformColumnTypes(TwoDiggetYear, { {"YearShort.1", Int64.Type} , {"YearShort.2", Int64.Type} }) ,ShortYearRemoveColumn1 = Table.RemoveColumns(TwoDiggetYearToInteger, {"YearShort.1"}) ,RenameYearShort = Table.RenameColumns(ShortYearRemoveColumn1, { {"YearShort.2", "YearShort"} }) ,#"Added YearToDate" = Table.AddColumn(RenameYearShort, "YearToDate", each Date.IsInYearToDate([varDate]) ,type logical ) ,#"Added YearToMonth" = Table.AddColumn(#"Added YearToDate", "YearToMonth", each if Date.IsInYearToDate([varDate]) or Date.IsInCurrentMonth([varDate]) then true else false ,type logical ) ,#"Added YearToDatePrevious" = Table.AddColumn(#"Added YearToMonth", "YearToDatePrevious", each Date.IsInYearToDate(Date.AddDays([varDate],365)) ,type logical ) ,YearDone = #"Added YearToDatePrevious" /** * Build all fields related to the month * - Month **/ ,AddedMonth = Table.AddColumn( YearDone, "Month", each Date.Month([varDate]) ) ,#"Added MonthName" = Table.AddColumn(AddedMonth, "MonthName", each Date.ToText([varDate],"MMM") ) ,#"Added MonthLongName" = Table.AddColumn(#"Added MonthName", "MonthLongName", each Date.ToText([varDate],"MMMM") ) ,#"Added Day" = Table.AddColumn(#"Added MonthLongName", "Day", each Date.Day([varDate]) ) ,#"Added DayName" = Table.AddColumn(#"Added Day", "DayName", each Date.ToText([varDate],"ddd") ) /** * Build fields for quarter, tertial * Quarter **/ ,#"Added Quarter" = Table.AddColumn(#"Added DayName", "Quarter", each Date.QuarterOfYear([varDate]) ) ,#"Added QuarterYear" = Table.AddColumn(#"Added Quarter", "QuarterYear", each Text.From([YearShort]) & "Q" & Number.ToText([Quarter],"00") ) ,#"Added is Quarter Current" = Table.AddColumn(#"Added QuarterYear", "QuarterCurrent", each Date.IsInNextQuarter(Date.AddQuarters([varDate],1)) ) ,#"Added is Quarter Previous" = Table.AddColumn(#"Added is Quarter Current","QuarterPrevious", each Date.IsInNextQuarter(Date.AddQuarters([varDate],2)) ) /** End of Quarter Logic --------------------------------------------*/ ,#"Added DateAsInteger" = Table.AddColumn(#"Added is Quarter Previous", "DateAsInteger", each Number.FromText( Number.ToText([Year],"0000") & Number.ToText([Month],"00") & Number.ToText([Day],"00") ) ), CleanColumnTypes = Table.TransformColumnTypes(#"Added DateAsInteger", { {"Day", Int64.Type} , {"Index", Int64.Type} , {"Month", Int64.Type} , {"Quarter", Int64.Type} , {"MonthName", type text} , {"QuarterYear", type text} , {"Year", Int64.Type} , {"DayName", type text} ,{"DateAsInteger", type text} }) ,#"Clean DateAsInteger" = Table.ReplaceErrorValues(CleanColumnTypes, { {"DateAsInteger", null} }) ,#"Added MonthCurrent" = Table.AddColumn(#"Clean DateAsInteger", "MonthCurrent", each Date.IsInCurrentMonth([varDate]) ,type logical ), #"Added MonthCurrent PY" = Table.AddColumn(#"Added MonthCurrent", "MonthCurrent PY", each Date.IsInCurrentMonth(Date.AddDays([varDate],365)) ,type logical ), #"Added MonthLastFull" = Table.AddColumn(#"Added MonthCurrent PY", "MonthLastFull", each Date.IsInCurrentMonth(Date.AddMonths([varDate],1))), #"Added MonthPrevious" = Table.AddColumn(#"Added MonthLastFull", "MonthPrevious", each Date.IsInPreviousMonth([varDate])), #"Added Rolling12Months" = Table.AddColumn( #"Added MonthPrevious", "Rolling12Months", each Date.IsInPreviousNMonths(Date.AddMonths([varDate],-1),12) ), #"Added Rolling25Months" = Table.AddColumn( #"Added Rolling12Months", "Rolling25Months", each Date.IsInPreviousNMonths(Date.AddMonths([varDate],-1),25) ), #"Added L13N12Months" = Table.AddColumn( #"Added Rolling25Months", "Last13Next12Months", each Date.IsInPreviousNMonths(Date.AddMonths([varDate],-13),25) ), #"Added Rolling60Months" = Table.AddColumn( #"Added L13N12Months", "Rolling60Months", each Date.IsInPreviousNMonths(Date.AddMonths([varDate],-1),60) ), #"Added Rolling12MonthsPrevious" = Table.AddColumn( #"Added Rolling60Months", "Rolling12MonthsPrevious", each Date.IsInPreviousNMonths(Date.AddMonths(Date.AddDays([varDate],365),-1),12) ) ,AddedNext1Month = Table.AddColumn(#"Added Rolling12MonthsPrevious", "Next Month", each Date.IsInPreviousNMonths(Date.AddMonths([varDate],-1),1) ) ,AddedNext3Month = Table.AddColumn(AddedNext1Month, "Next 3 Months", each Date.IsInPreviousNMonths(Date.AddMonths([varDate],-3),3) ) ,AddedNext12Month = Table.AddColumn(AddedNext3Month, "Next 12 Months", each Date.IsInPreviousNMonths(Date.AddMonths([varDate],-12),12) ) ,returnMe = AddedNext12Month, returnMeToo = Table.AddColumn(returnMe, "Rolling12MonthsTimescale", each Number.RoundDown( (if [Rolling12Months] then Duration.Days(Duration.From([varDate] - DateTime.Date(DateTime.FixedLocalNow()))) else if [Rolling12MonthsPrevious] then Duration.Days(Duration.From(Date.AddDays([varDate],365) - DateTime.Date(DateTime.FixedLocalNow()))) else 0) / 31) + 12), #"Convert Flags to Logical" = Table.TransformColumnTypes(returnMeToo, { {"Month", Int64.Type}, {"MonthCurrent", type logical}, {"MonthLastFull", type logical} } ), #"Convert varDate to Date" = Table.TransformColumnTypes(#"Convert Flags to Logical", {{"varDate", type date}, {"YearToDate", type logical}, {"YearToDatePrevious", type logical}, {"MonthCurrent", type logical}, {"MonthPrevious", type logical}, {"Rolling12Months", type logical}, {"Rolling12MonthsPrevious", type logical}}), #"Spalten transformieren" = Table.TransformColumnTypes(#"Convert varDate to Date", {{"YearMonth", type text}, {"MonthLongName", type text}, {"Rolling12MonthsTimescale", Int64.Type}}), #"Fehler ersetzen" = Table.ReplaceErrorValues(#"Spalten transformieren", {{"YearMonth", null}, {"MonthLongName", null}}), #"Extract date from eventDateTime" = Table.AddColumn (#"Fehler ersetzen","Date", each DateTime.Date([varDate]),type date), AddTimeToDate = Table.AddColumn(#"Extract date from eventDateTime","TimeToDate", each if [varDate] <= DateTime.Date(DateTime.FixedLocalNow()) then true else false ,type logical) ,AddTimeToDateNumber = Table.AddColumn(AddTimeToDate,"TimeToDateNumber", each if [varDate] <= DateTime.Date(DateTime.FixedLocalNow()) then 1 else 0 ,type number) in AddTimeToDateNumber
Code-Sprache: PHP (php)

Schreibe einen Kommentar