DAX یا M؟ مساله این است!
تفاوت دو زبان M و DAX در چیست؟ چرا می توانیم یک ستون محاسباتی را از طریق هر دو ایجاد کنیم؟ مزایا و معایب هر کدام چیست؟ برای محاسبه ستون محاسباتی استفاده از کدام یک استفاده کنیم؟
M چیست؟
M یک زبان اسکریپتی پشت صحنه برای Power Query است. M نام غیر رسمی این زبان است. نام رسمی این زبان Power Query Formula Language است که به دلیل طولانی بودن ماکروسافت M را به عنوان نام این زبان انتخاب کرده است که به کلمه Mashup و قابلیت ترکیب، تبدیل و دستکاری داده اشاره دارد. M یک زبان functional است و ساختار آن به صورت زیر است :
M دارای ساختار گام به گام است و معمولا هر خط در این زبان یک گام برای شکل دادن و دستکاری در داده است و قدم بعدی از نتایح قدم قبلی خود برای تغییر داده بهره می گیرد. معمولا دنبال کردن این گام ها کار ساده ایست.
DAX چیست؟
DAX مخفف Data Analysis Expression زبانی برای تحلیل داده است. این زبان بین Analysis Service Tabular ،Power BI و Power Pivot اکسل مشترک است. این زبان که بیشتر برای فرمول نویسی استفاده می شود بر خلاف M، بسیار شبیه ساختار فرمول نویسی در اکسل است. اگر چه DAX فرمول های مشترک زیادی با اکسل دارد اما بسیار قوی تر از اکسل است. نمونه ای از کد نویسی با این زبان را در تصویر مشاهده می کنید.
تعامل با زبان DAX معمولا برای کاربران اکسل بسیار راحت است. این زبان دارای بلاک های کد نیست و معمولا مجموعه ای از توابع و فیلتر ها را در کنار یکدیگر استفاده می کند.
کاربرد ها
M معمولا در سناریو های تبدیل و دستکاری داده به منظور پالایش آن استفاده می شود. به طور مثال در Pivot یا Unpivot کردن داده به کار می رود. نمونه ای از Pivot کردن جدول در محیط Power Query و با استفاده از زبان M در تصویر قابل مشاهده است:
در مقابل DAX برای محاسبات به منظور آنالیز داده به کار می رود. به طور مثال برای محاسبه میزان فروش کالا ها، جمع فروش از ابتدای سال تا امروز یا محاسبه میزان فروش در مقایسه با مدت مشابه سال گذشته و محاسباتی از این دست از DAX استفاده می شود. گزارش زیر که میزان فروش به تفکیک گروه کالا در سال های مختلف را نشان می دهد نمونه ای از کاربرد زبان DAX است:
دو راهی 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 یا اکسل بهره ببرید سعی کنید با هر دوی آن ها آشنا شوید و در هر سناریو بهترین گزینه را انتخاب کنید.
درباره حسین وثوقی
دانش آموخته مهندسی صنایع و مدیریت فناوری اطلاعات دانشگاه تهران، علاقه مند به تحلیل و ارائه راه حل برای مسائل و بهینه سازی راه حل ها هستم ...
نوشته های بیشتر از حسین وثوقی
خیلی عالی بود مطلب مفیدی بود دنبالش نبودم در سایتتون ولی قبلا سوال بود برا خودم
ممنون از لطف شما
یک کلاس دکس گذاشتید من ندیدم پیش نیازش چیه سرچ کردم دوباره به این پیجتون رسیدم
میشه بگید پیش نیازش چیه
من توی پاورپویت کار می کنم داده هامو…
سلام
برای شرکت در دوره آشنایی با Power Pivot در اکسل یا در Power BI کافی است.
تشکر مطلب خیلی جالب بود.
خواهش می کنم …
سلام . از شما تشکر می کنم مطالبتون گویا و کامل بود.
سلام … ممنون از لطف شما
استاد وثوقی ممنون ،خیلی لازم بود ممنون🙏🙏🙏
سلام جناب سجادیان عزیز
ممنون از همراهی همیشگی شما
خوب بود. اما خیلی تکرار در مطلب شما بود. جواب سوالی رو هم که مطرح کردید صریح ندادید.شاید اگر etl رو هم در یک مقاله شرح بدید و لینک کنید به این بهتر بشود
سلام
ممنون از همراهیتون
احتمالا با دقت مطلب رو نخوندید
در مطلب ذکر شده برای دستکاری و تمیزکاری داده از power query استفاده بشه
و برای گزارش های تحلیلی از زبان DAX