在 SQL 上创建具有特定日期的时间维度
Creating a time dimension with specific dates on SQL
我正在做一个关于足球转会的分析项目。我有一个模型,其中包含一个名为 FactTransfers 的事实 Table,我需要将其 link 到时间维度,但我需要一个特定的日期范围,即可以转移球员的日期(从 6 月 1 日起)到 9 月 1 日和从 1 月 1 日到 1 月 31 日)。
我看过一些与此事相关的帖子,但它们都有我不需要的代码和属性。
基本上我想要的是:
日期为主键,
每月的某天,
月名,
转移window(夏季或冬季),
年.
我不太熟悉 sql 代码,我花了几个小时试图弄明白,但没有得到我需要的结果。
预先感谢您的所有帮助!
这是创建和填充 Dim table 日期的代码。希望这有帮助。
CREATE TABLE [dbo].[DimDate]
(
[DateKey] INT primary key,
[Date] DATETIME,
[DayofMonth] TINYINT, -- Field will hold day number of Month
[NameofMonth] VARCHAR(9),--January, February etc
[TransferWindow] VARCHAR(20), -- Summer & Winter
)
--Specify Start Date and End date here
--Value of Start Date Must be Less than Your End Date
DECLARE @StartDate DATETIME = '01/01/2015' --Starting value of Date Range
DECLARE @EndDate DATETIME = '12/31/2025' --End Value of Date Range
DECLARE @CurrentDate AS DATETIME = @StartDate
WHILE @CurrentDate < @EndDate
BEGIN
INSERT INTO [dbo].[DimDate]
SELECT
CONVERT (char(8),@CurrentDate,112) as DateKey,
@CurrentDate AS Date,
DATEPART(DD, @CurrentDate) AS [DayOfMonth],
DATENAME(MM, @CurrentDate) AS [MonthName],
CASE WHEN (MONTH(@CurrentDate) BETWEEN 6 AND 8) OR ( MONTH(@CurrentDate) =9 AND DATEPART(DD, @CurrentDate)=1) THEN 'Summer'
WHEN MONTH(@CurrentDate) =1 THEN 'Winter'
ELSE ''
END AS [TransferWindow]
SET @CurrentDate = DATEADD(DD, 1, @CurrentDate)
END
SELECT * FROM [DimDate]
--DROP TABLE [DimDate]
我正在做一个关于足球转会的分析项目。我有一个模型,其中包含一个名为 FactTransfers 的事实 Table,我需要将其 link 到时间维度,但我需要一个特定的日期范围,即可以转移球员的日期(从 6 月 1 日起)到 9 月 1 日和从 1 月 1 日到 1 月 31 日)。 我看过一些与此事相关的帖子,但它们都有我不需要的代码和属性。
基本上我想要的是: 日期为主键, 每月的某天, 月名, 转移window(夏季或冬季), 年.
我不太熟悉 sql 代码,我花了几个小时试图弄明白,但没有得到我需要的结果。 预先感谢您的所有帮助!
这是创建和填充 Dim table 日期的代码。希望这有帮助。
CREATE TABLE [dbo].[DimDate]
(
[DateKey] INT primary key,
[Date] DATETIME,
[DayofMonth] TINYINT, -- Field will hold day number of Month
[NameofMonth] VARCHAR(9),--January, February etc
[TransferWindow] VARCHAR(20), -- Summer & Winter
)
--Specify Start Date and End date here
--Value of Start Date Must be Less than Your End Date
DECLARE @StartDate DATETIME = '01/01/2015' --Starting value of Date Range
DECLARE @EndDate DATETIME = '12/31/2025' --End Value of Date Range
DECLARE @CurrentDate AS DATETIME = @StartDate
WHILE @CurrentDate < @EndDate
BEGIN
INSERT INTO [dbo].[DimDate]
SELECT
CONVERT (char(8),@CurrentDate,112) as DateKey,
@CurrentDate AS Date,
DATEPART(DD, @CurrentDate) AS [DayOfMonth],
DATENAME(MM, @CurrentDate) AS [MonthName],
CASE WHEN (MONTH(@CurrentDate) BETWEEN 6 AND 8) OR ( MONTH(@CurrentDate) =9 AND DATEPART(DD, @CurrentDate)=1) THEN 'Summer'
WHEN MONTH(@CurrentDate) =1 THEN 'Winter'
ELSE ''
END AS [TransferWindow]
SET @CurrentDate = DATEADD(DD, 1, @CurrentDate)
END
SELECT * FROM [DimDate]
--DROP TABLE [DimDate]