Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

PQ Dinamyc Calendar

Hi,

I have this script to make Calendar table:

let CreateDateTable = (StartDate as date, optional Culture as nullable text) as table =>
let
EndDate = #date(1999, 1, 1) /*Date.AddDays(DateTime.Date(DateTime.LocalNow()),1)*/,

Culture = if Culture = null then "en-US" else Culture ,

DayCount = Duration.Days(Duration.From(EndDate - StartDate)),
Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}),
InsertYear = Table.AddColumn(RenamedColumns, "Year", each Date.Year([Date])),
InsertQuarter = Table.AddColumn(InsertYear, "QuarterNumOfYear", each Date.QuarterOfYear([Date])),
insertQuarterName = Table.AddColumn(InsertQuarter , "QuarterName" , each "Q-" & Number.ToText([QuarterNumOfYear])),
insertHalfOfYearNum = Table.AddColumn(insertQuarterName , "HalfOfYearNum", each Number.RoundDown(([QuarterNumOfYear]+1)/2), type number),
insertHalfOfYearName = Table.AddColumn(insertHalfOfYearNum ,"HalfOfYearName",each "H-" & Number.ToText([HalfOfYearNum])),
insertHalfOfCalendarYear = Table.AddColumn(insertHalfOfYearName ,"HalfOfCalendarYear", each "H" & Number.ToText([HalfOfYearNum]) & " " & Number.ToText([Year])),
insertHalfOfCalendarYearSum = Table.AddColumn( insertHalfOfCalendarYear ,"HalfOfCalendarYearSum",each [Year]*10 +[HalfOfYearNum], type number),
InsertMonth = Table.AddColumn(insertHalfOfCalendarYearSum , "MonthNumberOfYear", each Date.Month([Date])),
InsertDay = Table.AddColumn(InsertMonth, "DayOfMonth", each Date.Day([Date])),
InsertDayInt = Table.AddColumn(InsertDay, "DateInt", each [Year] * 10000 + [MonthNumberOfYear] * 100 + [DayOfMonth]),
InsertMonthName = Table.AddColumn(InsertDayInt, "MonthName", each Date.ToText([Date], "MMMM", Culture), type text),
InsertCalendarMonth = Table.AddColumn(InsertMonthName, "MonthInCalendarName", each (try(Text.Range([MonthName],0,3)) otherwise [MonthName]) & " " & Number.ToText([Year])),
InsertCalendarQtr = Table.AddColumn(InsertCalendarMonth, "QuarterInCalendar", each "Q" & Number.ToText([QuarterNumOfYear]) & " " & Number.ToText([Year])),
InsertDayWeek = Table.AddColumn(InsertCalendarQtr, "DayOFWeekNum", each 1+Date.DayOfWeek([Date])),
InsertDayName = Table.AddColumn(InsertDayWeek, "DayOfWeekName", each Text.Trim(Text.Replace(Date.ToText([Date], "dddd", Culture),"éåí","")," "), type text),
InsertWeekEnding = Table.AddColumn(InsertDayName, "WeekEnding", each Date.EndOfWeek([Date]), type date),
InsertYearMonthSum = Table.AddColumn(InsertWeekEnding,"YearMonthSum", each [Year]*100 +[MonthNumberOfYear]),
InsertYearQuarterSum = Table.AddColumn(InsertYearMonthSum ,"YearQuarterSum", each [Year]*10 +[QuarterNumOfYear], type number),
insertDaySelection = Table.AddColumn(InsertYearQuarterSum , "Show Dates", each (if Date.IsInCurrentDay(Date.AddDays([Date],1)) then "Yesterday" else (if Date.IsInCurrentDay([Date]) then "Today" else "Other Dates"))),
insertMonthSelection = Table.AddColumn(insertDaySelection , "Show Months", each (if Date.IsInPreviousMonth([Date]) then "Last Month" else (if Date.IsInCurrentMonth([Date]) then "This Month" else "Other Dates")))
in
insertMonthSelection,
#"Invoked FunctionCreateDateTable" = CreateDateTable(#date(1996, 1, 1), "en-US"),
#"Changed Type" = Table.TransformColumnTypes(#"Invoked FunctionCreateDateTable",{{"MonthNumberOfYear", Int64.Type}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"QuarterInCalendar", "Quarter"}, {"MonthInCalendarName", "Month"}}),
#"Added Custom-MonthRelative" = Table.AddColumn(#"Renamed Columns", "MonthRelative", each if Date.IsInCurrentMonth([Date]) then "Current Month" else
if Date.IsInPreviousMonth([Date]) then "Last Month" else
[Month]),
#"Added Custom1-YearRelative" = Table.AddColumn(#"Added Custom-MonthRelative", "YearRelative", each if Date.IsInCurrentYear([Date]) then "Current Year" else
if Date.IsInPreviousYear([Date]) then "Last Year" else
[Year])
in
#"Added Custom1-YearRelative"

 

