Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
marcus505
Frequent Visitor

Fiscal Table - Get Dates

Hi,

My Quarters are structured as follows per year :

Q1 - Apr - Jun
Q2 - July - Sep
Q3 - Oct - Dec
Q4 - Jan - Mar

I would like to create dates table with

Q1 Q2 Q3 Q4 CurrentYear CurrentMonth

 

Many Thanks,

 

M

1 ACCEPTED SOLUTION
Anonymous
Not applicable

Ok, this code i got off google a while back and i've made some modifications.  Create this as a blank query and call it fnDateTable

 

 

//Create Date Dimension
let
    Source = (StartDate as date, EndDate as date)=>
let
    //Capture the date range from the parameters
    StartDate = #date(Date.Year(StartDate), Date.Month(StartDate),
    Date.Day(StartDate)),
    EndDate = #date(Date.Year(EndDate), Date.Month(EndDate),
    Date.Day(EndDate)),
//Get the number of dates that will be required for the table
    GetDateCount = Duration.Days(EndDate - StartDate),
//Take the count of dates and turn it into a list of dates
    GetDateList = List.Dates(StartDate, GetDateCount+1,
    #duration(1,0,0,0)),
//Convert the list into a table
    DateListToTable = Table.FromList(GetDateList,
    Splitter.SplitByNothing(), {"Date"}, null, ExtraValues.Error),
//Create various date attributes from the date column
    //Add Year Column
    YearNumber = Table.AddColumn(DateListToTable, "Year",
    each Date.Year([Date])),
//Add Quarter Value Column
    QuarterValue = Table.AddColumn(YearNumber , "QuarterVal",
    each Number.ToText(Date.QuarterOfYear([Date]))),
//Set as whole number
    SetQuarterType = Table.TransformColumnTypes(QuarterValue,{{"QuarterVal", Int64.Type}}),
//Add Quarter Column
    QuarterNumber = Table.AddColumn(SetQuarterType , "Quarter",
    each "Q" & Number.ToText(if [QuarterVal] = 1 then 4 else [QuarterVal] - 1)),
//Remove Quarter Value Column
    RemoveQuarterValue = Table.RemoveColumns(QuarterNumber, {"QuarterVal"}),
//Add Week Number Column
    WeekNumber = Table.AddColumn(RemoveQuarterValue , "Week Number",
    each Date.WeekOfYear([Date])),
//Add Month Number Column
    MonthNumber = Table.AddColumn(WeekNumber, "Month Number",
    each Date.Month([Date])),
//Add Month Name Column
    MonthName = Table.AddColumn(MonthNumber , "Month",
    each Date.ToText([Date],"MMMM")),
// Add FYear
 FYear = Table.AddColumn(MonthName, "FYear", each if [Month Number] <= 3 then Number.ToText(Number.FromText(Text.End(Number.ToText([Year]),2)) - 1) & "-" & Text.End(Number.ToText([Year]),2) else Text.End(Number.ToText([Year]),2) & "-" & Number.ToText(Number.FromText(Text.End(Number.ToText([Year]),2)) + 1)),
//Add Day of Week Column
    DayOfWeek = Table.AddColumn(FYear , "Day of Week",
    each Date.ToText([Date],"dddd"))
in
    DayOfWeek
in
    Source

 

 

 

Next you need to invoke this function within another blank query, something like this:

let
    Source = fnDateTable(#date(2013, 1, 1), #date(Date.Year(DateTime.LocalNow()), 12, 31)),
    #"Set Field Types" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Year", Int64.Type}, {"Quarter", type text}, {"Week Number", Int64.Type}, {"Month Number", Int64.Type}, {"Month", type text}, {"Day of Week", type text}, {"FYear", type text}})
in
    #"Set Field Types"

You'll need to set what date range you want.  The above will do from 2013 until the end of the current year.

View solution in original post

1 REPLY 1
Anonymous
Not applicable

Ok, this code i got off google a while back and i've made some modifications.  Create this as a blank query and call it fnDateTable

 

 

//Create Date Dimension
let
    Source = (StartDate as date, EndDate as date)=>
let
    //Capture the date range from the parameters
    StartDate = #date(Date.Year(StartDate), Date.Month(StartDate),
    Date.Day(StartDate)),
    EndDate = #date(Date.Year(EndDate), Date.Month(EndDate),
    Date.Day(EndDate)),
//Get the number of dates that will be required for the table
    GetDateCount = Duration.Days(EndDate - StartDate),
//Take the count of dates and turn it into a list of dates
    GetDateList = List.Dates(StartDate, GetDateCount+1,
    #duration(1,0,0,0)),
//Convert the list into a table
    DateListToTable = Table.FromList(GetDateList,
    Splitter.SplitByNothing(), {"Date"}, null, ExtraValues.Error),
//Create various date attributes from the date column
    //Add Year Column
    YearNumber = Table.AddColumn(DateListToTable, "Year",
    each Date.Year([Date])),
//Add Quarter Value Column
    QuarterValue = Table.AddColumn(YearNumber , "QuarterVal",
    each Number.ToText(Date.QuarterOfYear([Date]))),
//Set as whole number
    SetQuarterType = Table.TransformColumnTypes(QuarterValue,{{"QuarterVal", Int64.Type}}),
//Add Quarter Column
    QuarterNumber = Table.AddColumn(SetQuarterType , "Quarter",
    each "Q" & Number.ToText(if [QuarterVal] = 1 then 4 else [QuarterVal] - 1)),
//Remove Quarter Value Column
    RemoveQuarterValue = Table.RemoveColumns(QuarterNumber, {"QuarterVal"}),
//Add Week Number Column
    WeekNumber = Table.AddColumn(RemoveQuarterValue , "Week Number",
    each Date.WeekOfYear([Date])),
//Add Month Number Column
    MonthNumber = Table.AddColumn(WeekNumber, "Month Number",
    each Date.Month([Date])),
//Add Month Name Column
    MonthName = Table.AddColumn(MonthNumber , "Month",
    each Date.ToText([Date],"MMMM")),
// Add FYear
 FYear = Table.AddColumn(MonthName, "FYear", each if [Month Number] <= 3 then Number.ToText(Number.FromText(Text.End(Number.ToText([Year]),2)) - 1) & "-" & Text.End(Number.ToText([Year]),2) else Text.End(Number.ToText([Year]),2) & "-" & Number.ToText(Number.FromText(Text.End(Number.ToText([Year]),2)) + 1)),
//Add Day of Week Column
    DayOfWeek = Table.AddColumn(FYear , "Day of Week",
    each Date.ToText([Date],"dddd"))
in
    DayOfWeek
in
    Source

 

 

 

Next you need to invoke this function within another blank query, something like this:

let
    Source = fnDateTable(#date(2013, 1, 1), #date(Date.Year(DateTime.LocalNow()), 12, 31)),
    #"Set Field Types" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Year", Int64.Type}, {"Quarter", type text}, {"Week Number", Int64.Type}, {"Month Number", Int64.Type}, {"Month", type text}, {"Day of Week", type text}, {"FYear", type text}})
in
    #"Set Field Types"

You'll need to set what date range you want.  The above will do from 2013 until the end of the current year.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors
Top Kudoed Authors