1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| IF OBJECT_ID('sPopulateDimCalendar',N'P') IS NOT NULL DROP PROCEDURE sPopulateDimCalendar
GO
CREATE PROCEDURE sPopulateDimCalendar
@FromDate DATE = '1990-01-01',
@ToDate DATE = '2020-12-31'
AS
BEGIN
--Setting language
SET LANGUAGE English
--Populating Dimension
WHILE @FromDate <= @ToDate
BEGIN
INSERT INTO DimCalendar(
[DateKey],
[Date],
[Day],
[Week],
[Month],
[Year],
[WeekYear],
[WeekdayName],
[WeekdayNameShort],
[MonthName],
[MonthNameShort],
[Quarter],
[WorkDay],
[WorkHours]
)
SELECT
YEAR(@FromDate)*10000 + MONTH(@FromDate) * 100 + DAY(@FromDate) AS DateKey,
@FromDate AS [Date],
DAY(@FromDate) AS [Day],
DATEPART(ISO_WEEK, @FromDate) AS [Week],
MONTH(@FromDate) AS [Month],
YEAR(@FromDate) AS [Year],
CASE
WHEN DATEPART(ISO_WEEK, @FromDate) = 53 AND MONTH(@FromDate) = 1 THEN YEAR(@FromDate) - 1
WHEN DATEPART(ISO_WEEK, @FromDate) = 1 AND MONTH(@FromDate) = 12 THEN YEAR(@FromDate) + 1
ELSE YEAR(@FromDate)
END AS [WeekYear],
DATENAME(WEEKDAY,@FromDate) AS WeekDayName,
LEFT(DATENAME(WEEKDAY,@FromDate), 3) AS WeekDayNameShort,
DATENAME(MONTH, @FromDate) AS MonthName,
LEFT(DATENAME(MONTH, @FromDate), 3) AS MonthNameShort,
DATENAME(QUARTER,@FromDate) AS [Quarter],
dbo.fIsWorkDay(@FromDate) AS WorkDay,
CASE WHEN dbo.fIsWorkDay(@FromDate) = 1 THEN 8 ELSE 0 END AS WorkHours
SET @FromDate = DATEADD(DAY, 1, @FromDate)
END
END |