2016-05-25 1 views
0

Я делаю проект анализа по футбольным трансляциям. У меня есть модель с одной фактологической таблицей, называемой FactTransfers, и мне нужно связать ее с измерением времени, но мне нужен определенный диапазон дат, а именно даты, когда можно перенести игроков (с 1 июня по 1 сентября и с 1 января по 31 января). Я видел некоторые сообщения, связанные с вопросом, но у всех их есть код и атрибуты, которые мне не нужны.Создание измерения времени с конкретными датами на SQL

В основном то, что я хочу: Даты в качестве первичного ключа, дня месяца, Названия месяца, Трансферного окна (лето или зима), года.

Я не слишком знаком с кодом sql, и я потратил часы, пытаясь понять это без результатов, которые мне нужны. Заранее благодарю за вашу помощь!

ответ

1

Вот код для создания и заполнения таблицы Dim для дат. Надеюсь это поможет.

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] 
+0

Большое вам спасибо за помощь! – SMC