Nota de Migração: Este artigo foi migrado para o Portal Wiki em Português. O conteúdo será atualizado aqui http://social.technet.microsoft.com/wiki/pt-br/contents/articles/12578.dimensao-tempo.aspx. 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
]
[DataCurta] [
char
](10)
[DiaSemana] [
varchar
](15)
[DiaMes] [
[MesNome] [
[MesNumero] [
[Trimestre] [
[Semestre] [
)
GO
SET
LANGUAGE Brazilian
Set
nocount
ON
DECLARE
@Ano
@Data smalldatetime
@DataIni smalldatetime
@DataFim smalldatetime
@DataCurta
(10)
@DiaSemana
(15)
@DiaMes
@MesNome
@MesNumero
@Trimestre
@Semestre
@DataIni=
'01/01/2005'
@DataFim=
'31/12/2020'
@Data=@DataIni
While @Data<=@DataFim
Begin
@DataCurta =
convert
(
(10), @Data, 103)
@DiaSemana = datename(weekday,@Data)
@DiaMes =
day
(@Data)
@MesNome = datename(
month
,@Data)
@MesNumero =
@Trimestre = DATEPART(quarter,@Data)
Select
@Semestre=
Case
when
in
(1,2,3,4,5,6)
then
1
(7,8,9,10,11,12)
2
End
@Ano =
YEAR
INSERT
INTO
DimTempo
values
(@Data, @Ano, @DataCurta, @DiaSemana, @DiaMes, @MesNome, @MesNumero, @Trimestre, @Semestre)
@Data=dateadd(
,1,@Data)
OFF
SELECT
*
FROM