Click here to Skip to main content
6,595,854 members and growing! (18,278 online)
Email Password   helpLost your password?
Database » Database » SQL Server     Intermediate License: The Code Project Open License (CPOL)

Creating Time Dimension in Microsoft Analysis Services

By Igor Krupitsky

Unlike Date Dimension (with Year, Month, Date), Time Dimension (with Hour, Minutes, and Seconds) is not automatically created by SSAS (Microsoft SQL Server Analysis Services). This article explains how to create and use Time Dimension in Microsoft SQL Server Analysis Services.
SQL, WindowsSQL 2000, SQL 2005, DBA, Dev
Version:3 (See All)
Posted:6 May 2008
Views:12,585
Bookmarked:7 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
3 votes for this article.
Popularity: 1.91 Rating: 4.00 out of 5
1 vote, 33.3%
1

2

3

4
2 votes, 66.7%
5

Introduction

Sometimes, you need to create a report on a time level (Hour, Minutes, and Seconds). For a relational report, you can use the DATEPART() function to extract time information out of a DateTime column. However, doing this is difficult for an OLAP report. This article explains how to create a Time Dimension table and use it inside SSAS.

Background

To understand this article, you need to understand the basics of dimensional modeling and Microsoft SQL Server Analysis Services.

Using the code

The code (zip file) is composed of four scripts:

  1. DimTime.sqlCREATE TABLE statement creates the DimTime table.
  2. Populate DimTime.sql – Script populates the DimTime table with time info. Each record represents a second.
  3. Dim Time.dim – Optional SSAS 2005 dim file you can add to your SSAS database.
  4. Populate Fact.sql – Optional sample script shows how to link your fact table to the DimTime dimension.

The Populate DimTime.sql script looks like this:

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

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Igor Krupitsky


Member
Igor is a business intelligence consultant working in Tampa, Florida. He has a BS in Finance from University of South Carolina and Masters in Information Management System from University of South Florida. He also has following professional certifications: MCSD, MCDBA, MCAD.
Occupation: Web Developer
Location: United States United States

Other popular Database articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 1 of 1 (Total in Forum: 1) (Refresh)FirstPrevNext
GeneralUseful PinmemberbinaryDigit@@7:49 24 May '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 6 May 2008
Editor: Smitha Vijayan
Copyright 2008 by Igor Krupitsky
Everything else Copyright © CodeProject, 1999-2009
Web15 | Advertise on the Code Project