Master calendar for Qlik Sense
A great feature of Qlik Sense is that your ETL/load script scripts can be moved over from existing QlikView apps with very few modifications. Basically, you need to change the data sources to Sense’s way of doing things* (which I would say is a lot more robust and flexible), then things are likely to work straight off the bat.
An example of this is the creation of a master calendar. The script below is pretty much the same one that is shared in various posts on the Qlik forums, with some minor modifications. The point is that it was taken from a QlikView app, dropped into a Qlik Sense app, and it just works. Very nice.
*You can actually put Sense in legacy mode, in which it will accept also QlikView’s syntax for connecting to data sources. I’d say it’s worth the effort to use the new Sense way of connecting though – it’s a one-off investment that makes sense (no pun intended..).
Let StartDate = num(date(YearStart(AddMonths(Today(),-48,0)),'YYYYMMDD'));
Let EndDate = num(date(YearEnd(AddMonths(Today(),12,0)),'YYYYMMDD'));
Let CurrentDate=num(date(Today(),'YYYYMMDD'));
Let CurrentYear=Year(Today());
Let LY_YTD=num(AddMonths(Today(),-12,0));
Let DaysToEnd=Monthend(Today())-Today();
Let Timespan=Year(Today())-Year(Date($(StartDate)));
Time:
Load
*,
Year(Date) AS [Year],
Month(Date) AS [Month],
num(Week(Date),00) as [Week],
Day(Date) AS [Day],
WeekDay(Date) AS [WeekDay],
if(Date<=$(CurrentDate),Date) as Date2, // Dates until current date
Year(Date)&num(Month(Date),00) as [Year Month],
Year(Date) & '-' & num(Month(Date),00) as [YearMonth],
Dual(WeekYear(Date)&'W'&num(Week(Date),00),WeekYear(Date)&num(Week(Date),00)) as [Year Week2],
Year(Date)&num(Week(Date),00) as [Year Week],
Dual(WeekYear(Date)&num(Week(Date),00),WeekYear(Date)&num(Week(Date),00)) as [Year Week3],
Dual(Year(Date)&'Q'&Num(Ceil(Num(Month(Date))/3)),Year(Date)&Num(Ceil(NUM(Month(Date))/3),00)) as [Year Quarter],
Dual('Q'&Num(Ceil(Num(Month(Date))/3)),Num(Ceil(NUM(Month(Date))/3),00)) as [Quarter],
Num(Date) as DateNum,
Num(Date)-1 as DatePrevNum,
1 as _DateCounter,
// Calculation Flags
// All flags below can be used in calculated dimensions and expressions, for example:
// _YTD_TY, used in Expressions Sum([Purchase Qty]*_YTD_TY)
// YEAR
if(InYear (Date, $(CurrentDate), -1),1) as _FULL_LY, // All Dates Last Year
if(InYear (Date, $(CurrentDate), 0),1) as _FULL_TY, // All Dates This Year
if(InYearToDate (Date, $(CurrentDate), 0),1) as _YTD_TY, // All Dates to Date this Year
// _YTD_TY, used in Expressions Ex. Sum(Sales*_YTD_TY)
if(InYearToDate (Date, $(CurrentDate), -1),1) as _YTD_LY, // All Dates to Date Last Year
// _YTD_LY, used in Expressions Ex. Sum(Sales*_YTD_LY)
// Quarter
if(InQuarter (Date, $(CurrentDate), 0),1) as _FULL_TQ_TY, // All Dates In Current Quarter this Year
if(InQuarter (Date, $(LY_YTD), 0),1) as _FULL_TQ_LY, // All Dates In Current Quarter Last Year
if(InQuarter (Date,$(CurrentDate), -1),1) as _FULL_PRQ, // All Dates In Previous Quarter
if(InQuarterToDate (Date, $(CurrentDate), 0),1) as _QTD_TY, // All Dates In Current Quarter to Date this Year
if(InQuarterToDate (Date, $(LY_YTD), 0),1) as _QTD_LY, // All Dates In Current Quarter to Date Last Year
if(InQuarterToDate (Date,$(CurrentDate), -1),1) as _PR_QTD, // All Dates In Previous Quarter to Date
// Month
If( InMonth (Date, $(CurrentDate),0),1) as _FULL_TM_TY, // All Dates This Month This Year
If( InMonth (Date, $(CurrentDate),-12),1) as _FULL_TM_LY, // All Dates This Month Last Year
If( InMonth (Date, $(CurrentDate), -1),1) as _FULL_PRM, // All Dates Previous Month
If( InMonthToDate (Date, $(CurrentDate),0),1) as _MTD_TY, // All Dates This Month To Date This Year
If( InMonthToDate (Date, $(CurrentDate),-12),1) as _MTD_LY, // All Dates This Month To Date Last Year
If( InMonthToDate (Date, $(CurrentDate), -1),1) as _PR_MTD, // All Dates Previous Month To Date
// Week
If( InWeek (Date, $(CurrentDate),0),1) as _FULL_TW_TY, // All Dates This Week This Year
If( InWeek (Date, $(LY_YTD),0),1) as _FULL_TW_LY, // All Dates This Week Last Year
If( InWeek (Date, $(CurrentDate), -1),1) as _FULL_PRW, // All Dates Previous Week
If( InWeekToDate (Date, $(CurrentDate),0),1) as _WTD_TY, // All Dates This Week To Date This Year
If( InWeekToDate (Date, $(CurrentDate), -1),1) as _PR_WTD, // All Dates Previous Week To Date
// Last n days
If( Num(Date) >= ($(CurrentDate)-7), 1) as _LAST_7D,
If( Num(Date) >= ($(CurrentDate)-10), 1) as _LAST_10D,
If( Num(Date) >= ($(CurrentDate)-14), 1) as _LAST_14D
where exists(Date, Date) // Only create master calendar entries for dates that already exist in the facts tables
;
Load
Date($(StartDate)+(Iterno()-1),'YYYYMMDD') as Date
// Date, to be used as key
Autogenerate 1
While Date($(StartDate)+(Iterno()-1)) <= Date($(EndDate))
;