none
Erro na Dimensão Tempo RRS feed

  • Pergunta

  • Bom dia, eu estou com um problema e nao consigo solucionar, o erro é ao criar a Dimensão Data em SQL . 

     

    create table DimensãoTempo
    
    	(
    
    		[DataID] int IDENTITY(1,1) PRIMARY KEY,
    
    		Data date,
    
    		Ano int,
    
    		Mes int,
    
    		Dia int,
    
    		AnoMes char(7),
    
    		AnoMesNome varchar(15),
    
    		MesNome varchar(9),
    
    		DiaSemana int,
    
    		DiaSemanaNome varchar(7),
    
    		DiaAno int,
    
    		Bimestre int,
    
    		Trimestre int,
    
    		Semestre int,
    
    		SemanaMes int,
    
    		SemanaAno int,
    
    		AnoBimestre char(7),
    
    		AnoTrimestre char(7),
    
    		AnoSemestre char(7),
    
    		DiaUtil int,
    
    		FinalSemana int,
    
    		)
    
    
    
    declare @DataInicio as date
    
    declare @DataFim as date 
    
    
    
    declare @Dia as int,
    
    		@DiaSemana as int,
    
    		@DiaSemanaNome  as varchar(7),
    
    		@Ano as int,
    
    		@Mes as int,
    
    		@MesNome as varchar(9),
    
    		@Bimestre as int,
    
    		@Trimestre as int,
    
    		@Semestre as int,
    
    		@DiaUtil as int,
    
    		@FinalSemana as int,
    
    		@SemanaMes as int,
    
    		@SemanaAno as int
    
    
    
    set @DataInicio ='2000-01-01'
    
    set @DataFim ='2020-12-31'
    
    
    
    while @DataInicio <= @DataFim
    
    begin
    
    
    
    	set @Dia = day(@DataInicio)
    
    	set @DiaSemana = datepart(weekday,@DataInicio)
    
    	set @Ano = year(@DataInicio)
    
    	set @Mes = month(@DataInicio)
    
    
    
    	set @DiaSemanaNome = case
    
    	when @DiaSemana =1 then 'Domingo'
    
    	when @DiaSemana =2 then 'Segunda'
    
    	when @DiaSemana =3 then 'Terça'
    
    	when @DiaSemana =4 then 'Quarta'
    
    	when @DiaSemana =5 then 'Quinta'
    
    	when @DiaSemana =6 then 'Sexta'
    
    	when @DiaSemana =7 then 'Sábado' end
    
    
    
    	set @MesNome = case
    
    	when @Mes = 1 then 'Janeiro'
    
    	when @Mes = 2 then 'Fevereiro'
    
    	when @Mes = 3 then 'Março'
    
    	when @Mes = 4 then 'Abril'
    
    	when @Mes = 5 then 'Maio'
    
    	when @Mes = 6 then 'Junho'
    
    	when @Mes = 7 then 'Julho'
    
    	when @Mes = 8 then 'Agosto'
    
    	when @Mes = 9 then 'Setembro'
    
    	when @Mes = 10 then 'Outubro'
    
    	when @Mes = 11 then 'Novembro'
    
    	when @Mes = 12 then 'Dezembro' end
    
    
    
    	set @Bimestre = case
    
    	when @Mes <= 2 then 1
    
    	when @Mes <= 4 then 2
    
    	when @Mes <= 6 then 3
    
    	when @Mes <= 8 then 4
    
    	when @Mes <= 10 then 5
    
    	when @Mes <= 12 then 6 end
    
    
    
    	set @trimestre = case
    
    	when @Mes <= 3 then 1
    
    	when @Mes <= 6 then 2
    
    	when @Mes <= 9 then 3
    
    	when @Mes <= 12 then 4 end
    
    
    
    	set @Semestre = case
    
    	when @Mes <= 6 then 1
    
    	when @Mes <= 12 then 2 end
    
    
    
    	select @SemanaMes = case
    
    	when @Dia < 8 then 1
    
    	when @Dia < 15 then 2
    
    	when @Dia < 22 then 3
    
    	when @Dia < 29 then 4
    
    	when @Dia < 32 then 5 end
    
    
    
    	set @SemanaAno = datepart(wk,@DataInicio)
    
    
    
    	set @DiaUtil = 1
    
    	set @FinalSemana = 0
    
    
    
    	if @DiaSemana = 1 or @DiaSemana = 7
    
    		set @FinalSemana = 1
    
    		
    
    -----------
    
    --Feriados:
    
    	if @FinalSemana = 1
    
    		set @DiaUtil = 0
    
    	else if @Mes = 1 and @Dia = 1 --
    
    		set @DiaUtil = 0
    
    	else if @Mes = 5 and @Dia = 1 --
    
    		set @DiaUtil = 0
    
    	else if @Mes = 10 and @Dia = 5 --
    
    		set @DiaUtil = 0
    
    	else if @Mes = 11 and @Dia = 2 --
    
    		set @DiaUtil = 0
    
    	else if @Mes = 8 and @Dia = 15 --
    
    		set @DiaUtil = 0
    
    	else if @Mes = 12 and @Dia = 1 --
    
    		set @DiaUtil = 0
    
    	else if @Mes = 12 and @Dia = 8 --
    
    		set @DiaUtil = 0
    
    	else if @Mes = 11 and @Dia = 1 --
    
    		set @DiaUtil = 0
    
    	else if @Mes = 12 and @Dia = 25 --
    
    		set @DiaUtil = 0
    
        
    
    	insert into DataWarehouseIVV.dbo.DimensãoTempo
    
        (   Data, 
    
    		Ano, 
    
    		Mes, 
    
    		Dia, 
    
    		AnoMes, 
    
    		AnoMesNome, 
    
    		MesNome, 
    
    		DiaSemana, 
    
    		DiaSemanaNome,
    
    		DiaAno,
    
    		Bimestre,
    
    		Trimestre,
    
    		Semestre,
    
    		SemanaMes,
    
    		SemanaAno,
    
    		AnoBimestre,
    
    		AnoTrimestre,
    
    		AnoSemestre,
    
    		DiaUtil,
    
    		FinalSemana) 
    
    	
    
    	Values(@DataInicio,	
    
    		@Ano, 
    
    		@Mes, 
    
    		@Dia, 
    
    		convert(char(7),@DataInicio,120),
    
    		cast(@Ano as char(4)) + '-' + @MesNome,
    
    		@MesNome,
    
    		@DiaSemana,
    
    		@DiaSemanaNome,
    
    		(datepart(dayofyear,@DataInicio)),
    
    		(@Bimestre),
    
    		@Trimestre,
    
    		@Semestre,
    
    		@SemanaMes,
    
    		@SemanaAno,
    
    		(cast(@ano as varchar) + '-0' + cast(@Bimestre as varchar)),
    
    		(cast(@ano as varchar) + '-0' + cast(@Trimestre as varchar)),
    
    		(cast(@ano as varchar) + '-0' + cast(@Semestre as varchar)),
    
    		@DiaUtil,
    
    		@FinalSemana)

     

     

     

    O erro que me dá é: 

    Msg 102, Level 15, State 1, Line 174

    Incorrect syntax near ')'.

     


    • Editado sql-enthusiast quinta-feira, 22 de dezembro de 2011 11:23
    • Tipo Alterado sql-enthusiast segunda-feira, 26 de dezembro de 2011 12:15
    quinta-feira, 22 de dezembro de 2011 11:19

