10 Eylül 2016 Cumartesi

MDX(Multidimensional Expressions) Query








   MDX,  OLAP cube(Multidimensional database)'lerde store edilmiş verileri manipulate etme ve sorgulama için kullanılan bir sorgulama dilidir. İlk olarak 1997 yılında Microsoft tarafından tanıtıldı.

MDX,yapı olarak SQL'e benzemektedir. SQL, sadece 2 boyutlu tablo verilerini  işlemek için tasarlandı. MDX ise 1,2,3 veya daha fazla boyutlu veriyi işleyebilir. MDX deki herbir boyut axis olarak ifade edilir. MDX bir sorguda ilk 2 axis dimension'ı alias olarak column ve row'u kullanılır. 

Aşağıda bazı axis ve axis'lerin alias'ları verilmiştir.
                     
              
MDX'te kullanılan 

  • cube kavramı, sql'de bir tablo'yu
  • level kavramı sql'de bir kolonu
  • Measure kavramı sql'de numerik veya ayrık bir kolonu
  • Member kavramı ise dimensional bir tablonun özel bir satır ve kolonunu 
 ifade eder.

                                                   SQL vs MDX

  • SQL, bir tabloya select atar           
  • MDX bir cube select atar
  • SQL ile bir veya birden fazla satır ve sütun  döner
  • MDX ile 0,1,2,3 daha fazla boyutlu veri döner 
  • SQL veriyi filtreler
  • MDX veriyi slicer eder
  • SQL, Relational database'i sorgular
  • MDX, Multidimensional database'i sorgular
MDX sorgu dili ile olap cube gönderilen sorgu, cube'in verisini içeren multidimensional hücre setini(cellset) sonuç olarak döner

MDX'i kullanma, Multidimensional düşünmeyi gerektirir.
  • Dimension'ların  hiyerarşileri vardır.
  • Hiyerarşilerin level'ları vardı.
  • Level'lar ise member'lara sahiptir. 




Aşağıda görüldüğü üzere örnek bir mdx sorgusu.


Yukardaki sorgunun çıktısı aşağıda gösterilmektedir.


MDX Syntax


   1- Cube'teki tüm measure'ların toplamı herhangi bir dimension kırılımı olmadan getirme

   Syntax:      Select From [Your Cube Name] ; 


   Örnek:       Select From [Adventure Works]


   2-Cube'teki tüm müşterilerin adını kolon olarak getirme


  Syntax:  Select Dimension.Member on Column From [OLAPCubeName ]

                  veya

                  Select Dimension.Member on 0 From [OLAPCubeName ]

   Örnek:   Select [Customer].[Customer].[Customer] on 0
                  From [Adventure Works];
                  veya
                 Select [Customer].[Customer].[Customer] on columns 
                 From [Adventure Works];

Yukardaki 2 sorgu da aşağıda görüldüğü üzere aynı sonucu döner. 1. sorguda axis 0 kullanılmış
2. sorguda axis 0'ın alias'ı olan columns kullanılmıştır. yani aynı ifadeler.

Yukardaki sorgular, herbir müşteriyi sütun olarak ifade eder ve her bir müşterinin 
measure'larının toplam sonucunu verir.


3-Cube'teki her bir müşterinin internet satış fiyatlarını getirme

Syntax: Select [Measure] on Columns,[Dimension].[Members] on Rows From [Cube Name];

              veya

              Select [Measure] on Rows,[Dimension].[Members] on Columns From [CubeName]; 

Örnek: Select [Measures].[Internet Sales Amount] on Columns,[Customer].[Customer].                      [Customer] on Rows
             From [Adventure Works];

Sorgunun çıktısı aşağıda gösterilmetedir.




4-.members hiyerarşi level'ını kullanma

Eğer bu hiyerarşi levelı kullanılırsa altındaki tüm değerleri getirir. Tüm boyutların toplamınıda dahil.

Syntax:   Select [Dimension].[Hierarchy].members on Columns from CubeName
                
                veya 
                
                Select [Dimension].[Hierarchy].[Level].members on Columns from CubeName

Örnek:   Select [Measures].[Internet Average Sales Amount] on Columns,
               [Product].[Category].members on Rows
               From [Adventure Works];





5-.Children hiyerarşi level'ını kullanma

Eğer bu hiyerarşi levelı kullanılırsa altındaki tüm değerleri getirir. Tüm boyutların toplamınıda hariç.

Syntax:   Select [Dimension].[Hierarchy].children on Columns from CubeName
                
                veya 
                
                Select [Dimension].[Hierarchy].[Level].childrenon Columns from CubeName

Örnek:   Select [Measures].[Internet Average Sales Amount] on Columns,
               [Product].[Category].children on Rows
               From [Adventure Works];





5-Tuple

Tuple, dimension member'larını kullanarak cube'te özel bir yeri ifade etmek için kullanılır.Dimension member'ları "{}" içine yazılır.

Örnek:   select {[Date].[CY 2005], [Date].[CY 2006] , [Date].[CY 2007]} on rows,
               [Measures].[Internet Sales Amount] on columns from
               [Adventure Works];




Daha fazla ayrıntılı örnek için aşağıdaki linkleri ziyaret edebilirsiniz.

http://www.codeproject.com/Articles/710387/Learn-to-Write-Custom-MDX-Query-First-Time

http://support.sas.com/documentation/cdl/en/mdxag/59575/HTML/default/viewer.htm#a002423079.htm

Şükrü ERGÜNTOP

Author & Editor

Bilecik Şeyh Edebali Üniversitesi Bilgisayar Mühendisi mezunuyum 2015 yılından beri Sigorta Bilgi ve Gözetim Merkezinde İş Zekası alanında çalışmaktayım

0 yorum:

Yorum Gönder