What do I need to change in code if I need to make a dynamic calendar by 4 months ago from the current month?

 

EndDate = #date(1999, 1, 1) /*Date.AddDays(DateTime.Date(DateTime.LocalNow()),1)*/,

#"Invoked FunctionCreateDateTable" = CreateDateTable(#date(1996, 1, 1), "en-US"),

 

  • Hello Anonymous 

     

    use this code instead

    let CreateDateTable = (StartDate as date, optional Culture as nullable text) as table =>
    let
    EndDate = Date.From(Date.EndOfMonth(DateTime.FixedLocalNow())) /*Date.AddDays(DateTime.Date(DateTime.LocalNow()),1)*/,
    
    Culture = if Culture = null then "en-US" else Culture ,
    
    DayCount = Duration.Days(Duration.From(EndDate - StartDate)),
    Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
    TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
    ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
    RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}),
    InsertYear = Table.AddColumn(RenamedColumns, "Year", each Date.Year([Date])),
    InsertQuarter = Table.AddColumn(InsertYear, "QuarterNumOfYear", each Date.QuarterOfYear([Date])),
    insertQuarterName = Table.AddColumn(InsertQuarter , "QuarterName" , each "Q-" & Number.ToText([QuarterNumOfYear])),
    insertHalfOfYearNum = Table.AddColumn(insertQuarterName , "HalfOfYearNum", each Number.RoundDown(([QuarterNumOfYear]+1)/2), type number),
    insertHalfOfYearName = Table.AddColumn(insertHalfOfYearNum ,"HalfOfYearName",each "H-" & Number.ToText([HalfOfYearNum])),
    insertHalfOfCalendarYear = Table.AddColumn(insertHalfOfYearName ,"HalfOfCalendarYear", each "H" & Number.ToText([HalfOfYearNum]) & " " & Number.ToText([Year])),
    insertHalfOfCalendarYearSum = Table.AddColumn( insertHalfOfCalendarYear ,"HalfOfCalendarYearSum",each [Year]*10 +[HalfOfYearNum], type number),
    InsertMonth = Table.AddColumn(insertHalfOfCalendarYearSum , "MonthNumberOfYear", each Date.Month([Date])),
    InsertDay = Table.AddColumn(InsertMonth, "DayOfMonth", each Date.Day([Date])),
    InsertDayInt = Table.AddColumn(InsertDay, "DateInt", each [Year] * 10000 + [MonthNumberOfYear] * 100 + [DayOfMonth]),
    InsertMonthName = Table.AddColumn(InsertDayInt, "MonthName", each Date.ToText([Date], "MMMM", Culture), type text),
    InsertCalendarMonth = Table.AddColumn(InsertMonthName, "MonthInCalendarName", each (try(Text.Range([MonthName],0,3)) otherwise [MonthName]) & " " & Number.ToText([Year])),
    InsertCalendarQtr = Table.AddColumn(InsertCalendarMonth, "QuarterInCalendar", each "Q" & Number.ToText([QuarterNumOfYear]) & " " & Number.ToText([Year])),
    InsertDayWeek = Table.AddColumn(InsertCalendarQtr, "DayOFWeekNum", each 1+Date.DayOfWeek([Date])),
    InsertDayName = Table.AddColumn(InsertDayWeek, "DayOfWeekName", each Text.Trim(Text.Replace(Date.ToText([Date], "dddd", Culture),"éåí","")," "), type text),
    InsertWeekEnding = Table.AddColumn(InsertDayName, "WeekEnding", each Date.EndOfWeek([Date]), type date),
    InsertYearMonthSum = Table.AddColumn(InsertWeekEnding,"YearMonthSum", each [Year]*100 +[MonthNumberOfYear]),
    InsertYearQuarterSum = Table.AddColumn(InsertYearMonthSum ,"YearQuarterSum", each [Year]*10 +[QuarterNumOfYear], type number),
    insertDaySelection = Table.AddColumn(InsertYearQuarterSum , "Show Dates", each (if Date.IsInCurrentDay(Date.AddDays([Date],1)) then "Yesterday" else (if Date.IsInCurrentDay([Date]) then "Today" else "Other Dates"))),
    insertMonthSelection = Table.AddColumn(insertDaySelection , "Show Months", each (if Date.IsInPreviousMonth([Date]) then "Last Month" else (if Date.IsInCurrentMonth([Date]) then "This Month" else "Other Dates")))
    in
    insertMonthSelection,
    #"Invoked FunctionCreateDateTable" = CreateDateTable(Date.From(Date.StartOfMonth(Date.AddMonths(DateTime.FixedLocalNow(), -4))), "en-US"),
    #"Changed Type" = Table.TransformColumnTypes(#"Invoked FunctionCreateDateTable",{{"MonthNumberOfYear", Int64.Type}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"QuarterInCalendar", "Quarter"}, {"MonthInCalendarName", "Month"}}),
    #"Added Custom-MonthRelative" = Table.AddColumn(#"Renamed Columns", "MonthRelative", each if Date.IsInCurrentMonth([Date]) then "Current Month" else
    if Date.IsInPreviousMonth([Date]) then "Last Month" else
    [Month]),
    #"Added Custom1-YearRelative" = Table.AddColumn(#"Added Custom-MonthRelative", "YearRelative", each if Date.IsInCurrentYear([Date]) then "Current Year" else
    if Date.IsInPreviousYear([Date]) then "Last Year" else
    [Year])
    in
    #"Added Custom1-YearRelative"

     

    Copy paste this code to the advanced editor in a new blank query to see how the solution works.

    If this post helps or solves your problem, please mark it as solution (to help other users find useful content and to acknowledge the work of users that helped you)
    Kudoes are nice too

    Have fun

    Jimmy

