آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

با ۶ قسمت از سریال آموزشی Power BI صفر تا سکو با شما همراه بودیم. اکنون با قسمت هفتم این سریال در خدمت شما عزیزان هستیم. در این مطلب به آموزش نحوه نوشتن Measure با استفاده از DAX خواهیم پرداخت.

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

نکات کلیدی

برخی از نکات هستند که باید قبل از شروع به یادگیری DAX و نوشتن Measure از آن ها آگاه باشید.

ممکن است شما کاربر اکسل بوده باشید و اکنون تمایل به یادگیری Power BI دارید. باید این نکته را بدانید که در Power BI امکان کار با سلول وجود ندارد. شما تنها می توانید با ستون ها و جداول کار کنید. در واقع فرمول های موجود در DAX از شما به عنوان آرگومان، ستون یا جدول درخواست می کنند.

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

نوشتن Measure در DAX

شما می توانید به ۲ روش ضمنی و صریح به ایجاد مژر بپردازید. با هم به بررسی انواع روش های نوشتن Measure بپردازیم.

ایجاد Measure ضمنی (Implicit Measure)

برای ایجاد مژر ضمنی کافیست فیلد (ستون) مورد نظر را Drag & Drop کرده و در موقعیت مناسب قرار دهید. به طور مثال از ویژوال ها، Card را انتخاب نموده و ستون تعداد (OrderQuantity) را در قسمت Field قرار می دهیم. همچنین با تیک زدن فیلد مورد نظر، معمولا فیلد جای مناسب خود را پیدا می کند (حداقل در مورد Card اینگونه است). همان طور که در تصویر مشاهده می کنید عدد ۶۰k یا همان ۶۰۰۰۰ در تصویر نقش می بندد.

Screenshot 1139 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

در واقع Engine خود مژری برای این ستون ایجاد می کند و عمل تجمیع را برای آن انجام می دهد. زبانه مشخص شده در تصویر زیر را باز کنید.

Screenshot 1141 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

باکسی مطابق تصویر پیش روی شما باز می شود.

Screenshot 1142 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

همان طور که مشاهده می کنید به صورت پیش فرض بر روی SUM قرار گرفته و تعداد فروش را جمع کرده است. شما می توانید آن را بر روی میانگین (AVERAGE)، ماکسیمم (MAXIMUM)، مینیمم (MINIMUM) و … قرار دهید. شما با این کار به ساخت یک مژر ضمنی اقدام می کنید. این روش برای ساخت مژر های ساده مناسب است.

ایجاد Measure صریح (Explicit)

با هم به مرور نحوه نوشتن Measure بپردازیم. Power BI را باز کنید. به دو روش می توانید Measure مد نظرخود را ایجاد کنید. بر روی جدولی که می خواهید مژر در آن ساخته شود کلیک راست کنید و New Measure را انتخاب کنید.

Screenshot 1120 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

یا از تب Modeling، مطابق تصویر New Measure را انتخاب نمایید. توجه داشته باشید در ساخت Measure هیچ تفاوتی نمی کند که آن را در کدام جدول ایجاد کنید.

Screenshot 1124 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

حال در قسمت مشخص شده نام مد نظر خود را قبل از علامت مساوی تایپ نمایید. بعد از علامت مساوی نیز می توانید فرمول مد نظر خود را تایپ نمایید.

Screenshot 1122 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

همان طور که مشاهده می نمایید نام Sales را برای مژر خود انتخاب نموده ایم.

Screenshot 1123 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

حال پس از علامت مساوی می توانیم فرمول خود را نوشته و مژر مورد نظر خود را ایجاد نماییم. به محض اینکه شروع به تایپ نمودید لیستی از توابع پیش روی شما نمایش داده می شود که می توانید تابع مد نظر خود را انتخاب نمایید. با انتخاب هر کدام از توابع توضیحی از آن تابع در کنار آن ظاهر می شود.

همان طور که مشاهده می کنید با تایپ SU لیست تمام توابعی که با این حروف آغاز می شوند به شما نمایش داده می شود. همچنین همان طور که مشاهده می کنید با رفتن به روی هر تابع توضیحات آن ارائه می شود. به طور مثال توضیحات SUM را مشاهده می کنید که جمع مقادیر یک ستون است.

Screenshot 1126 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

