Procedura generująca wymiar czasu dla kostki OLAP.

W odmętach internetu znalazłem procedurę tworzącą tablicę, która posłuży nam do tworzenia hierarchii czasu w naszych kostkach.

set datefirst 1
declare
@start_date datetime
,@end_date datetime
,@loop_day datetime
,@diff int
,@loop int

Select
@start_date =’1950-01-01′ — Adjust as per need
,@end_date = ‘2050-12-31′
,@loop = 0

select
@diff = datediff(dd,@start_date,@end_date)

CREATE TABLE [Time_Dimension] (
[Time_ID] [int] identity(1,1) primary key,
[Cal_Date] [datetime] NULL ,
[The_Date] [int] NULL ,
[The_Day] [varchar] (20),
[The_Month_No] [int] NULL ,
[The_Year] [int] NULL ,
[The_Quarter] [varchar] (2),
) ON [PRIMARY]

while @loop <= @diff
begin
select @loop_day = dateadd(dd,@loop,@start_date)
insert into [Time_Dimension]
select
@loop_day
,datepart(dd,@loop_day)
,case datepart(dw,@loop_day)
when 1 then 'Poniedziałek'
when 2 then 'Wtorek'
when 3 then 'Środa'
when 4 then 'Czwartek'
when 5 then 'Piątek'
when 6 then 'Sobota'
when 7 then 'Niedziela'
end
,datepart(mm,@loop_day)
,datepart(yy,@loop_day)
,'Q'+convert(varchar,datepart(qq,@loop_day))

select
@loop = @loop + 1
end

Tags: , ,

2 Responses to “Procedura generująca wymiar czasu dla kostki OLAP.”

  1. Cris says:

    Witam.Jeśli mam istniejącą baze wrzucona z excela do sql server2008 o takiej strukturze:
    ————-
    Trans_id_key
    TIME_KEY
    ITEM_KEY
    CLIENT_KEY
    Quantity
    Price
    ————–
    i 3 tabele pomocnicze:
    ———
    TIME_KEY
    Day
    Day_of_the_week
    Month
    Year
    ———–
    CLIENT_KEY
    COUNTRY
    CITY
    ——-
    ITEM_KEY
    ITEM_NAME
    BRAND
    —–
    Tworząc cuba w vs jak zalinkowac wymiar czasu
    W tabeli TIME_KEY gdzie TIME_KEY jest kluczem i jest w formacie: 2008-09-20
    Jestem nowy z olapa i prosze o rade.
    Pozdrawiam krzysiek

  2. admin says:

    Te trzy tabele bym splaszczyl w jedna(juz w vs), pozniej wykorzystujac swoja tablice czasu laczysz je po time_key,day, day_of_the_week, powinno dzialac.

Leave a Reply