3 Replies

  • Jimmy801's avatar
    Jimmy801
    Community Champion

    Hello Anonymous 

     

    use this code instead

    let CreateDateTable = (StartDate as date, optional Culture as nullable text) as table =>
    let
    EndDate = Date.From(Date.EndOfMonth(DateTime.FixedLocalNow())) /*Date.AddDays(DateTime.Date(DateTime.LocalNow()),1)*/,
    
    Culture = if Culture = null then "en-US" else Culture ,
    
    DayCount = Duration.Days(Duration.From(EndDate - StartDate)),
    Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
    TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
    ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
    RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}),
    InsertYear = Table.AddColumn(RenamedColumns, "Year", each Date.Year([Date])),
    InsertQuarter = Table.AddColumn(InsertYear, "QuarterNumOfYear", each Date.QuarterOfYear([Date])),
    insertQuarterName = Table.AddColumn(InsertQuarter , "QuarterName" , each "Q-" & Number.ToText([QuarterNumOfYear])),
    insertHalfOfYearNum = Table.AddColumn(insertQuarterName , "HalfOfYearNum", each Number.RoundDown(([QuarterNumOfYear]+1)/2), type number),
    insertHalfOfYearName = Table.AddColumn(insertHalfOfYearNum ,"HalfOfYearName",each "H-" & Number.ToText([HalfOfYearNum])),
    insertHalfOfCalendarYear = Table.AddColumn(insertHalfOfYearName ,"HalfOfCalendarYear", each "H" & Number.ToText([HalfOfYearNum]) & " " & Number.ToText([Year])),
    insertHalfOfCalendarYearSum = Table.AddColumn( insertHalfOfCalendarYear ,"HalfOfCalendarYearSum",each [Year]*10 +[HalfOfYearNum], type number),
    InsertMonth = Table.AddColumn(insertHalfOfCalendarYearSum , "MonthNumberOfYear", each Date.Month([Date])),
    InsertDay = Table.AddColumn(InsertMonth, "DayOfMonth", each Date.Day([Date])),
    InsertDayInt = Table.AddColumn(InsertDay, "DateInt", each [Year] * 10000 + [MonthNumberOfYear] * 100 + [DayOfMonth]),
    InsertMonthName = Table.AddColumn(InsertDayInt, "MonthName", each Date.ToText([Date], "MMMM", Culture), type text),
    InsertCalendarMonth = Table.AddColumn(InsertMonthName, "MonthInCalendarName", each (try(Text.Range([MonthName],0,3)) otherwise [MonthName]) & " " & Number.ToText([Year])),
    InsertCalendarQtr = Table.AddColumn(InsertCalendarMonth, "QuarterInCalendar", each "Q" & Number.ToText([QuarterNumOfYear]) & " " & Number.ToText([Year])),
    InsertDayWeek = Table.AddColumn(InsertCalendarQtr, "DayOFWeekNum", each 1+Date.DayOfWeek([Date])),
    InsertDayName = Table.AddColumn(InsertDayWeek, "DayOfWeekName", each Text.Trim(Text.Replace(Date.ToText([Date], "dddd", Culture),"éåí","")," "), type text),
    InsertWeekEnding = Table.AddColumn(InsertDayName, "WeekEnding", each Date.EndOfWeek([Date]), type date),
    InsertYearMonthSum = Table.AddColumn(InsertWeekEnding,"YearMonthSum", each [Year]*100 +[MonthNumberOfYear]),
    InsertYearQuarterSum = Table.AddColumn(InsertYearMonthSum ,"YearQuarterSum", each [Year]*10 +[QuarterNumOfYear], type number),
    insertDaySelection = Table.AddColumn(InsertYearQuarterSum , "Show Dates", each (if Date.IsInCurrentDay(Date.AddDays([Date],1)) then "Yesterday" else (if Date.IsInCurrentDay([Date]) then "Today" else "Other Dates"))),
    insertMonthSelection = Table.AddColumn(insertDaySelection , "Show Months", each (if Date.IsInPreviousMonth([Date]) then "Last Month" else (if Date.IsInCurrentMonth([Date]) then "This Month" else "Other Dates")))
    in
    insertMonthSelection,
    #"Invoked FunctionCreateDateTable" = CreateDateTable(Date.From(Date.StartOfMonth(Date.AddMonths(DateTime.FixedLocalNow(), -4))), "en-US"),
    #"Changed Type" = Table.TransformColumnTypes(#"Invoked FunctionCreateDateTable",{{"MonthNumberOfYear", Int64.Type}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"QuarterInCalendar", "Quarter"}, {"MonthInCalendarName", "Month"}}),
    #"Added Custom-MonthRelative" = Table.AddColumn(#"Renamed Columns", "MonthRelative", each if Date.IsInCurrentMonth([Date]) then "Current Month" else
    if Date.IsInPreviousMonth([Date]) then "Last Month" else
    [Month]),
    #"Added Custom1-YearRelative" = Table.AddColumn(#"Added Custom-MonthRelative", "YearRelative", each if Date.IsInCurrentYear([Date]) then "Current Year" else
    if Date.IsInPreviousYear([Date]) then "Last Year" else
    [Year])
    in
    #"Added Custom1-YearRelative"

     

    Copy paste this code to the advanced editor in a new blank query to see how the solution works.

    If this post helps or solves your problem, please mark it as solution (to help other users find useful content and to acknowledge the work of users that helped you)
    Kudoes are nice too

    Have fun

    Jimmy

    • Anonymous's avatar
      Anonymous
      Not applicable

      Thank you,
      Can you please also demonstrate how to do just the date range I have in the model?
      That means I import data from SQL only for the last 4 months dynamically from today. So I need a calendar that will only be for these dates ...

      That is, instead of "-4", the first date will be a first date in the model...

      • Jimmy801's avatar
        Jimmy801
        Community Champion

        Hello Anonymous 

         

        I don't know what you dynamically calendar has to do with SQL. On SQL you can connect with the connector and then use a filter on your date column. You can use the GUI to setup last 4 months

         

         

        in your calendar request the goal is to genearte the start and ending date based on today.


        If this post helps or solves your problem, please mark it as solution (to help other users find useful content and to acknowledge the work of users that helped you)
        Kudoes are nice too

        Have fun

        Jimmy