Veri ambarında ve analysis services kübünde many to many dimension uygulaması


Fact tabloları ile boyutlarımız arasında çoğunlukla ‘regular’ ilişkiler vardır. Ama bazen regular ilişkiler yeterli olmaz, farklı yaklaşımlar gerekir. Bu yazıda o ilişki tiplerinden biri üzerinde duracağım: Many to many dimensions yani çoklu ilişkili boyutlar.

Örneği basit alacağız ki konuya odaklanabilelim. Bu yüzden anlatacağım örnekte slowly changing dimension gibi kavramları da yok sayacağım. Bunun bütüncül bir örnek olmadığını unutmayın. Tüm amacımız many to many dimension’ın net bir örneğini görmenizi sağlamak.

Öncelikle ele alacağımız problemi ifade edelim: Bir hastane için hastalara yapılan işlemleri ve bunların tutar bilgilerini analiz etmek istiyoruz. Analizimizin önemli bir konusu da işlemi hangi doktor ya da doktorların yapmış olduğu. Tek bir doktor da işlem yapabilir bir grup doktor da. Yani işlemlerle hastalar arasında regular bir ilişki varken işlemlerle doktorlar arasında çokluya çoklu (many to many) bir ilişki var.Kurmamız gereken veriambarının basit tasarımı yukarıdaki gibi. Her hastanın bir id’si ve adsoyadı var. Her doktorun da bir id’si ve ad soyadı var. Hasta işlemleri fact’i hasta boyutuna doğrudan bağlı. Bu fact’te doktor bilgisini ise tutmuyoruz. Yani hangi doktorun işlemi yaptığına dair bilgi işlem fact’inde yok. Bunun yerine işlem facti ile doktor boyutu arasına ikinci bir fact olacak olan bir ara köprü tablosu koyuyoruz. Bu tablo hem işlemle hem doktorla ilişkili ve iki foreign key kolonunu birlikte primary key olarak kullanıyor.

Şimdi bu tablolara örnek kayıtlar ekleyelim. Ben 1. Doktor1, 2. Doktor2, 3.Doktor3 olarak doktor kayıtlarını ve 1.Hasta1, 2.Hasta2, 3.Hasta3 olarak hasta kayıtlarını ekledim.

İşlem tablosunun verileri şöyle:

İşlemID / HastaID / Tutar
1 1 100
2 2 200
3 3 300
4 1 500
5 1 800

İşlem Doktor’un verileri ise şöyle (Facthastadoktor isimli tablo. Aslında işlemdoktor deseymişim daha uygun bir isim olacakmış. İdare edin artık 🙂 ):

İşlemID / DoktorID
1 1
2 2
3 3
4 1
4 2
5 1
5 2
5 3

İlk 3 işlemi birer doktor yapmış. 4 nolu işlem Hasta1’e 2 doktor tarafından yapılmış. 5 nolu işlem Hasta3’e 3 doktor tarafından yapılmış.

Şimdi bunun küp sisteminde görünümüne bakalım. İki temel yer var bakacağımız: Dimension usage ve datanın görünümü: Gördüğünüz gibi ara tablomuz da bir measure group olarak yapılandırılmış. Bunun da bir fact olduğunu söylemiştik. Ayrıca hasta işlem fact’indeki işlem id de bir boyut olarak yapılandırılmış. Bu özel bir boyut. Verisini factteki bir kolondan alıyor. Buna Kimball degenerate dimension, Microsoft ise fact dimension der. Daha önceki yazılarımda bahsettiğimi hatırlıyorum. Kısaca söylemek gerekirse, bağlı olduğu tüm attribute’ler başka boyutlara dağıldığı ve fact satırlarıyla ilişkisi de bire bir ya da birebire yakın olduğu için bu özel boyutun verisini fact’te bırakırız.
Bizim için şu an kritik olan nokta, dim doktor ile fact hasta işlem arasında fact hasta doktor measure grubu üzerinden many to many ilişki oluşturulmuş olması.
Peki böyle bir küp bize nasıl bir veri görünümü sunuyor:Genel toplamların doğru olduğuna da dikkat edin lütfen.
Doktor1’in dahil olduğu hasta1 tutarları 1400. Ama doktor1 zaten hasta1’in tüm tutarlarına dahil olmuştu. Bu yüzden hasta1’in toplam tutarı da 1400.

