X
تبلیغات
رایتل

کاواندیش

در این وبلاگ خلاصه مطالعات یا تجارب جالب توجه خود در مورد هوشمندی کسب و کار(BI) را منتشر خواهم کرد.

چهارشنبه 5 مرداد‌ماه سال 1390 ساعت 12:15 ب.ظ

آشنایی با MDX

MDX یک زبان پرس و جو برروی داده­ های ذخیره شده در کیوب­ های OLAP می­ باشد. این زبان در ابتدا توسط مایکروسافت در سال 1997 مطرح گردید و امروزه بسیاری از ارائه­ دهندگان محصولات OLAP از آن پشتیبانی می­ کنند از جمله Oracle، MicroStrategy، SAS، SAP، Teradata، JasperSoft، Cognos.


علی رغم شباهت ظاهری بین این زبان و زبان T-SQL که برای پرس و جو بر روی پایگاه داده رابطه­ ای استفاده می­ شود، این دو زبان کاملاً از یکدیگر مستقل هستند. همچنین اگرچه می­ توان برخی پرس و جوهای MDX را به T-SQL تبدیل کرد ولیکن معمولاً نتیجه آن حتی برای پرس و جوهای ساده ترکیبی پیچیده از دستورات T-SQL خواهد بود.

به هر حال برای آشنایی با این زبان، مقایسه آن با T-SQL می­ تواند نقطه شروع خوبی باشد. یک دستور ساده T-SQL را در نظر می­گیریم:


Select column1, column2, …, column from table


یک دستور ساده MDX نیز فرمت زیر را دارد:


Select axis1 on columns, axis2 on rows from cube



برخی از عبارت­ها بسیار آشنا هستند همانند select و from و در واقع در MDX هم همان کارکرد را دارند. Select نشان­ دهنده اجرای یک پرس و جو است و from منبع داده را نشان می­ دهد. در T-SQL منبع جداول یک پایگاه داده هستند و در MDX منبع یک کیوب است.


اما تفاوت عمده­ ای بین دو پرس و جوی بالا وجود دارد. نتیجه یک پرس و جوی T-SQL اساساً یک نمای رابطه­ ای دو بعدی شامل سطرها و ستون­ هاست. تمامی سطرها ساختار مشخص شده توسط ستون­ها را دارند و هر ستون می­ تواند نوع داده مخصوص خود را داشته باشد. حال آنکه MDX محدود به دو بعد نمی­ باشد. نتیجه یک پرس و جو می­تواند صفر، یک، دو، سه و ... بعد یا محور داشته باشد( اگرچه نمایش بیش از سه بعد در صفحه نمایش امکان­ پذیر نیست). همچنین در پرس و جوی MDX، علاوه بر ساختار ستون­ها بایستی ساختار سطرها نیز مشخص گردد. اینکار با مشخص کردن مجموعه­ های چند تایی از اعضای هریک از ابعاد(Dimension) مدنظر از کیوب انجام می­ شود که اصطلاحاً به آن tuple می­گویند.


به عنوان مثال در صورتیکه کیوب ما با نام Sales، شامل دو بعد به نام­های Years(سال­ها) و Regions(مناطق جغرافیایی) باشد، می­ توان دستور زیر را نوشت:


select Years.members on columns,

Region.members on rows

from Sales

که خروجی مشابه زیر را تولید می­ کند:


1996

1995

1994

 

400.000

200.000

120.000

N. America

70.000

30.000

-

S. America

310.000

160.000

95.000

Europe

 

با توجه به دستور مربوطه، بر روی ستون ها مقادیر سال های موجود و برروی سطرها عناوین مناطق دیده می شود. ولیکن اعداد نمایش داده شده چه هستند؟ این مقادیر در واقع همان سنجه(Measure) های تعریف شده در کیوب هستند که در صورت نام نبردن از یک سنجه خاص، سنجه پیش فرض(Default Measure) کیوب نمایش داده می­ شود که در کیوب فوق می­تواند میزان فروش باشد.


تفاوت دیگر آنکه، جهت اعمال شرایطی برای پرس و جو در زبان T-SQL از دستور where استفاده می­ گردید. این عبارت در MDX نیز وجود دارد ولیکن کارکردی کاملاً متفاوت دارد. این دستور در زبان MDX عملیات برش(Slicing) کیوب را انجام می­ دهد که طی آن بخشی از کیوب با مشخص کردن عناصر هریک از ابعاد جدا می­شود.



در مقایسه با T-SQL که در آن where به معنای فیلتر کردن سطرها با شرط مشخصی است، این دستور در MDX، محاسبه سنجه را تحت تاثیر قرار می دهد.


به عنوان مثال دستور زیر مشابه دستور قبلی میزان فروش در سال های مختلف هریک از مناطق را نشان می دهد با این تفاوت که محصولات گروه کامپیوتر مد نظر بوده اند:


select Years.members on columns,

Region.members on rows

from Sales

where (Product.Computers)


علاوه بر تفاوت های ذکر شده در این مطلب، دستورات MDX دنیای جدیدی از امکانات را در اختیار می گذارند که دستیابی به آنها توسط دستورات T-SQL غیرممکن یا بسیار دشوار است.


آموزشی مختصر در مورد MDX را در این لینک ببینید.