توجه داشته باشید که دکمه Enter به معنای اتمام و تایید کد است. پس از دکمه Enter تنها پس از اتمام فرمول استفاده نمایید. برای انتخاب تابع مورد نظر و همچنین رفتن به خط بعد از کلید Tab استفاده نمایید. به محض فشردن کلید Tab بر روی تابع مورد نظر، تابع به طور کامل نوشته شده و راهنمای آن تابع رویت می شود.

این راهنما نوع و ترتیب ورودی ها را نمایش می دهد. همچنین لیستی از ورودی های مجاز در داده های شما را نمایش می دهد که شما می توانید آن را انتخاب نمایید. همان طور که قابل مشاهده است تابع SUM تنها به یک ورودی و آن هم از نوع ستون نیاز دارد.

Screenshot 1127 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

اگر یکی از ستون های عددی را انتخاب نمایید عمل جمع بر روی آن ستون صورت می پذیرد. ما ستون تعداد خرید (Quantity) را به عنوان ورودی به تابع معرفی کردیم. به محض شروع به تایپ نام ستون، لیستی از ستون ها که با آن حروف شروع می شوند به شما نمایش داده می شود.

Screenshot 1128 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

با کلید Tab ستون مد نظرتان را انتخاب نموده و پرانتز را ببندید.

Screenshot 1129 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

حال مژر مورد نظر ایجاد شده و قابل استفاده است. چگونه می توان نتیجه مژر ایجاد شده را مشاهده نمود؟ توجه کنید که نتیجه مژر به صورت فیزیکی در مدل ذخیره نمی شود. نتیجه مژر تنها با ایجاد Context قابل مشاهده است.

شما با استفاده از یک Card می توانید یک Context ایجاد کنید. کافیست Card را انتخاب نموده تا بر روی صفحه پدیدار شود. سپس مژر خود را در قسمت Field قرار دهید. همان طور که مشاهده می کنید عدد ۶۰۰۰۰ بر روی صفحه نقش می بندد که نشان دهنده این است که فروش ما ۶۰ هزار عدد بوده است. Screenshot 1131 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

حال می توانیم یک Slicer بر روی صفحه قرار دهیم و به وسیله آن Context را تغییر دهیم. کافیست Slicer را انتخاب نموده و فیلد مورد نظر خود را در آن قرار دهید. بدین ترتیب لیستی از مقادیر موجود در ستون نمایش داده می شود. ما ستون Year را انتخاب نموده و در اسلایسر قرار دادیم. لیست سال ها به ما نمایش داده شده است.

ما می توانیم به راحتی سال مورد نظر خود را تغییر داده و در واقع Context را تغییر دهیم. از اسلایسر سال را انتخاب می نماییم. در واقع با این کار Context را تغییر داده ایم. همان طور که متوجه شدید عدد تعداد فروش به ۲۲۱۶ تغییر یافته که نشان دهنده فروش در سال ۲۰۱۱ می باشد.

Screenshot 1133 1 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

حال بهتر متوجه مفهوم Context می شوید. پس بار دیگر این نکته قابل ذکر است که مژر با توجه به Context معنا و مفهوم می یابد و با تغییر Context نتیجه آن تغییر می یابد.

نکاتی درمورد نوشتن کدهای DAX

برخی نکات جود دارند که بهتر است آن ها را در نوشتن measure ها رعایت کنید. نکته مهمی که باید به آن توجه شود نوشتن نام جدول قبل از ستون است. همان طور که مشاهده می کنید ابتدا باید نام جدول نوشته شود و سپس نام ستون در براکت قرار گیرد.Screenshot 1134 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

نکته مهم دیگر در مورد نوشتن Measure این است که حتما و حتما باید در نوشتن آن ها از توابع تجمیعی استفاده شود. همان طور که در تصویر مشاهده می کنید سعی کردیم مژری بدون استفاده از توابع تجمیعی بنویسیم که با خطا مواجه شدیم.

Screenshot 1137 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

همان طور که در متن خطا مشاهده می کنید گفته شده که اعداد زیادی برای این ستون در جدول وجود دارند و این مژر قادر به برگرداندن یکی از آن ها به عنوان خروجی نهایی نیست. در متن خطا گفته شده که این اتفاق می تواند هنگامی صورت پذیرد که شما بدون استفاده از تابع تجمیعی (Aggregation Function) از یک ستون استفاده نمایید.

برای رفع این خطا کافیست از یک تابع تجمیعی استفاده کنیم. به طور مثال عمل تجمیع را با استفاده از تابع SUM بر روی این ستون انجام دهیم.

توابع زیادی برای تجمیع در DAX موجود هستند که ساده ترین آن ها عبارتند از:

