SQL Server Indonesia User Groups Community DW - DimTime for Production Calendar Hierarchy 4-4-5 - Cahyo drop in {here}

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

Cahyo drop in {here}

SQL as breakfast, BI for lunch and dinner with MDX

DW - DimTime for Production Calendar Hierarchy 4-4-5

Di suatu project BI yang saya kerjakan ada permintaan dari klien agar dimensi waktu yang dibuat nantinya punya hierarchy dengan format kalendar 4-4-5.Kalender 4-4-5 disini berarti dalam satu bulan ada 4-5 minggu. Kala u kita melihat kalender yg sebenarnya, akan ada 1 minggu yang terletak di antara 2 bulan. Pada contoh kasus kali ini, hari jumat adalah hari pertama dalam 1 minggu produksi. Untuk lebih jelas ilustrasinya seperti di bawah ini:

  • 1 Okt 2009 adalah Minggu ke-4 bulan Sept
  • 2 Okt 2009-8 Okt 2009 adalah Minggu ke-1 bulan Okt
  • 9 Okt 2009-15 Okt 2009 adalah Minggu ke-2 bulan Okt
  • 16 Okt 2009-22 Okt 2009 adalah Minggu ke-3 bulan Okt
  • 23 Okt 2009-30 Okt 2009 adalah Minggu ke-4 bulan Okt
  • 31 Okt 2009-6 Nov 2009 adalah Minggu ke-5 bulan Okt

Untuk Mendapatkan Minggu tersebut saya menggunakan hari pertama pada suatu minggu sebagai acuan. Sesuai permintaan, hari pertama suatu minggu disini adalah hari jumat bukan hari minggu. Untuk lebih jelasnya sintaks pembuatan tabel dimensi waktu ini adalah sbb:

 CREATE TABLE DimTime (
    TimeKey int IDENTITY PRIMARY KEY,
    AlternateKey AS year(TheDate)*10000+month(TheDate)*100+day(TheDate),
    TheDate datetime NOT NULL,
    Year AS datepart(year,TheDate),
    Quarter AS datepart(quarter,TheDate),
    QuarterName AS 'Q'+datename(quarter,TheDate)+' '+datename(year,TheDate),
    Month AS datepart(month,TheDate),
    MonthName AS LEFT(datename(month,TheDate),3)+' '+datename(year,TheDate),
    Week AS datepart(week,TheDate),
    WeekName AS 'Week '+datename(week,TheDate)+' '+datename(year,TheDate),
    DateName AS datename(day,TheDate)+' '+LEFT(datename(month,TheDate),3)+' '+datename(year,TheDate),
    WeekDayProd AS datepart(dw,dateadd(day,-5,TheDate)),
    FirstWeekDayProd AS dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate),
    YearProd AS datepart(year,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate)),
    QuarterProd AS datepart(quarter,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate)),
    QuarterProdName AS 'Q'+datename(quarter,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate))+' '+datename(year,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate)),
    MonthProd AS datepart(month,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate)),
    MonthProdName AS LEFT(datename(month,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate)),3)+' '+datename(year,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate)),
    WeekProd AS (DATEPART(day,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate))-1)/7+1,
    WeekProdName AS 'Week '+cast((DATEPART(day,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate))-1)/7+1 AS char(1))+' '+LEFT(datename(month,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate)),3)+' '+datename(year,dateadd(day,1-datepart(dw,dateadd(day,-5,TheDate)),Thedate))
)

  Untuk mencoba mengisi data dan melihat hasil pada DimTime ini anda bisa gunakan script berikut:

DECLARE @startdate datetime,@enddate datetime
SET @startdate='20090801'
SET @enddate='20090930'

TRUNCATE TABLE DimTime
WHILE (@startdate<=@enddate)
BEGIN
    INSERT INTO DimTime VALUES(@startdate)
    SET @startdate=dateadd(day,1,@startdate)
END

SELECT * FROM DimTime t

Saya sudah membuat contoh production calendar hierachy pada SSAS menggunakan DimTime ini. Hierarchynya urut dari tahun-kuarter-bulan-minggu-tanggal. Screenshotnya seperti gambar di bawah:

Production Calendar Hierarchy 

Kalau kita perhatikan tanda berwarna merah pada gambar di atas adalah tanggal pada bulan september yang dimasukan ke minggu di bulan agustus untuk keperluan kalender produksi ini.

Comments

No Comments
Powered by Community Server (Commercial Edition), by Telligent Systems