Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Write a TSQL to generate a date for a BI date table

Posted on 2014-10-30
5
Medium Priority
?
288 Views
Last Modified: 2014-11-04
How to run a TSQL to generate the following records for a particular year ?

YEAR      FISALPERIOD   PERIOD      QUARTER      MONTH          WEEKNO      DATE
2014      8                        11                      2014/Q3              2014/11          45               2014-11-05 00:00:00.000
0
Comment
Question by:AXISHK
  • 3
5 Comments
 
LVL 14

Expert Comment

by:Christopher Gordon
ID: 40413081
One record per week?  per day?
0
 
LVL 14

Accepted Solution

by:
Christopher Gordon earned 1400 total points
ID: 40413094
If it's daily, something like this would work (I'm assuming your fiscal period occurs three months before calendar period):

declare @i int = 1
declare @currentDate date = '1/1/2014'

declare @time_dim table (calendarYear int, fiscalPeriod int, calendarPeriod int, calendarQuarter varchar(10), calendarMonth varchar(10), weekno int, calendarDate datetime)

while @i <= 365
begin

	insert into @time_dim (calendarYear, fiscalPeriod, calendarPeriod, calendarQuarter, calendarMonth, weekno, calendarDate)
	
	values (
			YEAR(@currentDate)
		,	Month(DATEADD(m, -3, @currentDate))
		,	MONTH(@currentDate)
		,	cast(year(@currentDate) as char(4)) + '/Q' + cast(DATEPART(quarter, @currentDate) as CHAR(1))
		,	cast(year(@currentDate) as char(4)) + '/' + cast(DATEPART(month, @currentDate) as CHAR(2))
		,	DATEPART(week, @currentDate), @currentDate)

	set @i = @i + 1
	
	set @currentDate = dateadd(day, 1, @currentDate)

end

select * from @time_dim

Open in new window

0
 
LVL 66

Assisted Solution

by:Jim Horn
Jim Horn earned 600 total points
ID: 40413170
Looks like you're getting an answer above, but just to throw it out here's an article on Build your own calendar table to perform complex date expressions with source code that pulls this off by day.  Scroll down to 'Now we're done modifying the table, which will look like this ' and you'll see how it looks similar to what you're asking.
0
 

Author Comment

by:AXISHK
ID: 40421128
Not correct, The record should be like the value below,


YEAR      PERIOD      QUARTER      MONTH      WEEKNO            DATE_IDX
2014      1               2014/Q4              2015/01      1                    2015-01-01 00:00:00.000
2014      4               2014/Q1              2014/04      14                    2014-04-01 00:00:00.000
2014      12               2014/Q3        2014/12      53                    2014-12-31 00:00:00.000
0
 
LVL 14

Expert Comment

by:Christopher Gordon
ID: 40423047
I added a dateadd(m, -3, @currentDate) in the part of the code that calculates the quarter field

declare @i int = 1
declare @currentDate date = '1/1/2014'

declare @time_dim table (calendarYear int, fiscalPeriod int, calendarPeriod int, calendarQuarter varchar(10), calendarMonth varchar(10), weekno int, calendarDate datetime)

while @i <= 365
begin

	insert into @time_dim (calendarYear, fiscalPeriod, calendarPeriod, calendarQuarter, calendarMonth, weekno, calendarDate)
	
	values (
			YEAR(@currentDate) --calendar year 
		,	Month(DATEADD(m, -3, @currentDate)) -- fiscal period
		,	MONTH(@currentDate) -- calendar period
		,	cast(year(DATEADD(m, -3, @currentDate)) as char(4)) + '/Q' + cast(DATEPART(quarter, DATEADD(m, -3, @currentDate)) as CHAR(1)) -- 
		,	cast(year(@currentDate) as char(4)) + '/' + cast(DATEPART(month, @currentDate) as CHAR(2))
		,	DATEPART(week, @currentDate), @currentDate)

	set @i = @i + 1
	
	set @currentDate = dateadd(day, 1, @currentDate)

end


select * from @time_dim

                                          

Open in new window

0

Featured Post

Nothing ever in the clear!

This technical paper will help you implement VMware’s VM encryption as well as implement Veeam encryption which together will achieve the nothing ever in the clear goal. If a bad guy steals VMs, backups or traffic they get nothing.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
One of the most important things in an application is the query performance. This article intends to give you good tips to improve the performance of your queries.
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Please read the paragraph below before following the instructions in the video — there are important caveats in the paragraph that I did not mention in the video. If your PaperPort 12 or PaperPort 14 is failing to start, or crashing, or hanging, …

972 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question