1. Anasayfa
  2. SQL Server

SSAS Tabular Mode’da USERELATIONSHIP Fonksiyonunda Önemli Bir Kısıt


0

Bu makalemizde SSAS Tabular Mode üzerinde ölçütleri hesaplamada kullanılan yardımcı fonksiyonlardan USERELATIONSHIP fonksiyonunun bir kısıtı üzerinde duracağız. Bu kısıt dikkate alınmadan yaptığımız geliştirmelerde bazen ciddi problemlerle karşılaşabilmekteyiz. Bu yüzden yol gösterici olması açısından sizlerle karşılaştığımız bu durumu paylaşmak istedik.

Bilindiği üzere USERELATIONSHIP fonksiyonu Tabular mode üzerinde oluşturulan bir ölçütün pasif olan bir ilişkiye göre davranış göstermesi gerektiğini belirtmek için kullanılır.

Detaylı Bilgi için: http://msdn.microsoft.com/en-us/library/hh230952.aspx

Anlatımı bir senaryo üzerinden ilerletmenin daha faydalı olacağını düşünerek makalenin devamında bu Resim-de ilerleyeceğiz.

Örneğin bir Performans Ölçüm Sistemi’miz olduğunu varsayalım ve bu sistem satış ekibimizin yaptıkları faaliyetleri dikkate alarak bazı KPI ölçümlerini gerçekleştiriyor olsun. Bunun içerisinde aşağıdaki gibi bir model olsun


Resim-1 : Performans Ölçüm Sistemi Modeli

Görüleceği üzere ‘SEK04’ tablosu ile ‘Hedef Atamaları’ tablosu arasında iki tane ilişki bulunuyor. Bunlardan aktif olan ilişki 1. Tip Satış Elemanı, pasif olan ilişki ise 2. Tip Satış Elemanı için oluşturulmuş olsun. Senaryomuzda bu satış elemanlarının birlikte çalıştıkları işler var ve bunların yaptıkları işlerdeki performanslarının ayrı ayrı ölçülmek istendiğini varsayalım.


Resim-2 : Pasif İlişki


Resim-3: Aktif İlişki

‘Hedef Atamaları’ tablosunda aylık gerçekleştirmeleri gereken hedeflerin tanımlandığını ve ‘Takvim’ tablosu ile ilişkisi bulunmaktadır.

SEK04 hedefinin üzerinde [Toplam Taahhüt Tutarı] adında bir ölçüt yer alsın ve her iki rol için de aşağıdaki gibi hesaplansın;

Toplam Taahhüt Tutarı (1):=CALCULATE(

SUM([Taahhüt Tutarı]),

USERELATIONSHIP(

SEK04[GoalAssignmentKey_SY],

‘Hedef Atamaları'[GoalAssignmentKey]

)

)

1. Tip Satış Elemanı için Toplam Taahhüt Tutarı Ölçütü

 

Toplam Taahhüt Tutarı (2):=SUM([Taahhüt Tutarı])

2. Tip Satış Elemanı için Toplam Taahhüt Tutarı Ölçütü

Bu durumda Tabular Model projenizde Toplam Taahhüt Tutarı (2) için aşağıdaki gibi doğru sonucu alıyor iken Toplam Taahhüt Tutarı (1) için aşağıdaki hatayı alıyor olacaksınız.


Resim-4

HATA:

ERROR – CALCULATION ABORTED: USERELATIONSHIP function cannot be used while querying table ‘SEK04’ because of the row level security defined on table ‘Takvim’.

Bu hata şu koşullar altında gerçekleşir;

  1. Tabular Mod projenizde Dynamic Security Model dediğimiz satır bazlı güvenlik rolleri uygulamışsınızdır
  2. SEK04àHedef Atamaları àTakvim gibi 3 hiyerarşiden oluşan bir ilişki modeline sahipsiniz
  3. Raporunuzu görmek isteyen kullanıcı Administrator rolüne sahip değildir

Ne yazık ki bu problemle ilgili MSDN üzerinde bir kaynak bulunamadı ve internet üzerinde de aşağıdaki link haricinde ciddi bir kaynak bulunmuyor. Bu Resim-de bir hata ile karşılaştığınızda modelinizde değişikliğe gitmenizi gözden geçirmeyi tavsiye ederim.

http://cwebbbi.wordpress.com/2013/05/10/userelationship-and-tabular-row-security/

Bu probleme çözüm önerisi olarak;

  1. Söz konusu SEK04 tablosunu modelinizde çoklayın (SEK04 ve SEK04_SY gibi aynı kaynaktan beslenen fakat model içerisinde iki ayrı tablo olacak Resim-de)
  2. Daha sonra her iki SEK04 ve SEK04_SY tabloları ile Hedef Atamaları tablosu arasında iki ayrı aktif ilişki kurun
  3. Taahhüt Tutarı (1) ölçütünü aktif ilişki üzerinden SEK04 tablosunda
  4. Taahhüt Tutarı (2) ölçütünü aktif ilişki üzerinden SEK04_SY tablosunda oluşturunuz


Resim- 5 : Yeniden Düzenlenmiş Performans Ölçüm Sistemi Modeli

Bu durumda modelinizde değişikliğe gitmiş olacaksınız ve modelinizin karmaşıklığına bağlı olarak size iş yükü çıkarabilir fakat şimdiye kadar bu hata ile ilgili farklı bir çözüm önerisine rastlanmadı.

Sonuç olarak USERELATIONSHIP fonksiyonunu kullanırken modelinizin karmaşıklığını göz önünde bulundurmanızda fayda bulunmaktadır. Özellikle ikiden fazla kademeli ilişki yapısına sahip bir modeliniz varsa ve satır bazlı güvenlik modelini kullanacaksanız yukarıdaki problemle karşılaşmanız oldukça mümkündür. Buna çözüm olarak da modelinizde değişikliğe gitmeniz gerekecektir.

Yol gösterici makalesi için Chriss Webb‘e teşekkür ederim.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir