Usuário com melhor resposta
Criar Dimensão HORA

Pergunta
-
Bom dia,
Gostaria de saber como posso criar uma dimensão hora.
Têm exemplos de como posso fazer em SQL?
- Movido Roberto F FonsecaModerator segunda-feira, 28 de maio de 2012 12:17 Movido para um forum mais adequado (De:SQL Server - Desenvolvimento Geral)
Respostas
-
Segue o script:
declare @hora time set nocount on set @hora = '00:00:00' --drop table dimHora CREATE TABLE dbo.dimHora ( idHora time(7) NOT NULL, Hora tinyint NOT NULL, Minuto tinyint NOT NULL, Segundo tinyint NOT NULL ) ON [PRIMARY] ALTER TABLE dbo.dimHora ADD CONSTRAINT PK_Table_2 PRIMARY KEY CLUSTERED ( idHora ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] WHILE @hora <> '23:59:59' BEGIN insert into dimHora values(@hora, DATEPART(hour,@hora), DATEPART(minute,@hora), DATEPART(second,@hora) ) select @hora = DATEADD(second,1,@hora) END insert into dimHora values(@hora, DATEPART(hour,@hora), DATEPART(minute,@hora), DATEPART(second,@hora) )
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
- Marcado como Resposta sql-enthusiast terça-feira, 29 de maio de 2012 15:09
Todas as Respostas
-
A tabela da dimensão hora (costumo chamar de DimTempo, DimTime) costuma ser criada com diversos atributos em cima de um campo datetime
Você pode extrair a coluna de datetime do seu DW, e usar diversas operações SQL como month(field) pra ter o mês e year(field) para se ter o ano. Usando SQL você pode ter nome do mês descritivo, numero do semestre/trimestre, dia da semana, trimestre fiscal... e nisso sua dimtime terá uma como PK o campo datetime, e seus outros campos serão os descritos acima.
Usando o Analysis Services você pode criar a dimensão Time a partir da tabela DimTime, e setar nas propriedades da dimensão (F4) que esta é uma dimensão de tempo e atributo a atributo descreve-los como Year / Month / Trimester... essa distinção faz com que seja possível usar sua DimTime para criar campos calculados complexos, como "Year To Date", "Last 12 Months", "Same Month Last Year", através do botão "Add Business Intelligence"
-
Agradeço sua resposta, mas naverdade não é isso que pretendo.
Eu a dimensão tempo sei implementar.
Agora pretendo um outr dimensão - HORA, que tenha apenas a horas...
ou seja, algo do tipo:
ID_PK - TEMPO - HORA - MINUTO - SEGUNDO - MILÉSIMOS , etc....
1 - 00:00:00.000 - 00 - 00 - 00 - 000
2 - 01:01:01.001 - 01 - 01 - 01 - 001
3 - ....
-
Segue o script:
declare @hora time set nocount on set @hora = '00:00:00' --drop table dimHora CREATE TABLE dbo.dimHora ( idHora time(7) NOT NULL, Hora tinyint NOT NULL, Minuto tinyint NOT NULL, Segundo tinyint NOT NULL ) ON [PRIMARY] ALTER TABLE dbo.dimHora ADD CONSTRAINT PK_Table_2 PRIMARY KEY CLUSTERED ( idHora ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] WHILE @hora <> '23:59:59' BEGIN insert into dimHora values(@hora, DATEPART(hour,@hora), DATEPART(minute,@hora), DATEPART(second,@hora) ) select @hora = DATEADD(second,1,@hora) END insert into dimHora values(@hora, DATEPART(hour,@hora), DATEPART(minute,@hora), DATEPART(second,@hora) )
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
- Marcado como Resposta sql-enthusiast terça-feira, 29 de maio de 2012 15:09