none
Criar Dimensão HORA RRS feed

  • 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)
    segunda-feira, 28 de maio de 2012 10:13

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
    terça-feira, 29 de maio de 2012 14:56

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"

    segunda-feira, 28 de maio de 2012 14:08
  • 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 - ....

    segunda-feira, 28 de maio de 2012 14:51
  • 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
    terça-feira, 29 de maio de 2012 14:56