[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

Subscribe ecode10.com
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
You can cancel anytime.
Log In
Related articles
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?
Transformando linhas em colunas usando SQL Server
veja como funciona