زبان دکس (DAX) در Power BI
این پست زیرمجموعه دوره آموزش رایگان Power BI میباشد، که به آموزش زبان دَکس (DAX) در Power BI میپردازد. در صورتی که تمایل دارید کل دوره را مشاهده کنید، از این لینک استفاده کنید. در ضمن اگه حال و حوصله خوندن متن ندارید، میتونید به جای خوندن متن، از ویدیو آخر این پست استفاده کنید.
پیشنیاز این آموزش، مطالعه پست آموزش نرمافزار Power BI میباشد.
زبان دکس چیه؟
زبان دکس یک زبان فرمول نویسی مخصوص Power BI و چندتا دیگه از محصولات مایکروسافت هست که خیلی به زبان فرمول نویسی اکسل شباهت داره. دکس مخفف Data Analysis Expressions هست و از این زبان میتونید داخل پاور بی آی برای ایجاد شاخصها (Measure) و ستونهای محاسباتی جدید استفاده کنید. تعریفی که من ارائه دادم بنظرم کافیه و بهتره از تئوری بیرون بیایم و بریم سراغ بحثهای عملی، ولی برای تعریف مفصلتر از این لینک که از وبسایت مایکروسافت است، میتونید استفاده کنید.
شروع کار: وارد کردن دیتا
در اولین مرحله به دیتا نیاز داریم، اگه خودتون دیتا دارید که هیچی وگرنه از این لینک میتونید دیتایی که من استفاده کردم را دانلود کنید. دیتا در مورد اطلاعات فروش کوکی (یک نوع شیرینی) در یک فروشگاه هست، این اطلاعات شامل نام مشتری، تاریخ خرید، میزان خرید، هزینه به ازای یک سفارش و تعدادی ستون دیگه هست. دادهها داخل سه تا فایل اکسل هستند که باید هر سه تا را وارد Power BI کنیم. اگه نمیدونید چطور دیتا را وارد Power BI کنید حتما اول آموزش نرمافزار Power BI مطالعه کنید و بعد دوباره به این پست برگردید.
همونطور که گفتم دیتا شامل سه تا فایل هست، جدول Cookie_Types انواع کوکیها را با یک سری ستون دیگه درون خودش قرار داده، جدول Customers اطلاعات مشتریها و جدول Orders هم اطلاعات سفارشهای مشتریها را در برداره. جدولهای Customers و Orders از طریق فیلد Customer ID با هم در ارتباط هستند، این یعنی در جدول Orders از طریق همین کد مشتری (Customer ID) متوجه میشیم که هر سفارش مربوط به چه مشتری هست. این ارتباط باید در Power BI هم برقرار بشه، برای همین به قسمت Model View برید و فیلد Customer ID جدول Orders به فیلد Customer ID جدول Customers متصل کنید (منظورم از متصل کردن Drag و Drop کردنه). اگه هم این اتصال برقرار بود (که معمولا هم هست) لازم نیست کاری کنید:
ایجاد اولین شاخص
یکی از کاربردهای زبان دکس ایجاد شاخص یا Measure است، مثلا فرض کنید شما قصد دارید مجموع درآمد خودتون را از فروش کوکی حساب کنید، اگه به قسمت Data View برید و به جدول Orders دوباره نگاه کنید، ستون Revenue را میبینید، این ستون درآمد ناخالص حاصل از هر سفارش را نشون میده. الان قصد داریم با DAX از این ستون مجموع بگیریم. برای این کار به تب Report View برمیگردیم و از قسمت Data در سمت راست روی جدول Orders کلیک کنید، حالا از تب Home روی New Measure کلیک کنید:
بعد از کلیک، قسمتی برای نوشتن فرمول براتون باز میشه، فرمول زیر را اونجا بنویسید و اینتر بزنید تا در پاراگراف بعدی توضیحش را بدم:
Total Revenue = SUM(Orders1[Revenue])
در سمت چپ علامت مساوی باید برای شاخص خودتون یک اسم بنویسید، چون من قراره مجموع درآمد را محاسبه کنم از نام Total Revenue استفاده کردم. در سمت راست مساوی هم فرمول مورد نظرتون را باید بنویسید، تابع SUM یک سری عدد میگیره و مجموع اونها را حساب میکنه. در فرمول من بهش گفتم برو مجموع ستون Revenue را از جدول Orders حساب کن، ساختار فرمول نویسی به شکل زیر هست:
Measure Name = Function(Parameters)
اگه احیانا براتون سوال شده چرا در فرمول نوشتم Orders1 و این عدد 1 چیه؟ باید بگم در دیتایی که من وارد Power BI کردم، جدول Orders با نام Orders1 وارد شده و عملا این عدد یک جزوی از اسم جدول هست و نشانگر چیز خاصی نیست. شما برای استفاده از تابع SUM لازمه اسم جدول خودتون را به عنوان پارامتر تایپ کنید و در داخل دو تا علامت براکت باز و بسته نام ستون مورد نظرتون که قصد دارید عملیات جمع روی اون انجام بشه را بنویسید.
حالا دوباره در قسمت Report View و در بخش Data روی جدول Orders کلیک کنید تا ستونهای این جدول براتون باز بشه، الان باید یک فیلد جدید به نام Total Revenue بهتون نمایش بده. این فیلد مثل بقیه فیلدهای این جدول هست و شما میتونید اون را در چارتها و نمودارهای خودتون اضافه کنید، براش فیلتر درست کنید و … :
من اینجا تابع SUM را مثال زدم ولی کلی تابع دیگه مثل MIN، MAX و AVERAGE و… وجود داره که میتونید استفاده کنید.
راستی اگه هر جایی از این آموزش را متوجه نشدید اصلا نگران نباشید، کافیه ویدیو آخر این پست را ببینید تا مشکلتون حل بشه.
استفاده از زبان دکس برای ایجاد یک ستون جدید
به جدول Orders برگردید، همونطور که گفتم، ستون Revenue درآمد حاصل از یک سفارش را نشون میده، ستون دیگهای به نام Cost هم وجود داره که هزینههای این سفارش را برای ما مشخص میکنه. خب حالا فرض کنید قراره سود هر سفارش را حساب کنیم، یعنی برای هر سفارش یا در واقع هر سطر، باید میزان درآمد را از هزینه کم کنیم. برای اینکار به قسمت Data View برید و جدول Orders را انتخاب کنید، الان از تب Home روی New Column کلیک کنید و در قسمتی که برای نوشتن فرمول براتون باز میشه، فرمول زیر را اونجا بنویسید و اینتر بزنید تا در پاراگراف بعدی توضیحش بدم:
Profit = Orders1[Revenue] - Orders1[Cost]
اینجا هم مثل شاخصها در طرف چپ علامت مساوی باید یک اسم برای ستون خودمون بزاریم و در طرف راست هم فرمول را بنویسیم، خود فرمول هم که فکر کنم کاملا واضحه و نیازی به توضیح نداره. الان باید یک ستون جدید به نام Profit در جدول Orders ایجاد شده باشه که سود شما از هر سفارش را نشون بده.
همونطور که دیدید، به کار بردن زبان دکس هم برای ایجاد شاخص هم برای فرمول نویسی یک ستون بسیار راحته:
توابع سطری در زبان دکس
جدول Cookie_Types را دوباره نگاه کنید، در این جدول چهارتا ستون داریم: اولی نوع کوکی، دومی تعداد فروخته شده، سومی درآمد حاصل از فروش هر کوکی و چهارمی هزینه فروش هر کوکی را نشون میده. حالا فرض کنید قصد دارید سود فروش هر نوع کوکی را بدست بیارید، یک راهش اینه که یک ستون جدید ایجاد کنید و فرمول زیر را بنویسید:
Profit = Cookie_Types[Units Sold] * (Cookie_Types[Revenue Per Cookie] - Cookie_Types[Cost Per Cookie])
فرمول بالا درآمد را از هزینه کم میکنه و در تعداد کوکی فروخته شده ضرب میکنه تا سود هر نوع کوکی محاسبه بشه.
راه دیگهای که حرفهایتر هم هست اینه که از توابع سطری استفاده کنیم. این توابع مخصوص مواقعی هست که نیاز دارید روی هر سطر عملیاتی انجام بشه بدون اینکه ستون جدیدی ایجاد بشه. برای همین به Report View میریم و روی جدول Cookie_Types کلیک میکنیم و یک شاخص جدید با فرمول زیر ایجاد میکنیم:
Total Profit = SUMX(Cookie_Types , Cookie_Types[Units Sold] * (Cookie_Types[Revenue Per Cookie] - Cookie_Types[Cost Per Cookie]))
تابع SUMX یکی از توابع سطری در Power BI هست، در پارامتر اول نام جدولی که قراره عملیات جمع روی اون انجام بشه را از ما میگیره و در پارامتر دوم هم فرمول محاسباتی را دریافت میکنه. فرایندش اینطوریه که اول برای هر سطر جدولی که در پارامتر اول بهش دادیم، میاد طبق فرمول پارامتر دوم، یک عدد حساب میکنه و بعد کل اون اعداد را جمع میکنه و حاصل جمع را به ما برمیگردونه.
توابط سطری دیگهای هم وجود داره،مثل AVERAGEX. در کل خیلی از توابع عادی، وقتی حرف X میاد آخرشون تبدیل به توابع سطری میشن.
ویرایش و حذف یک شاخص
برای ویرایش یک شاخص کافیه روی اون شاخص کلیک کنید و فرمول را تغییر بدید. برای حذف اون هم با کلیک راست روی شاخص میتونید گزینه Delete from model را انتخاب کنید.
کامنت گذاری در زبان دکس
در دکس شما میتونید برای هر فرمولی که مینویسید، چند خط توضیح هم بنویسید، این توضیحات روی کارکرد فرمول تاثیری نداره و فقط برای مستندات سازی هست. توضیحات را میتونید بعد از دو تا علامت // به فرمول خودتون اضافه کنید:
Total Profit = SUMX(Cookie_Types , Cookie_Types[Units Sold] * (Cookie_Types[Revenue Per Cookie] - Cookie_Types[Cost Per Cookie]))
//Some Description
تابع CALCULATE در دکس
با استفاده از تابع Calculate میتونید برای فرمولهای خودتون شرط قرار بدید:
Measure = CALCULATE(SUM(Orders1[Revenue]), Orders1[Product] = "Chocolate Chip")
پارامتر اول فرمولی که قراره اجرا بشه را از شما میگیره و در پارامتر دوم اون شرط را میگیره. مثلا در مثال بالا دادههایی از جدول Orders که ستون Product اونها برابر Chocolate Chip هست را در نظر میگیره و مقادیر ستون Revenue اونها را جمع میکنه.
تابع IF در دکس
تابع IF مربوط به زمانی هست که شما قراره مقدار یک شاخص یا ستون را به یک شرط وابسته کنید:
Measure = IF(Orders1[Revenue] >= 1500 , "Yes" , "No")
در فرمول بالا اگر مقدار Revenue هر سطر از جدول Orders بیشتر از 1500 باشد، مقدار Yes را در ستون جدید قرار میده و در غیر اینصورت مقدار No را به ما برمیگردونه.
ویدیو آموزش زبان دکس در Power BI
فرمولهای دکس اونقدر زیاد هست که نمیشه در یک پست اونها را کامل توضیح داد ولی من فکر میکنم تا اینجا شما دید خوبی در رابطه با DAX و نحوه عملکردش پیدا کرده باشید و الان میتونید ازش استفاده کنید. اگه هنوز ابهامی براتون مونده، حتما ویدیو پایین را ببینید تا کاملا ابهامات شما برطرف بشه.
من به جز اینجا، ویدیوها را در چنل یوتوب خودم هم آپلود میکنم. خیلی خوشحال میشم اگه اونجا هم من را همراهی کنید. برای بازدید از چنل یوتوب من روی این لینک کلیک کنید.