martes, 10 de junio de 2008

Dimensión de tiempo con granularidad de horas.....

Hola a todos,

Hoy esto va de un poquito de BI. Resulta que para una prueba necesitaba tener una tabla de dimensión de tiempo con granularidad de horas y por lo que he visto SSAS permite crear esta dimensión pero se queda en el día. Buscando en la web (no mucho la verdad) he encontrado este enlace que proporciona un script para crear y cargar la tabla:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3353754&SiteID=1

Y el script es el siguiente:

/***************************************
Script: Creates and Populates an Hour Dimension Table

Note: This script does hours and minutes. If seconds are needed,
then modify the datepart on the last line that increments the date.
Obviously the table will be bigger when you include seconds.

Author: Ibrahim Hafidh
Date: 10/11/2005
****************************************/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dimHour]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[dimHour]
GO

CREATE TABLE dimHour
(
HourID INT IDENTITY (1, 1) NOT NULL PRIMARY KEY
, TheDate DATETIME NOT NULL
, TheTime Datetime NOT NULL
, MilitaryHour INT NOT NULL
, StandardHour INT NOT NULL
, TheMinute INT NOT NULL
, TheSecond INT NOT NULL
, Standard varchar(2) NOT NULL
)


DECLARE @startdate DATETIME
DECLARE @enddate DATETIME
DECLARE @date DATETIME

SET @startdate = '1/1/2005 12:00:00 AM'
SET @enddate = '1/1/2005 23:59:59 PM'
SET @date = @startdate

WHILE @date <= @enddate
BEGIN
INSERT INTO dimHour (TheDate, TheTime, MilitaryHour, StandardHour, TheMinute, TheSecond, Standard)
VALUES (
@date --TheDate
, convert(nvarchar(11), @date, 114) --Time format
, DATEPART(hh, @date) --Military Hour
, CONVERT(varchar(2),
CASE
WHEN DATEPART([hour], @Date) > 12 THEN CONVERT(varchar(2), (DATEPART([hour], @Date) - 12))
WHEN DATEPART([hour], @Date) = 0 THEN '12'
ELSE CONVERT(varchar(2), DATEPART([hour], @Date))
END) -- Standard Hour
, DATEPART(mi, @date) --Minute
, DATEPART(ss, @date) --Second
, CASE WHEN DATEPART(hh, @date) between 0 and 11 THEN 'AM' ELSE 'PM' END
)


SET @date = DATEADD(mi, 1, @date) -- ** Modify the datepart to ss if seconds are needed

END



Por otra parte dejo también este enlace muy útil de conversiones de fechas en SQL Server 2005

http://www.dreamincode.net/forums/showtopic42872.htm

Y esto es todo por hoy....


A2

No hay comentarios: