Scenario:
Suppose we want to generate a Calendar Date Table with Dates ranging from Last 5 Years from Today to the Next 5 Years.
We can achieve this Scenario, using the below M-Query(Power Query).
DimCalendar:
DimCalendar:
let
/* The Calendar Table with Dates from Last 5 Years and Next 5 Years from Today */
vStartDate = Date.StartOfYear(Date.AddYears(Date.From(DateTime.LocalNow()),-5)),
vEndDate = Date.EndOfYear(Date.AddYears(Date.From(DateTime.LocalNow()),5)),
DatesList =
List.Dates(vStartDate, Duration.Days(vEndDate-vStartDate)+1, #duration(1,0,0,0)),
DatesTable =
DatesTable =
Table.FromList(DatesList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
DimDate =
DimDate =
Table.RenameColumns(DatesTable,{{"Column1", "DimDate"}}),
DimYear =
DimYear =
Table.AddColumn(DimDate, "DimYear", each Date.Year([DimDate])),
YearStartDate =
YearStartDate =
Table.AddColumn(DimYear, "YearStartDate", each Date.StartOfYear([DimDate])),
YearEndDate =
YearEndDate =
Table.AddColumn(YearStartDate, "YearEndDate", each Date.EndOfYear([DimDate])),
Qtr = Table.AddColumn(YearEndDate, "Qtr", each "Q" & Number.ToText(Date.QuarterOfYear([DimDate]))),
Qtr_Yr =
Qtr = Table.AddColumn(YearEndDate, "Qtr", each "Q" & Number.ToText(Date.QuarterOfYear([DimDate]))),
Qtr_Yr =
Table.AddColumn(Qtr, "Qtr_Yr", each [Qtr] & "-" & Number.ToText([DimYear])),
Qtr_StartDate =
Qtr_StartDate =
Table.AddColumn(Qtr_Yr, "Qtr_StartDate", each Date.StartOfQuarter([DimDate])),
Qtr_EndDate =
Qtr_EndDate =
Table.AddColumn(Qtr_StartDate, "Qtr_EndDate", each Date.EndOfQuarter([DimDate])),
MonthNo =
MonthNo =
Table.AddColumn(Qtr_EndDate, "MonthNo", each Date.Month([DimDate])),
MonthFullName =
MonthFullName =
Table.AddColumn(MonthNo, "MonthFullName", each Date.MonthName([DimDate])),
MonthName =
MonthName =
Table.AddColumn(MonthFullName, "MonthName", each Text.Start(Date.MonthName ([DimDate]),3)),
MonthYear =
MonthYear =
Table.AddColumn(MonthName, "MonthYear", each [MonthName] & "-" & Number.ToText([DimYear])),
MonthStartDate =
Table.AddColumn(MonthYear, "MonthStartDate", each Date.StartOfMonth([DimDate])),
MonthEndDate =
MonthEndDate =
Table.AddColumn(MonthStartDate, "MonthEndDate", each Date.EndOfMonth([DimDate])),
DaysInMonth =
DaysInMonth =
Table.AddColumn(MonthEndDate, "DaysInMonth", each Date.DaysInMonth([DimDate])),
WeekOfMonth =
WeekOfMonth =
Table.AddColumn(DaysInMonth, "WeekOfMonth", each Date.WeekOfMonth([DimDate])),
WeekDayName =
WeekDayName =
Table.AddColumn(WeekOfMonth, "WeekDayName", each Text.Start(Date.DayOfWeekName([DimDate]),3)),
WeekOfYear =
Table.AddColumn(WeekDayName, "WeekOfYear", each Date.WeekOfYear([DimDate])),
WeekNumYear =
WeekNumYear =
Table.AddColumn(WeekOfYear, "WeekNumYear", each "Week " & Number.ToText([WeekOfYear])),
WeekDayFullName =
Table.AddColumn(WeekNumYear, "WeekDayFullName", each Date.DayOfWeekName([DimDate])),
WeekStartDate =
Table.AddColumn(WeekDayFullName, "WeekStartDate", each Date.StartOfWeek([DimDate])),
WeekEndDate =
WeekEndDate =
Table.AddColumn(WeekStartDate, "WeekEndDate", each Date.EndOfWeek([DimDate])),
DaysInWeek =
DaysInWeek =
Table.AddColumn(WeekEndDate, "DaysInWeek", each Duration.Days([WeekEndDate]-[WeekStartDate])+1),
DayOfWeek =
DayOfWeek =
Table.AddColumn(DaysInWeek, "DayOfWeek", each Date.DayOfWeek([DimDate])+1),
DayOfMonth =
DayOfMonth =
Table.AddColumn(DayOfWeek, "DayOfMonth", each Date.Day([DimDate])),
DayOfYear =
DayOfYear =
Table.AddColumn(DayOfMonth, "DayOfYear", each Date.DayOfYear([DimDate])),
RefreshDate =
RefreshDate =
Table.AddColumn(DayOfYear, "RefreshDate", each DateTime.LocalNow()),
ChangeType = Table.TransformColumnTypes(RefreshDate,{{"DimDate", type date}, {"DimYear", Int64.Type}, {"YearStartDate", type date}, {"YearEndDate", type date}, {"Qtr", type text}, {"Qtr_Yr", type text}, {"Qtr_StartDate", type date}, {"Qtr_EndDate", type date}, {"MonthNo", Int64.Type}, {"MonthFullName", type text}, {"MonthName", type text}, {"MonthYear", type text}, {"MonthStartDate", type date}, {"MonthEndDate", type date}, {"DaysInMonth", Int64.Type}, {"WeekOfMonth", Int64.Type}, {"WeekDayName", type text}, {"WeekOfYear", Int64.Type}, {"WeekNumYear", type text}, {"WeekDayFullName", type text}, {"WeekStartDate", type date}, {"WeekEndDate", type date}, {"DaysInWeek", Int64.Type}, {"DayOfWeek", Int64.Type}, {"DayOfMonth", Int64.Type}, {"DayOfYear", Int64.Type}, {"RefreshDate", type datetime}})
in
ChangeType
ChangeType = Table.TransformColumnTypes(RefreshDate,{{"DimDate", type date}, {"DimYear", Int64.Type}, {"YearStartDate", type date}, {"YearEndDate", type date}, {"Qtr", type text}, {"Qtr_Yr", type text}, {"Qtr_StartDate", type date}, {"Qtr_EndDate", type date}, {"MonthNo", Int64.Type}, {"MonthFullName", type text}, {"MonthName", type text}, {"MonthYear", type text}, {"MonthStartDate", type date}, {"MonthEndDate", type date}, {"DaysInMonth", Int64.Type}, {"WeekOfMonth", Int64.Type}, {"WeekDayName", type text}, {"WeekOfYear", Int64.Type}, {"WeekNumYear", type text}, {"WeekDayFullName", type text}, {"WeekStartDate", type date}, {"WeekEndDate", type date}, {"DaysInWeek", Int64.Type}, {"DayOfWeek", Int64.Type}, {"DayOfMonth", Int64.Type}, {"DayOfYear", Int64.Type}, {"RefreshDate", type datetime}})
in
ChangeType
Result:
Notes :
In the above example, I have created the below additional Calculated Columns using the DAX as shown below. These Flag Columns are useful for Calculations and Filters.ClosedDayFlag =
IF( DimCalendar[DimDate]<TODAY(), 1,0)
CurMonthFlag =
IF( AND(YEAR(DimCalendar[DimDate])=YEAR(TODAY()),
MONTH(DimCalendar[DimDate])=MONTH(TODAY())), 1,0)
CurYearFlag =
IF(YEAR(DimCalendar[DimDate])=YEAR(TODAY()),1,0)
YearRangeFlag =
VAR vThisYear = YEAR(TODAY())
VAR vDimYear = DimCalendar[DimYear]
VAR vYearsDiff = vThisYear-vDimYear
RETURN
SWITCH(TRUE(),
vYearsDiff<0, "CurYear+" & ABS(vYearsDiff),
vYearsDiff=0, "CurYear",
vYearsDiff>0, "CurYear-"& vYearsDiff
)
--------------------------------------------------------------------------------------------------------
Thanks, TAMATAM ; Business Intelligence & Analytics Professional
--------------------------------------------------------------------------------------------------------
No comments:
Post a Comment
Hi User, Thank You for visiting My Blog. Please post your genuine Feedback or comments only related to this Blog Posts. Please do not post any Spam comments or Advertising kind of comments which will be Ignored.