Bu veri ambarından küp oluştururken ne yapmak gerekli?

AS projenizde data source ve data source view’i oluşturun. Dört tabloyu da alın view’e. Sonra new cube diyerek wizard’ı başlatın. Fact olarak her iki tabloyu seçin. Wizardın kalan adımlarında hiçbir değişiklik yapmayın. (Wizard bittikten sonra fact boyutunun isminiuygun bir şekilde değiştirebilirsiniz.)

Bu kadar. Sonuç yukarıdaki gibi olacaktır.

Bu yazı SSAS, Tabular Mode ve PowerPivot, Veri ambarı içinde yayınlandı ve olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin.

2 Responses to Veri ambarında ve analysis services kübünde many to many dimension uygulaması

  1. Fatih Özdemir dedi ki:

    Hocam, Microsoft daha bu Pivot kullanımına yeni geçmiş olması c# programcısı olarak çok üzüyor. Oysaki DevX.NET Pivot unu aşa yukaraı 2006 dan beri kullanıyorum Delphici arkadaşlar bunun 2000 başlarında geldiğini söylediler. Bu iş bukadar zormu diye merak ettiğimde. Devx sin pivot DLL ini parçaladığımda okadarda zor olmadığını farkettim. neden bu kdar geç kalındı. Birde Devx te programı kullanıcıya verdiğinizde kullanıcı gelen datalardaki herhengi bir columu sürükle bırak metoduyla istediği gibi çapraz raporlar oluşturabiliyor.
    Hocam neden bu kadar microsoft geç kaldı bu iş için?.

    • Mustafa Acungil dedi ki:

      Mustafa Acungil
      Makaledeki içerik SQL 2005’te yapılabiliyordu. 2000’de de veri ambarı katmanında yapılabilirdi. Ama küp tarafında destekleniyor muydu onu hatırlamıyorum doğrusu. SSAS tarafında 2000’den 2005’e geçişte önemli yapısal değişiklikler oldu.

      Aslın…da Microsoft çok da geç kalmış sayılmaz. Zaten OLAP kavramı 1990’larda ortaya çıktı. Microsoft İsrail’li bir firmayı bünyesine katarak Analysis Services’ı SQL Server’a dahil etti. 2000’de önemli gelişmeler başladı. Ama Microsoft’un iş zekası alanındaki yatırımlarının meyvelerini almaya başladığı asıl sürüm SQL 2005 oldu.

      Son birkaç yıl içinde IBM’in Cognos’u, Oracle’ın Hyperion’ı satın alması gerekirken, Microsoft’un artık tamamen yerlileştirdiği SSAS ve geliştirdiği SSIS, SSRS ve SharePoint ürünleriyle yola devam edebildiği düşünülürse, Microsoft ana oyunculara karşı pek de geride kalmış sayılmaz.

      Daha küçük oyuncularda ise, belirli alanlara yönelip onları yaşam kaynağı yapabilen oyuncular, belirli konularda belirli süreler öne geçebiliyorlar. Bu biraz Microsoft’un (ve benzer büyük yazılım evlerinin) ürünlerinin devasa çeşitliliğinin ve sürüm desteği vb gibi birtakım piyasa zorluklarının etkisinde hafif hantallaşmasından kaynaklanıyor.

      Bence normaldir.

      Not: Aslında bence biraz geride kalınan bir nokta, Silverlight’ın kullanımıyla daha görsel rapor unsurlarının ürünlere yerleşik olarak gelmeye başlaması iş zekası alanında…

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