Usuário com melhor resposta
Erro na Dimensão Tempo

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
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!
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator sexta-feira, 13 de fevereiro de 2015 17:59
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
-
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
-
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!
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator sexta-feira, 13 de fevereiro de 2015 17:59
-
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