[BI] Dimensão Tempo
OLAP sem uma dimensão de tempo
Não há praticamente nenhum banco de dados OLAP sem uma dimensão de tempo.
Geralmente uma dimensão de tempo contém dias como o nível mais baixo de detalhes, agregados em meses, trimestres e anos. Ocasionalmente, se estiver monitorando um processo de fabricação ou atividade de internet em particular, você poderia criar uma dimensão com minutos ou mesmo segundos como o nível mais baixo de detalhes. Qualquer que seja o nível de detalhes, uma dimensão de tempo possui certas qualidades únicas.
Por exemplo, o tempo normalmente ocorre em intervalos regulares, Cada hora tem 60 minutos, cada dia tem 24 horas. É claro, o tempo não é completamente uniforme porque os 365 dias de um ano não são perfeitamente divisíveis por 7 dias de uma semana ou pelos 12 meses de um ano. Alguns meses tem 30 dias, alguns 31 ou 28 e ocasionalmente 29. Irregularidades são fatos da vida nas dimensões de tempo e ao trabalhar com tempo, você precisará estar preparado para regularidades e irregularidades.
Resolvi criar um Script para criação da Dimensão Tempo para facilitar:
CREATE TABLE [DimTempo](
[Data] [smalldatetime] NOT NULL Primary Key,
[Ano] [smallint] NOT NULL,
[DataCurta] [char](10) NOT NULL,
[DiaSemana] [varchar](15) NOT NULL,
[DiaMes] [smallint] NOT NULL,
[MesNome] [varchar](10) NOT NULL,
[MesNumero] [smallint] NOT NULL,
[Trimestre] [smallint] NOT NULL,
[Semestre] [smallint] NOT NULL
)
GO
SET LANGUAGE Brazilian
Set nocount ON
DECLARE @Ano smallint
DECLARE @Data smalldatetime
DECLARE @DataIni smalldatetime
DECLARE @DataFim smalldatetime
DECLARE @DataCurta char(10)
DECLARE @DiaSemana varchar(15)
DECLARE @DiaMes smallint
DECLARE @MesNome varchar(10)
DECLARE @MesNumero smallint
DECLARE @Trimestre smallint
DECLARE @Semestre smallint
SET @DataIni='01/01/2005'
SET @DataFim='31/12/2020'
SET @Data=@DataIni
While @Data<=@DataFim
Begin
Set @DataCurta = convert(char(10), @Data, 103)
Set @DiaSemana = datename(weekday,@Data)
Set @DiaMes = day(@Data)
Set @MesNome = datename(month,@Data)
Set @MesNumero = month(@Data)
Set @Trimestre = DATEPART(quarter,@Data)
Select @Semestre= Case
when @MesNumero in (1,2,3,4,5,6) then 1
when @MesNumero in (7,8,9,10,11,12) then 2
End
Set @Ano = YEAR(@Data)
INSERT INTO DimTempo values(@Data, @Ano, @DataCurta, @DiaSemana, @DiaMes, @MesNome, @MesNumero, @Trimestre, @Semestre)
Set @Data=dateadd(day,1,@Data)
End
Set nocount OFF
Verifique como ficou:
SELECT * FROM DimTempo

Related articles
Short: SQL Update using begin try and begin transaction
Commit and Rollback command
Getting the last 120 months of data from my database
how to do it in SQL language?
How to create a variable to use the IN clause SELECT query SQL?
Database code part
Ozimar Henrique