Ortak boyut (conforming dimension) kullanımında bir ipucu


Veri ambarı ve küp tasarımında en önemli ilkelerden birisi, farklı fact tablolarında aynı bakış açısını yani boyutu kullanıyorsak, bunlar için ortak bir boyutun kullanılmasıdır.

Yani bir ürün boyutunuz varsa, ürünle ilgili tüm fact tabloları aynı ürün boyutuna bağlı olsun istenir. Ya da bir zaman boyutunuz varsa, zamanla ilgili tüm fact tabloları aynı zaman boyutuna bağlı olsun istenir.

Peki ya bazı fact’lerinizin zaman kırılımı ay, bazı factlerinizin zaman kırılımı ise çeyrekse? O zaman ne yapacaksınız?

Veritabanı kurallarına göre düşünecek olursanız, fact tablolarında foreign key ataması yapmak için karşılık tabloda primary key ya da unique constraint ataması yapmanız gerekir. Zaman tablosunda diyelim ki en küçük kırılımınız ay olsun. AyID’yi primary key yapabilirsiniz. Peki ya çeyreğe bağlı fact için foreign key atamasını nasıl yapacaksınız. Bir ÇeyrekID kolonunuz olabilir, ama satırlarda doğal olarak tekrar edeceği için (aynı çeyrekte üç ay var) bu kolonu unique yapamazsınız. Bu durumda da foreign key yapamazsınız!

Ama… Veritabanı kısıtlarıyla düşünmeyi bırakın. Bir iş zekası çözümü gerçekleştiriyorsunuz ve küplerin dünyasındasınız. Kübün data source view’inde bu tür karşılığı unique olmayan bir foreign key ilişkisi oluşturabilirsiniz. Ardından da bir fact’te zaman boyutunu AyID bazında bağlarken diğerinde ÇeyrekID bazında bağlantı yapabilirsiniz.

Küçük bir ipucu: Küplerin dünyasında bir boyutla bir fact arasında many to many ilişki de tasarlayabilirsiniz. Bunu daha önceki bir yazımda anlatmıştım.

DÜZELTİ:

Yukarıda ufak bir hata var. Anlatılan ilişki kurma şekli yapılabiliyor ama sonucu biraz farklı. Bu yaklaşımla da yine many to many ilişki kurmuş oluyorsunuz.

Şöyle bir durum düşünün: Haftalık nöbet ataması yapıyorsunuz. Ama günlük olarak nöbetleri sayıyorsunuz. Yani atamalarda nöbet hafta bazında bağlı olsa da bir haftaya bağladığınızda o değer alttaki günler için de tekrar etmeli. Bu durumda tarih boyutunda haftaID alanıyla data source view üzerinden bir ilişki kurabilirsiniz. Kübün içinde dolaşırken, gün bazında bu ilişkiye girerseniz, atama bilgisinin altındaki günlerde tekrar ettiğini görürsünüz. Yani bir yedi olur.

Peki yapmak istediğiniz gerçekten bir fact’te zamanla gün bazında, bir başkasında ise hafta kırılımında ilişki kurmaksa ne yapacaksınız. Çözüm yine data source view’de. Hafta bazında kırılımın kolonlarını içeren bir named query yaratın. Aynı zaman tablosundan türetildiği için veri yüklerken tek bir tabloyu yüklemeniz yeterli olacak ve bir update her iki boyutu beraber etkileyebilecektir

Üstelik günlük boyutunuzda haftaID’yi de bulundurup, bu boyutu haftalık fact’le haftaID attribute’ü ve haftalık boyut üzerinden haftalık fact’le de ilişkilendirebilirsiniz. Böylelikle haftalık fact ve günlük fact’ten measure’ları, haftadan aşağıya inmemek koşuluyla aynı raporda yanyana getirebilirsiniz.

Belki biraz karışık oldu ama bu konuyla ilgili kafa yormanız gerekmişse, çözümü anlayacağınızı düşünüyorum. Çözmeniz gereken bir sorunsa ve yazdıklarımı anlamadıysanız, bir yorum bırakın bu yazıma. Anlamadığınız noktaları belirtin. Açıklama yaparım.

Bu yazı SSAS, Tabular Mode ve PowerPivot 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