<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Sub routine for Master Calender in App Development</title>
    <link>https://community.qlik.com/t5/App-Development/Sub-routine-for-Master-Calender/m-p/2521811#M106595</link>
    <description>&lt;P&gt;Wouldn't it be much simpler to create a global master-calendar and each application picked their needed fields + periods?&lt;/P&gt;</description>
    <pubDate>Fri, 20 Jun 2025 08:39:32 GMT</pubDate>
    <dc:creator>marcus_sommer</dc:creator>
    <dc:date>2025-06-20T08:39:32Z</dc:date>
    <item>
      <title>Sub routine for Master Calender</title>
      <link>https://community.qlik.com/t5/App-Development/Sub-routine-for-Master-Calender/m-p/2521803#M106593</link>
      <description>&lt;P&gt;In all Qlik Applications we need to have Master Calendar for Date Analysis.&lt;/P&gt;&lt;P&gt;The below Script will help to create master calendar with minimum steps.&lt;/P&gt;&lt;P&gt;The&amp;nbsp; below &lt;STRONG&gt;Master Calendar script&lt;/STRONG&gt; can be store it as &lt;STRONG&gt;QVS File.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;In &lt;STRONG&gt;Transform Section&lt;/STRONG&gt;, we can just&amp;nbsp; load that &lt;STRONG&gt;QVS File&lt;/STRONG&gt;&amp;nbsp;Using &lt;STRONG&gt;Must_Include &lt;/STRONG&gt;statement.&lt;/P&gt;&lt;P&gt;Ex:&amp;nbsp;&lt;STRONG&gt;$(Must_Include=$(vScriptPath)/SubRoutine_MasterCalender.qvs);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;After loading single fact or if multiple facts then after link table , we can call master calendar subroutine as like below.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;CALL Create_Calender ('MC_Date','MasterCalender',1,1,4);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;// =========================================================&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;// Script:1 ==&amp;gt; Date Field Creation&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;// =========================================================&lt;/P&gt;&lt;DIV&gt;Let vStartDate = Num(MakeDate(2022,01,01));&lt;/DIV&gt;&lt;DIV&gt;Let vEndDate&amp;nbsp; &amp;nbsp;= Num(MakeDate(2025,12,31));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Trace vStartDate : $(vStartDate);&lt;/DIV&gt;&lt;DIV&gt;Trace vEndDate&amp;nbsp; &amp;nbsp;: $(vEndDate);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;DateTable:&lt;/DIV&gt;&lt;DIV&gt;Load Date($(vStartDate) + IterNo()-1)&amp;nbsp; AS [MC Date],&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$(vStartDate) + IterNo()-1 &amp;nbsp; &amp;nbsp;AS sequence&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;AutoGenerate 1&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;While $(vStartDate) + IterNo()-1 &amp;lt;= $(vEndDate)&lt;/DIV&gt;&lt;DIV&gt;;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// ==&amp;gt; Drop Variables&lt;/DIV&gt;&lt;DIV&gt;Let vStartDate = Null();&lt;/DIV&gt;&lt;DIV&gt;Let vEndDate&amp;nbsp; &amp;nbsp;= Null();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;P&gt;// =========================================================&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;// Script:2 ==&amp;gt;&amp;nbsp; Subroutine&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;// =========================================================&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;Sub Create_Calender (DateField,CalenderName,FullCalender,FiscalCalender,FiscalStartMonth)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Let vDateField = '$(DateField)';&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Trace vDateField is $(vDateField);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Let vCalenderName = IF(Len('$(CalenderName)') =0,'MasterCalender','$(CalenderName)');&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Trace vCalenderName is $(vCalenderName);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Let vFullCalender = IF(Len('$(FullCalender)')=0,0,'$(FullCalender)');&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Trace vFullCalender is $(vFullCalender);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Let vFiscalCalender = IF(Len('$(FiscalCalender)')=0,0,'$(FiscalCalender)'); // 1- fiscal calender, 0-Normal Calender&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Trace vFiscalCalender is $(vFiscalCalender);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Let vFiscalStartMonth = IF(Len('$(FiscalStartMonth)')=0,1,'$(FiscalStartMonth)'); // 1- Jan,2-Feb,3-Mar,4-Apr .......&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Trace vFiscalMonth is $(vFiscalStartMonth);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// =====================================================================================================&lt;/DIV&gt;&lt;DIV&gt;// Part-1 : TempMasterCalender&lt;/DIV&gt;&lt;DIV&gt;// =====================================================================================================&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;//==&amp;gt; Generate a temp table of dates&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Temp_$(vCalenderName):&lt;/DIV&gt;&lt;DIV&gt;Load 1 as Dummy AutoGenerate 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;IF vFullCalender = 1 THEN&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Trace Genearte ==&amp;gt; Full Calender ==&amp;gt; Source unique Calender Dates + Source Unique Missing Dates;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Concatenate(Temp_$(vCalenderName))&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Load MaxDate,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Date(NumMinDate + IterNo()-1) as Temp_date&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while&amp;nbsp; NumMinDate + IterNo()-1 &amp;lt;=NumMaxDate;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;//=== Get min/max dates from Field ===/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LOAD&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Date(min(FieldValue('$(vDateField)', recno()))) as MinDate,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Date(max(FieldValue('$(vDateField)', recno()))) as MaxDate,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Num (min(FieldValue('$(vDateField)', recno()))) as NumMinDate,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Num (max(FieldValue('$(vDateField)', recno()))) as NumMaxDate&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;AUTOGENERATE FieldValueCount('$(vDateField)');&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;ELSE&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Trace Genearte ==&amp;gt;&amp;nbsp; Source Calender ==&amp;gt; Source unique Calender Dates&amp;nbsp; ;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Concatenate(Temp_$(vCalenderName))&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Load&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Date(FieldValue('$(vDateField)',RecNo())) as Temp_date&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Autogenerate FieldvalueCount('$(vDateField)');&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;END IF&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// ==&amp;gt; Drop field&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Drop Field Dummy From Temp_$(vCalenderName);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// =====================================================================================================&lt;/DIV&gt;&lt;DIV&gt;// Part-2 : MasterCalender&lt;/DIV&gt;&lt;DIV&gt;// =====================================================================================================&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;IF&amp;nbsp; &amp;nbsp;vFiscalCalender=1 THEN&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Trace Generate ==&amp;gt; Fiscal Calender;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;NoConcatenate&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$(vCalenderName):&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Load *,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IF(Date(MonthStart(Date))=LastCompletedMonth,1,0) AS LastCompletedMonthFlag,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IF(Date(QuarterStart(Date,0,4))=LastCompletedQuarter,1,0) AS LastCompletedQuarterFlag,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IF(Date(YearStart(Date,0,4))=LastCompletedYear,1,0) AS LastCompletedYearFlag&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Load *,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Hash128(MC_Date) AS %Date_Key,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Dual(MC_Date,MC_Date) AS Date,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Dual('FY '&amp;amp; Chr(39) &amp;amp; NumFiscalYear,NumFiscalYear) AS Year,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Dual(Date(MonthStart(MC_Date),'MMM'&amp;amp;chr(39)&amp;amp;'YY'),&amp;nbsp; MonthStart(MC_Date)) AS Month,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Dual('Q' &amp;amp; NumFiscalQuarter &amp;amp; Chr(39) &amp;amp;'FY'&amp;amp; Right(NumFiscalYear,2), QuarterStart(MC_Date)) AS Quarter,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Dual(('WK of ' &amp;amp; Date(WeekStart(MC_Date,0),'DD'&amp;amp;' '&amp;amp;'MMM'&amp;amp;CHR(39)&amp;amp;'YY')),WeekStart(MC_Date)) AS Week,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Day(MC_Date) AS Day,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;WeekDay(MC_Date) AS WeekDay,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Date (MonthStart(max_date))&amp;nbsp; AS LastCompletedMonth,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Date (QuarterStart(max_date,-1,4))&amp;nbsp; AS LastCompletedQuarter,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Date (YearStart(max_date,-1,4))&amp;nbsp; AS LastCompletedYear,&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LOAD *,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;NumYear + If(NumMonth&amp;lt;$(vFiscalStartMonth),-1, 0) AS NumFiscalYear,&amp;nbsp; &amp;nbsp;// Numeric fiscal year (Jan to Mar ==&amp;gt;Year-1, Apr to Dec ==&amp;gt;Year)&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Mod(NumMonth-$(vFiscalStartMonth),12)+1 AS NumFiscalMonth,&amp;nbsp; // Jan-10,Feb-11,Mar-12,Apr-1,May-2,Jun-3,Jul-4,Aug-5,Sep-6,Oct-7,Nov-8,Dec-9&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Num(Ceil((Mod(NumMonth-$(vFiscalStartMonth),12)+1)/3)) AS NumFiscalQuarter // (Jan,Feb,Mar)-4,(Apr,May,Jun)-1,(Jul,Aug,Sep)-2,(Oct,Nov,Dec)-3&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LOAD&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MaxDate AS max_date,&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Temp_date AS MC_Date,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Num(Year(Temp_date)) AS NumYear,&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Num(Month(Temp_date)) AS NumMonth,&amp;nbsp; // Jan-1,Feb-2,Mar-3,Apr-4,May-5,Jun-6,Jul-7,Aug-8,Sep-9,Oct-10,Nov-11,Dec-12&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Num(Ceil(Month(Temp_date)/3)) AS NumQuarter // (Jan,Feb,Mar)-1,(Apr,May,Jun)-2,(Jul,Aug,Sep)-3,(Oct,Nov,Dec)-4&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ==&amp;gt; We are generating date fields in preceding load and not progressing Temp_date further due to ( Temp_date field_value will not hold sorting according to requirement but Date is sorted according to the requirement)&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Load *&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Resident Temp_$(vCalenderName)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Order By Temp_date ASC&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Drop Table Temp_$(vCalenderName);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ==&amp;gt; Drop Un-neccessary fields&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DROP FIELDS&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MC_Date,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NumYear,&amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NumMonth,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NumQuarter,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NumFiscalYear,&amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NumFiscalMonth,&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NumFiscalQuarter&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FROM $(vCalenderName);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;ELSE&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Trace Generate ==&amp;gt; Normal Calender;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;NoConcatenate&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;$(vCalenderName):&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LOAD&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Hash128(Temp_date) AS %Date_Key,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Temp_date AS Date,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Year(Temp_date) AS Year,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Dual(Date(MonthStart(Temp_date),'MMM'&amp;amp;chr(39)&amp;amp;'YY'), MonthStart(Temp_date)) AS Month,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Dual('Q' &amp;amp; Ceil(Month(Temp_date)/3) &amp;amp; Chr(39) &amp;amp; Year(Temp_date), QuarterStart(Temp_date)) AS Quarter,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Dual(('WK of ' &amp;amp; Date(WeekStart(Temp_date,0),'DD'&amp;amp;' '&amp;amp;'MMM'&amp;amp;CHR(39)&amp;amp;'YY')),WeekStart(Temp_date)) AS Week,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Day(Temp_date) AS Day,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WeekDay(Temp_date) AS WeekDay&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ==&amp;gt; We are generating date fields in preceding load and not progressing Temp_date further due to ( Temp_date field_value will not hold sorting according to requirement but Date is sorted according to the requirement)&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Load *&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Resident Temp_$(vCalenderName)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Order By Temp_date ASC&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Drop Table Temp_$(vCalenderName);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;END IF&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// ==&amp;gt; Drop Variables&lt;/DIV&gt;&lt;DIV&gt;Let vDateField &amp;nbsp; = Null();&lt;/DIV&gt;&lt;DIV&gt;Let vCalenderName&amp;nbsp; &amp;nbsp; &amp;nbsp;= Null();&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Let vFullCalender&amp;nbsp; &amp;nbsp; &amp;nbsp;= Null();&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Let vFiscalCalender&amp;nbsp; &amp;nbsp;= Null();&lt;/DIV&gt;&lt;DIV&gt;Let vFiscalStartMonth = Null();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;End Sub&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;P&gt;// =========================================================&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;// Script:1 ==&amp;gt;&amp;nbsp; Call Subroutine&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;// =========================================================&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;// ================================================================================&lt;/DIV&gt;&lt;DIV&gt;/*&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Sub Create_Calender (DateField,CalenderName,FullCalender,FiscalCalender,FiscalStartMonth)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #). DateField &amp;nbsp; ==&amp;gt; Need to provide Date field Name with single quotes { 'created_date' OR 'created date' }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #). CalenderName &amp;nbsp; ==&amp;gt;&amp;nbsp; Need to provide Master Calender Name with single quotes { 'Master_Calender' OR 'Master Calender' }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #). FullCalender&amp;nbsp; &amp;nbsp; &amp;nbsp; ==&amp;gt; Values should be eithe 1 OR 0 (1- means generates unique&amp;nbsp; missing dates along with nique transaction dates, 0- means generates unique transaction dates)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #). FiscalCalender &amp;nbsp; ==&amp;gt; Values should be eithe 1 OR 0 ( 1- Fiscal Calender (defined by FiscalStartMonth), 0- Normal Calender 1-Jan,2-Feb,3-Mar...)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #). FiscalStartMonth&amp;nbsp; ==&amp;gt; Values should be 1 to 12&amp;nbsp; (1-Jan,2-Feb,3-Mar,4-Apr,5-May...12-Dec ==&amp;gt; Normally for astellas value is 4-Apr)==&amp;gt; month starts from Aprill&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;*/&lt;/DIV&gt;&lt;DIV&gt;// ================================================================================&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// Call Create_Calender('MC Date', 'Master_Calender2',1,0,0) ;&lt;/DIV&gt;&lt;DIV&gt;Call Create_Calender('MC Date', 'Master_Calender2',1,1,4) ;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;</description>
      <pubDate>Fri, 20 Jun 2025 05:47:04 GMT</pubDate>
      <guid>https://community.qlik.com/t5/App-Development/Sub-routine-for-Master-Calender/m-p/2521803#M106593</guid>
      <dc:creator>Halesha_Bandri</dc:creator>
      <dc:date>2025-06-20T05:47:04Z</dc:date>
    </item>
    <item>
      <title>Re: Sub routine for Master Calender</title>
      <link>https://community.qlik.com/t5/App-Development/Sub-routine-for-Master-Calender/m-p/2521811#M106595</link>
      <description>&lt;P&gt;Wouldn't it be much simpler to create a global master-calendar and each application picked their needed fields + periods?&lt;/P&gt;</description>
      <pubDate>Fri, 20 Jun 2025 08:39:32 GMT</pubDate>
      <guid>https://community.qlik.com/t5/App-Development/Sub-routine-for-Master-Calender/m-p/2521811#M106595</guid>
      <dc:creator>marcus_sommer</dc:creator>
      <dc:date>2025-06-20T08:39:32Z</dc:date>
    </item>
  </channel>
</rss>

