کاواندیش

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

کاواندیش

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

XMLA

XMLA استانداردی است که امکان ارتباط بین برنامه های مشتری با منابع داده چند بعدی را فراهم می کند. این استاندارد در سال 2000 توسط مایکروسافت ارائه گردید و به فاصله ای اندک، کمپانی های SAS و Hyperion به انجمن XMLA پیوستند و در حال حاضر بیش از 25 شرکت حامی این انجمن هستند.


در توسعه XMLA از استاندارهای مستقل موجود استفاده شده است شاملHTTP، SOAP و XML. زبان پرس و جو نیز MDX می باشد که استاندارد پرس و جوهای چند بعدی می باشد.

محصولات مایکروسافت این استاندارد را به عنوان پروتکل اصلی خود برای تمامی ارتباطات با Analysis Services مورد استفاده قرار می دهند. به عنوان مثال، در استفاده از AMO و ADOMD.NET نیز درخواست ها به دستورات XMLA تبدیل می شوند.


این استاندارد شامل دو متد اصلی است: Discover و Execute. متد Discover جهت دریافت اطلاعات و متادیتا استفاده می شود؛ از قبیل فهرستی از منابع داده، کیوب ها، ابعاد، نقش ها و .... متد Execute به برنامه های کاربردی اجازه می دهد تا فرمان اجرای دستورات متناسب با سرور ارائه دهنده را صادر کنند. این دستورات می توانند دستورات DML یا DDL باشند.

مکانیزم های مدیریت خطا نیز در این استاندارد لحاظ شده اند.


دستور زیر نمونه ای از دستورات Discover می باشد که لیست کیوب های موجود را برمی گرداند:


<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
  <RequestType>MDSCHEMA_CUBES</RequestType>
  <Restrictions />
  <Properties />
</Discover>

 

و قطعه کد زیر یک دستور Execute را نشان می دهد که دستور مورد نظر آن تحت <Statement> آورده شده است:


<soap:Envelope>

 <soap:Body>

  <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">

   <Command>

    <Statement>SELECT Measures.MEMBERS ON COLUMNS FROM Sales</Statement>

   </Command>

   <Properties>

    <PropertyList>

     <DataSourceInfo/>

     <Catalog>FoodMart</Catalog>

     <Format>Multidimensional</Format>

     <AxisFormat>TupleFormat</AxisFormat>

    </PropertyList>

   </Properties>

  </Execute>

 </soap:Body>

</soap:Envelope>

 

در محیط SQL Server Management Studio با انتخاب کردن دکمه Script در پنجره پردازش کیوب یا Dimension می توان کد XMLA متناظر را مشاهده نمود و جهت اجرای انواع عملیات از آن استفاده کرد.


پی نوشت: در این نوشتار فرض بر آن بوده که خواننده مطلب با استانداردهای مرتبط از قبیل XML، SOAP و غیره آشنایی کافی دارد و از ارائه توضیحات آنها خودداری شده است. همچنین با توجه به فراگیر بودن علائم اختصاری ذکر شده، عناوین کامل آورده نشده است.

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