65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Microsoft Analysis Services 中创建时间维度

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (11投票s)

2008年5月6日

CPOL
viewsIcon

98347

downloadIcon

1843

与日期维度(包含年、月、日)不同,时间维度(包含小时、分钟和秒)不会被 SSAS(Microsoft SQL Server Analysis Services)自动创建。本文档解释了如何在 Microsoft SQL Server Analysis Services 中创建和使用时间维度。

引言

有时,您需要按时间级别(小时、分钟和秒)创建报告。对于关系型报告,您可以使用 DATEPART() 函数从 DateTime 列中提取时间信息。但是,对于 OLAP 报告,这样做比较困难。本文档解释了如何创建时间维度表并在 SSAS 中使用它。

背景

要理解本文档,您需要了解维度建模和 Microsoft SQL Server Analysis Services 的基础知识。

使用代码

代码(zip 文件)由四个脚本组成

  1. DimTime.sqlCREATE TABLE 语句创建 DimTime 表。
  2. Populate DimTime.sql – 脚本用时间信息填充 DimTime 表。每条记录代表一秒。
  3. Dim Time.dim – 可选的 SSAS 2005 dim 文件,您可以将其添加到您的 SSAS 数据库中。
  4. 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
© . All rights reserved.