在 Microsoft Analysis Services 中创建时间维度






4.75/5 (11投票s)
与日期维度(包含年、月、日)不同,时间维度(包含小时、分钟和秒)不会被 SSAS(Microsoft SQL Server Analysis Services)自动创建。本文档解释了如何在 Microsoft SQL Server Analysis Services 中创建和使用时间维度。
引言
有时,您需要按时间级别(小时、分钟和秒)创建报告。对于关系型报告,您可以使用 DATEPART()
函数从 DateTime
列中提取时间信息。但是,对于 OLAP 报告,这样做比较困难。本文档解释了如何创建时间维度表并在 SSAS 中使用它。
背景
要理解本文档,您需要了解维度建模和 Microsoft SQL Server Analysis Services 的基础知识。
使用代码
代码(zip 文件)由四个脚本组成
- DimTime.sql –
CREATE TABLE
语句创建 DimTime 表。 - Populate DimTime.sql – 脚本用时间信息填充 DimTime 表。每条记录代表一秒。
- Dim Time.dim – 可选的 SSAS 2005 dim 文件,您可以将其添加到您的 SSAS 数据库中。
- Populate Fact.sql – 可选的示例脚本,演示如何将您的事实表链接到 DimTime 维度。
Populate DimTime.sql 脚本如下所示
delete from DimTime
declare @DimTimeKey int, @Date datetime, @AM char(2),
@hour24 tinyint, @hour tinyint, @minute tinyint, @second int
set @DimTimeKey = 0
while @DimTimeKey < (60*60*24)
begin
set @DimTimeKey = @DimTimeKey + 1
set @Date = DATEADD(second,@DimTimeKey,convert(datetime, '1/1/2007'))
set @AM = right(convert(varchar,@Date,109),2)
set @hour24 = DATEPART(hour, @Date)
set @hour = case when @AM = 'PM' then @hour24 - 12 else @hour24 end
set @minute = DATEPART(minute, @Date)
set @second = DATEPART(second, @Date)
insert into dbo.DimTime(DimTimeKey,Time,Time24,HourName, _
MinuteName,MinuteKey,Hour,Hour24,Minute,Second,AM)
select @DimTimeKey,
Time = right('0' + convert(varchar,@hour),2)
+ ':' + right('0' + convert(varchar,@minute),2)
+ ':' + right('0' + convert(varchar,@second),2) + ' ' + @AM,
Time24 = convert(varchar,@Date,108),
HourName = right('0' + convert(varchar,@hour),2) + ' ' + @AM,
MinuteName = right('0' + convert(varchar,@hour),2)
+ ':' + right('0' + convert(varchar,@minute),2)+ ' ' + @AM,
MinuteKey = (@hour24*60) + @minute,
@hour, @hour24, @minute, @second, @AM
end