[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
Comando SQL Update usando Try Catch
Na prática e no database
SELECT Format Date Time for many countries
It is a good tip to use day by day
Creating a SiteMap using SQL Database
Como indexar melhor meu site e links?
Membership $5/mo
✓ Full articles Subscribe ✓ Write forums ✓ Access podcast ✓ Full jobs opportunities ✓ Access eBooks ✓ Access magazine ✓ Access videos |
Free
✓ Open articles ✓ Read forums ✓ Access podcast x Full jobs opportunities x Access eBooks x Access magazine x Access videos |