SUM

AVERAGE

MAX

MIN

COUNT

صریح یا ضمنی؟!

ممکن است این سوال پیش بیاید که مژر های صریح از عملکرد بهتری برخوردارند یا مژر های ضمنی؟ آیا مژر ها را به صورت ضمنی ایجاد کنیم یا نوشتن Measure را به صورت صریح انتخاب کنیم؟ پاسخ این است که تفاوتی در عملکرد آن ها وجود ندارد. مژر های ضمنی مژرهای بسیار ساده ای هستند که نوشتن آن ها به صورت صریح نیز به همان سادگی است!

اما معمولا مژر های مد نظر ما به این سادگی ها نیستند و نمی توان آن ها را به صورت ضمنی ایجاد کرد. به یک مثال ساده توجه کنید.  فرض کنید می خواهیم میزان فروش را به دست آوریم (توجه کنید میزان فروش مد نظر است نه تعداد فروش). این محاسبه از ضرب تعداد فروش رفته در هر فاکتور در قیمت واحد به دست می آید. اگر بخواهیم این مژر را به صورت ضمنی ایجاد کنیم باید به صورت زیر عمل کنیم.

ابتدا یک ستون محاسباتی در جدول Sales ایجاد کنیم و برای هر ردیف این حال ضرب را انجام دهیم. حتما می دانید که ستون محاسباتی بر خلاف مژر باید در جدول مورد نظر ایجاد شود. در واقع اگر قصد ایجاد این ستون در جداول دیگر را داشته باشید به ستون های جدول Sales دسترسی نخواهید داشت. پس مطابق تصویر جدول Sales را انتخاب نمایید و سپس New Column را انتخاب نمایید. یا بر روی جدول کلیک راست کرده و New Column را انتخاب نمایید.

حال می توانید نام مورد نظر خود را نوشته و پس از علامت مساوی فرمول مد نظر خود را بنویسید. همان طور که می دانید ستون های محاسباتی ردیف به ردیف محاسبه می شوند. پس بر خلاف مژر ها نیازی به تجمیع ندارند. به مثال زیر توجه کنید. یک ستون جدید ایجاد کردیم با نام LineAmount که در هر ردیف تعداد در قیمت ضرب شده است.

LineAmount = FactSales[OrderQuantity] * FactSales[UnitPrice]

ستون آخر نشان دهنده نتیجه این فرمول است.

اگر همین فرمول را به عنوان مژر بنویسیم با خطا مواجه خواهیم شد و حتما باید تجمیع بر روی آن صورت پذیرد.

Screenshot 1143 1 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

حال می توانیم با استفاده از این ستون مژر ضمنی خود را ایجاد کنیم. کافیست ستون ایجاد شده را در قسمت فیلد قرار دهیم. همان طور که مشاهده می کنید عدد ۲۹ میلیون دلار در تصویر نمایش داده می شود. در واقع این مژر ضمنی کل اعداد موجود در ستون LineAmount را با هم جمع می کند.

Screenshot 1144 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

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

درست است که تابع SUM تنها و تنها یک ستون را به عنوان وروی می پذیرد اما تابع SUMX می تواند کاستی های این تابع را پوشش دهد. با این تابع دیگر لازم نیست ستون محاسباتی ایجاد کنید، بلکه به صورت زیر عمل می کنید. یک مژر جدید ایجاد می کنید. تابع SUMX یک جدول و یک فرمول به عنوان ورودی دریافت می کند.

Screenshot 1148 1 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

جدول مورد نظر خود (FactSales) را به عنوان آرگومان اول و ضرب تعداد در قیمت را به عنوان فرمول به تابع معرفی می کنیم. در تصویر زیر مژر مورد نظر را مشاهده می کنید. این روش نتیجه ای مشابه روش قبل دارد ولی دارای عملکرد بهتری است.

Screenshot 1150 - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

حال با نحوه نوشتن Measure ها و نکات مربوط به آن ها آشنا شدید. در مطالب آینده بیشتر به مباحث DAX خواهیم پرداخت. اگر پیشنهاد یا انتقادی در مورد این مطالب دارید حتما با ما در میان بگذارید.




6b77990865d588b48d7f55a013cdd7ec?s=300&d=mm&r=g - آموزش Power BI صفر تا سکو : قسمت هفتم ( نوشتن Measure )

حسین وثوقی

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

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

avatar
  عضویت  
به دوستتان خبر دهید.