ZAMAN BOYUTLARI OLUŞTURMA – SQL SERVER (time dimension table)

Merhabalar, iş zekası ve veri ambarı projeleri ile uğraşıyorsanız zaman boyutuna muhakkak ihtiyacınız olacaktır. Çalıştığınız projelerde zaman boyutları farklı detaylarda olabilir. Raporlarınızı yıl, çeyrek, ay, gün detaylarında hazırlamış olabilirsiniz. Her aggregation düzeyine yönelik olarak zaman boyutlarınızı oluşturmanız gerekmektedir.  Örneğin fact tablonuz aylık düzeyde ise buna karşılık olan zaman boyutunuz ay detayında olmalıdır; eğer gün detayında ise zaman boyutunuz gün detayında olmalıdır.

Aşağıdaki sorguyla  ay, gün detayında zaman dimension tablosunu oluşturabilirsiniz..

Oracle için script..

Not1: Aşağıdaki sorgu bu haliyle Ay detayındadır,  fakat pasif olan satırları (‘–‘ silerek) aktif hale getirdiğinizde sonucu Gün detayında alabilirsiniz

Not2:Script kopyalandığında tek tırnak işareti bozulmaktadır, sorgunuzun çalışır duruma gelmesi için tek tırnak işaretlerinin üzerinden geçmeniz gerekmektedir.

(ZamanBoyut adlı dosyadan bozulmayacak şekilde kopyalayabilirsiniz)

*******************************************************************************

WITH TumZaman as

(

SELECT Cast (‘2000-01-01’ as DateTime) Tarih

UNION ALL

SELECT Tarih + 1

FROM TumZaman

WHERE Tarih + 1 <= ‘2030-12-31’

)

SELECT

distinct

–Tarih ,

YEAR (Tarih) as Yil

,DatePart ( qq, Tarih) as Ceyrek

,MONTH (Tarih) as Yila_Gore_Ay_Sirasi

,DateDiff(mm,DateAdd(qq,DateDiff(qq,0,Tarih),0),Tarih)+1 as Ceyrege_Gore_Ay_Sirasi

–,DatePart (wk, Tarih) as Yila_Gore_Hafta_Sirasi

–,datediff(wk,dateadd(qq,datediff(qq,0,Tarih),0),Tarih)+1 as Ceyrege_Gore_Hafta_Sirasi

–,datediff(wk,dateadd(mm,datediff(mm,0,Tarih),0),Tarih)+1 as Aya_Gore_Hafta_Sirasi

–,DatePart (dy, Tarih) as Yila_Gore_Gun_Sirasi

–,datediff(dd,dateadd(qq,datediff(qq,0,Tarih),0),Tarih)+1 as Ceyrege_Gore_Gun_Sirasi

–,DAY (Tarih) as Aya_Gore_Gun_Sirasi

–,DatePart (dw, Tarih) as Haftaya_Gore_Gun_Sirasi

,CASE

WHEN MONTH (Tarih) =1 THEN ‘Ocak’

WHEN MONTH (Tarih) =2 THEN ‘Şubat’

WHEN MONTH (Tarih) =3 THEN ‘Mart’

WHEN MONTH (Tarih) =4 THEN ‘Nisan’

WHEN MONTH (Tarih) =5 THEN ‘Mayıs’

WHEN MONTH (Tarih) =6 THEN ‘Haziran’

WHEN MONTH (Tarih) =7 THEN ‘Temmuz’

WHEN MONTH (Tarih) =8 THEN ‘Ağustos’

WHEN MONTH (Tarih) =9 THEN ‘Eylül’

WHEN MONTH (Tarih) =10 THEN ‘Ekim’

WHEN MONTH (Tarih) =11 THEN ‘Kasım’

WHEN MONTH (Tarih) =12 THEN ‘Aralık’

END Ay_Adi

,LEFT ( CASE

WHEN MONTH (Tarih) =1 THEN ‘Ocak’

WHEN MONTH (Tarih) =2 THEN ‘Şubat’

WHEN MONTH (Tarih) =3 THEN ‘Mart’

WHEN MONTH (Tarih) =4 THEN ‘Nisan’

WHEN MONTH (Tarih) =5 THEN ‘Mayıs’

WHEN MONTH (Tarih) =6 THEN ‘Haziran’

WHEN MONTH (Tarih) =7 THEN ‘Temmuz’

WHEN MONTH (Tarih) =8 THEN ‘Ağustos’

WHEN MONTH (Tarih) =9 THEN ‘Eylül’

WHEN MONTH (Tarih) =10 THEN ‘Ekim’

WHEN MONTH (Tarih) =11 THEN ‘Kasım’

WHEN MONTH (Tarih) =12 THEN ‘Aralık’

END, 3) Kisa_Ay_Adi

–,CASE

–WHEN DatePart (dw, Tarih) =1 THEN ‘Pazartesi’

–WHEN DatePart (dw, Tarih) =2 THEN ‘Salı’

–WHEN DatePart (dw, Tarih) =3 THEN ‘Çarşamba’

–WHEN DatePart (dw, Tarih) =4 THEN ‘Perşembe’

–WHEN DatePart (dw, Tarih) =5 THEN ‘Cuma’

–WHEN DatePart (dw, Tarih) =6 THEN ‘Cumartesi’

–WHEN DatePart (dw, Tarih) =7 THEN ‘Pazar’

–END Gun_Adi

–,case when DatePart (dw, Tarih) in (1,2,3,4,5) then ‘HI’

–when DatePart (dw, Tarih) in (6,7) then ‘HS’ end hafta_ici_sonu

, CONVERT(VARCHAR(7), Tarih, 111) AS [YYYY/MM]

–,CONVERT(VarChar(10),Tarih,112) as Gun_Kodu

,CONVERT(nvarchar(6), Tarih, 112) as AyKodu

–,CONVERT(VarChar(10),Tarih,111) as [YYYY/MM/DD]

INTO Dim_ZamanAy–Dim_ZamanGun

FROM TumZaman

OPTION (MAXRECURSION 0)

*******************************************************************************

(ZamanBoyut adlı dosyadan bozulmayacak şekilde kopyalayabilirsiniz)

Unutmayın ki bu sonucu oluşturacak bir çok yol olabilir.

Kolay gelsin..

Oracle için script..

Reklamlar

About ozanyay

İş Zekası ve Veri Ambarı Uzmanı
Bu yazı Data Warehouse, Microsoft BI, Pure SQL / PLSQL, Raporlama, sql, SQL Server, Veri Ambarı, Veri Tabanı, İş Zekası içinde yayınlandı ve , , , , , , , , , , , , , , , , , , , , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s