Tuesday, 30 December 2014

Script to generate fiscal calendar

There is a script to generate the fiscal calendar.

declare @Calendar table (
       CalendarDate datetime,
       CalendarDayOfYear as datepart(dy, CalendarDate),
       CalendarDayOfWeek as datepart(dw, CalendarDate),
       CalendarYear as datepart(yy, CalendarDate),
       FiscalDayOfYear int,
       FiscalMonth as
              case
                     when FiscalDayOfYear between 1 and 28 then 1
                     when FiscalDayOfYear between 29 and 56 then 2
                     when FiscalDayOfYear between 57 and 91 then 3
                     when FiscalDayOfYear between 92 and 119 then 4
                     when FiscalDayOfYear between 120 and 147 then 5
                     when FiscalDayOfYear between 148 and 182 then 6
                     when FiscalDayOfYear between 183 and 210 then 7
                     when FiscalDayOfYear between 211 and 238 then 8
                     when FiscalDayOfYear between 239 and 273 then 9
                     when FiscalDayOfYear between 274 and 301 then 10
                     when FiscalDayOfYear between 300 and 329 then 11
                     else 12
              end,
       FiscalQuarter as
              case
                     when FiscalDayOfYear between 1 and 91 then 1
                     when FiscalDayOfYear between 92 and 182 then 2
                     when FiscalDayOfYear between 183 and 273 then 3
                     else 4
              end,
       FiscalYear int
)

declare @i int
select @i = 36524

while @i < 45000
begin
       insert into @Calendar (CalendarDate) select @i
       select @i = @i + 1
end

declare @FiscalStartEnd table (
       FiscalYear int,
       StartDate datetime,
       EndDate datetime
)

insert into @FiscalStartEnd (FiscalYear, StartDate)
select
       CalendarYear, MIN(CalendarDate)
from
       @Calendar
where
       CalendarDayOfWeek = 1
group by
       CalendarYear
      
update
       f
set
       EndDate = f1.StartDate - 1
from
       @FiscalStartEnd f
       inner join @FiscalStartEnd f1
              on     f.FiscalYear = f1.FiscalYear - 1

update
       c
set
       FiscalDayOfYear = DATEDIFF(d, f.StartDate, c.CalendarDate) + 1,
       FiscalYear = f.FiscalYear
from
       @FiscalStartEnd f
       inner join @Calendar c
              on     c.CalendarDate between f.StartDate and f.EndDate


select * from @Calendar



This email has been checked for viruses by Avast antivirus software.
www.avast.com

No comments:

Post a Comment