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 را در این لینک ببینید.