DAX یا M؟ مساله این است!

تفاوت دو زبان M و DAX در چیست؟ چرا می توانیم یک ستون محاسباتی را از طریق هر دو ایجاد کنیم؟ مزایا و معایب هر کدام چیست؟ برای محاسبه ستون محاسباتی استفاده از کدام یک استفاده کنیم؟

 

M چیست؟

M یک زبان اسکریپتی پشت صحنه برای Power Query است. M نام غیر رسمی این زبان است. نام رسمی این زبان Power Query Formula Language است که به دلیل طولانی بودن ماکروسافت M را به عنوان نام این زبان انتخاب کرده است که به کلمه Mashup‌ و قابلیت ترکیب، تبدیل و دستکاری داده اشاره دارد. M  یک زبان functional است و ساختار آن به صورت زیر است :

 

M یا DAX

M دارای ساختار گام به گام است و معمولا هر خط در این زبان یک گام برای شکل دادن و دستکاری در داده است و قدم بعدی از نتایح قدم قبلی خود برای تغییر داده بهره می گیرد. معمولا دنبال کردن این گام ها کار ساده ایست.

DAX  چیست؟

DAX مخفف Data Analysis Expression زبانی برای تحلیل داده است. این زبان بین Analysis Service Tabular ،Power BI و Power Pivot اکسل مشترک است. این زبان که بیشتر برای فرمول نویسی استفاده می شود بر خلاف M، بسیار شبیه ساختار فرمول نویسی در اکسل است. اگر چه DAX فرمول های مشترک زیادی با اکسل دارد اما بسیار قوی تر از اکسل است. نمونه ای از کد نویسی با این زبان را در تصویر مشاهده می کنید.

DAX یا M

تعامل با زبان DAX معمولا برای کاربران اکسل بسیار راحت است. این زبان دارای بلاک های کد نیست و معمولا مجموعه ای از توابع و فیلتر ها را در کنار یکدیگر استفاده می کند.

کاربرد ها

M معمولا در سناریو های تبدیل و دستکاری داده به منظور پالایش آن استفاده می شود. به طور مثال در Pivot یا Unpivot‌ کردن داده به کار می رود. نمونه ای از Pivot کردن جدول در محیط Power Query و با استفاده از زبان M در تصویر قابل مشاهده است:

DAX یا M

در مقابل DAX برای محاسبات به منظور آنالیز داده به کار می رود. به طور مثال برای محاسبه میزان فروش کالا ها، جمع فروش از ابتدای سال تا امروز یا محاسبه میزان فروش در مقایسه با مدت مشابه سال گذشته و محاسباتی از این دست از DAX استفاده می شود. گزارش زیر که میزان فروش به تفکیک گروه کالا در سال های مختلف را نشان می دهد نمونه ای از کاربرد زبان DAX است:

DAX یا M

دو راهی DAX یا M؟

مهمترین چالش در استفاده میان این دو زبان در ایجاد ستون های محاسباتی به میان می آید. ایجاد ستون محاسباتی با هر دوی این زبان ها امکان پذیر است و سوال اینجاست که کدام یک راه حل بهتری برای ایجاد ستون های محاسباتی است؟ به طور مثال برای ایجاد ستون محاسباتی نام و نام خانوادگی کارمند (که به صورت جدا در داده ها وجود دارند) بهتر است این ترکیب را در M‌ انجام دهیم یا در DAX؟

برای پاسخ به این سوال باید از خودمان بپرسیم برای بریدن پنیر از چاقو استفاده کنیم یا از ساطور؟ البته که با هر دوی آن ها می توان پنیر را برید. اما بهتر است از چاقوی مناسب برای بریدن پنیر استفاده کنیم و از ساطور برای قطعه کردن گوشت!

کدام یک بهترین راه حل است؟

پاسخ این سوال مثل خیلی از سوالات دیگر یک جمله است: بستگی دارد!

اگر قصد چسباندن دو ستون به یکدیگر را دارید (مثل نام و نام خانوادگی) بهتر است از M استفاده کنید چرا که این محیط برای اعمال ETL بسیار مناسب و بهینه است. علاوه بر این شما می توانید داده را در این محیط داده را دستکاری و پالایش کنید و دقیقا همان داده ای که لازم دارید را ساخته و مهیای گزارش گیری شوید. اما اگر قصد محاسباتی مثل مقایسه دوره های زمانی یا محاسبه مقدار از ابتدای سال تا امروز را دارید بهتر است وارد کد نویسی های پیچیده و سنگین M نشوید در حالیکه تمامی این توابع لازم از پیش برای این منظور در زبان DAX در اختیار کاربر قرار گرفته است.

در واقع باید گفت در انتخاب این دو زبان بهترین وجود ندارد. بهترین با توجه به نیاز کاربر تعیین می شود. به طور کلی باید گفت برای هر گونه پردازش و دستکاری و تمیز کاری داده بهترین گزینه زبان M و محیط Power Query است و برای هر گونه محاسبات تحلیلی بهترین گزینه زبان DAX است. DAX موتور تحلیلی Power BI است و برای مقاصد تحلیلی بی نظیر عمل می کند. حتی اگر برنامه نویس بسیار خوبی باشید هیچ گاه بهتر از توابع DAX نمی توانید تمامی ملاحظات تحلیلی و فیلتری را با کد نویسی در M اعمال کنید.

M موتوری برای دستکاری و پالایش داده است. با استفاده از M می توانید تمامی تغییرات و تبدیل ها و تمیز کاری ها را قبل از بارگذاری داده در مدل خود انجام دهید و داده کاملا آماده تحلیل را بارگذاری کنید. می توایند به جای بارگذاری ۳ جدول کالا، زیر گروه کالا و گروه کالا این ۳ جدول را در محیط Power Query به یک جدول تبدیل کنید و تنها یک جدول را در مدل خود بارگذاری کرده و مدل خود را اصولی تر طراحی کنید. بارگذاری همه این جداول به صورت جداگانه باعث هدر رفت مموری خواهد شد.

کدام را یاد بگیریم؟

بدون تردید هر دو! M‌ زبانی برای ETL است (Extract, Transform, Load) و DAX زبانی برای تحلیل. اگر می خواهید از تمامی مزایای Power BI‌ یا اکسل بهره ببرید سعی کنید با هر دوی آن ها آشنا شوید و در هر سناریو بهترین گزینه را انتخاب کنید.

حسین وثوقی

حسین وثوقی

دانش آموخته مهندسی صنایع و مدیریت فناوری اطلاعات دانشگاه تهران، علاقه مند به تحلیل و ارائه راه حل برای مسائل و بهینه سازی راه حل ها هستم ...
حسین وثوقی

حسین وثوقی (همه)

مطالب مرتبط

8
دیدگاه بگذارید

avatar
4 Comment threads
4 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
هاشمشاپورحسین وثوقیمحدثهصفارپور Recent comment authors
  عضویت  
جدید ها قدیمی ها بیشترین رای
به دوستتان خبر دهید.
صفارپور
مهمان
صفارپور

خیلی عالی بود مطلب مفیدی بود دنبالش نبودم در سایتتون ولی قبلا سوال بود برا خودم

محدثه
مهمان
محدثه

یک کلاس دکس گذاشتید من ندیدم پیش نیازش چیه سرچ کردم دوباره به این پیجتون رسیدم
میشه بگید پیش نیازش چیه
من توی پاورپویت کار می کنم داده هامو…

شاپور
مهمان
شاپور

تشکر مطلب خیلی جالب بود.

هاشم
مهمان
هاشم

سلام . از شما تشکر می کنم مطالبتون گویا و کامل بود.