Respostas

  • Você também pode criar uma solução SSAS e criar a dimensão de tempo a partir dela, ele faz a população dos campos pra você, depois você entraria com as customizações como Feriados e afins... vou procurar um script que eu tinha de alimentação de dimensão de data, só encontrei o de dimensão de tempo.

     

    Se o post já foi útil, qualifique!

    quinta-feira, 22 de dezembro de 2011 12:42

Todas as Respostas

  • If ...

    begin

       set

    end

     

    e precisa mudar o valor da variavel @DataInicio senao ele nunca sairá do looping....

    • Marcado como Resposta sql-enthusiast segunda-feira, 26 de dezembro de 2011 12:15
    quinta-feira, 22 de dezembro de 2011 12:29
  • isto estava a funcionar, mas eu fiz umas alterações iniciais e deixou de dar..Obrigado. vou tentar..colocar a dar.
    • Editado sql-enthusiast quinta-feira, 22 de dezembro de 2011 12:32
    • Marcado como Resposta sql-enthusiast segunda-feira, 26 de dezembro de 2011 12:15
    quinta-feira, 22 de dezembro de 2011 12:32
  • Você também pode criar uma solução SSAS e criar a dimensão de tempo a partir dela, ele faz a população dos campos pra você, depois você entraria com as customizações como Feriados e afins... vou procurar um script que eu tinha de alimentação de dimensão de data, só encontrei o de dimensão de tempo.

     

    Se o post já foi útil, qualifique!

    quinta-feira, 22 de dezembro de 2011 12:42
  • Vc a pouco deu-me uma indicação, mas nao percebi como fazer.
    • Marcado como Resposta sql-enthusiast segunda-feira, 26 de dezembro de 2011 12:15
    quinta-feira, 22 de dezembro de 2011 14:52