آشنایی با توابع پراستفاده DAX
DAX (Data Analysis Expressions) یک زبان فرمول نویسی قدرتمند است که برای ایجاد ستون های محاسبه شده، اندازهگیریها، و انجام محاسبات پیچیده استفاده میشود. این زبان به کاربران امکان میدهد تا دادههای خود را به شیوه ای انعطاف پذیر و کارآمد جمعآوری و ویرایش کنند و در نهایت به بینش های ارزشمندی در حوزه هوش تجاری دست یابند. DAX شامل مجموعه ای از توابع و فرمول های قدرتمند است که میتواند برای مبتدیان و حتی کاربران حرفه ای ابزار مفیدی باشد. با استفاده از این توابع، کاربران میتوانند محاسبات پیچیده را انجام دهند و دادهها را به شکلی دقیقتر و مفیدتر تجزیهوتحلیل کنند.
CALCULATE :
تابع CALCULATE
یکی از توابع کلیدی و پراستفاده در DAX است که امکان اعمال فیلترها و تغییر رفتار محاسبات را به شما میدهد. این تابع به شما اجازه میدهد که یک محاسبه را در یک زمینه خاص انجام دهید، سپس آن زمینه را تغییر دهید تا نتایج مختلفی به دست آورید.
فرض کنید که یک جدول فروش دارید که شامل ستونهای “مقدار فروش”، “تاریخ”، و “ناحیه فروش” است. با استفاده از تابع CALCULATE
میتوانید جمع فروشها را برای یک ناحیه خاص یا یک بازه زمانی خاص محاسبه کنید. این قابلیت به شما کمک میکند تا بهطور پویا گزارشهای متنوع و کارآمدتری ایجاد کنید.
برای مثال، اگر بخواهید مجموع فروشها را فقط برای ناحیه “غرب” محاسبه کنید، میتوانید از این کد استفاده کنید:
TotalSalesWest = CALCULATE(
SUM(Sales[Amount]),
Sales[Region] = “West”
)
DISTINCT :
تابع DISTINCT
در DAX برای استخراج مقادیر منحصر به فرد از یک ستون خاص به کار میرود و نتیجه آن یک جدول تکستونی است که حاوی مقادیر بدون تکرار است. این تابع به شما کمک میکند تا دادهها را بدون تکرار بررسی کنید و تحلیلهای دقیقتری انجام دهید.
به عنوان مثال، فرض کنید که یک جدول شامل ستون “دستهبندی محصولات” دارید. اگر بخواهید لیستی از دستههای منحصر به فرد را استخراج کنید، میتوانید از تابع DISTINCT
استفاده کنید. این تابع مقادیر تکراری را حذف کرده و تنها مقادیر یکتا را نمایش میدهد.
این یک نمونه کد است که نشان میدهد چگونه از تابع DISTINCT
استفاده کنید:
UniqueCategories = DISTINCT(Products[Category])
CONCATENATE :
تابع CONCATENATE
در DAX برای ترکیب چندین رشته متنی به یک رشته متنی واحد استفاده میشود. این تابع به شما این امکان را میدهد که دادههای متنی را بههم متصل کنید و اطلاعات کاملی را در یک فیلد جدید به دست آورید. این تابع بهخصوص در مواقعی که نیاز دارید دو یا چند ستون متنی را با هم ترکیب کنید، بسیار مفید است.
برای مثال، فرض کنید جدولی دارید که شامل دو ستون به نامهای “FirstName” (نام) و “LastName” (نام خانوادگی) است. اگر بخواهید یک فیلد جدید به نام “FullName” (نام کامل) ایجاد کنید که شامل هر دو نام و نام خانوادگی باشد، میتوانید از تابع CONCATENATE
استفاده کنید.
این تابع، مقادیر دو ستون را به هم متصل میکند و یک رشته جدید به دست میدهد. برای بهبود خوانایی، معمولاً میتوانید یک فاصله (space) را هم بین رشتهها اضافه کنید.
مثال زیر نحوه استفاده از تابع CONCATENATE
را نشان میدهد:
FullName = CONCATENATE(Employees[FirstName], ” ” & Employees[LastName])
LEFT – RIGHT :
توابع LEFT
و RIGHT
در DAX به شما این امکان را میدهند که تعداد مشخصی از کاراکترها را از سمت چپ یا راست یک رشته متنی استخراج کنید. این توابع برای زمانی که نیاز دارید قسمتی از یک رشته متنی را جدا کنید، بسیار مفید هستند.
تابع LEFT
: این تابع تعداد مشخصی از کاراکترها را از ابتدای رشته متنی استخراج میکند. برای مثال، فرض کنید ستونی دارید که شامل شماره تلفن است و میخواهید کد منطقهای آن را استخراج کنید. میتوانید از تابع LEFT
استفاده کنید تا سه کاراکتر اول از سمت چپ را استخراج کنید.
تابع RIGHT
: این تابع برعکس LEFT
عمل میکند و تعداد مشخصی از کاراکترها را از انتهای رشته متنی استخراج میکند. فرض کنید میخواهید چهار رقم آخر یک شماره تلفن را جدا کنید. در این حالت، میتوانید از تابع RIGHT
استفاده کنید.
مثال:
فرض کنید ستونی با نام “PhoneNumber” دارید که مقادیری مانند “021-12345678” دارد. میخواهید کد منطقه (021) و چهار رقم آخر شماره تلفن (5678) را جدا کنید:
AreaCode = LEFT(PhoneNumber, 3)
LastFourDigits = RIGHT(PhoneNumber, 4)
IF :
تابع IF
یکی از توابع پرکاربرد در DAX است که برای انجام ارزیابیهای شرطی استفاده میشود. این تابع با بررسی یک شرط مشخص، اگر شرط برقرار باشد، مقدار اول و اگر برقرار نباشد، مقدار دوم را برمیگرداند.
تابع IF
معمولاً برای دستهبندی دادهها بر اساس شرایط خاص، بسیار مفید است. بهعنوانمثال، فرض کنید ستونی در یک جدول دارید که مبالغ فروش را نمایش میدهد و میخواهید این فروشها را بر اساس یک آستانه (مثلاً 10000) به دو دسته “فروش بالا” و “فروش کم” طبقهبندی کنید.
مثال:
فرض کنید یک ستون به نام “SalesAmount” دارید که مقادیر مختلفی را نمایش میدهد. میتوانید از تابع IF
برای دستهبندی این فروشها استفاده کنید:
SalesCategory = IF(SalesAmount > 10000, “High Sales”, “Low Sales”)
SWITCH :
تابع SWITCH
در DAX برای ارزیابی چندین شرط استفاده میشود و بسته به نتیجه هر شرط، مقدار مربوطه را برمیگرداند. این تابع زمانی مفید است که شما نیاز دارید چندین شرط مختلف را در یک فرمول بررسی کنید، اما نمیخواهید از تعداد زیادی توابع IF
تو در تو استفاده کنید.
برای مثال، فرض کنید یک جدول دارید که ستون “ProductRating” برای رتبهبندی محصولات را شامل میشود و میخواهید بر اساس مقدار این رتبهبندیها، دستهبندیهای مختلفی را به هر محصول اختصاص دهید.
مثال:
فرض کنید ستون “ProductRating” شما عددی بین 1 تا 5 دارد. میتوانید از تابع SWITCH
برای دستهبندی این رتبهبندیها به صورت زیر استفاده کنید :
RatingCategory = SWITCH(
TRUE(),
ProductRating = 5, “Excellent”,
ProductRating = 4, “Good”,
ProductRating = 3, “Average”,
ProductRating = 2, “Below Average”,
ProductRating = 1, “Poor”,
“Not Rated”
)
ISBLANK :
تابع ISBLANK
در DAX یک ابزار مفید برای بررسی خالی بودن مقادیر در ستونها است. این تابع اگر مقدار مورد نظر خالی یا Null باشد، مقدار TRUE
و در غیر این صورت مقدار FALSE
را برمیگرداند.
این تابع به خصوص زمانی مفید است که شما نیاز به شناسایی و مدیریت مقادیر گمشده یا خالی در مجموعه دادههای خود دارید. برای مثال، اگر یک جدول سفارشات با یک ستون برای تاریخ سفارش دارید و میخواهید سفارشهایی را که تاریخ سفارش آنها ثبت نشده است شناسایی کنید، میتوانید از تابع ISBLANK
استفاده کنید.
مثال:
فرض کنید شما میخواهید سفارشهایی که تاریخ سفارش آنها خالی است را به عنوان “تاریخ نامشخص” علامتگذاری کنید:
OrderStatus = IF(
ISBLANK(OrderDate),
“تاریخ نامشخص”,
“تاریخ مشخص”
)
YEAR – MONTH – DAY :
توابع YEAR
، MONTH
و DAY
در DAX به شما این امکان را میدهند تا اجزای مختلف یک تاریخ (سال، ماه، و روز) را از یک فیلد تاریخ استخراج کنید. این توابع زمانی مفید هستند که بخواهید دادههای تاریخی را تجزیه و تحلیل کنید یا گزارش های مبتنی بر زمان بسازید.
Year = YEAR(OrderDate)
Month = MONTH(OrderDate)
Day = DAY(OrderDate)
DATEDIFF :
تابع DATEDIFF
در DAX یکی از توابع کاربردی برای محاسبه اختلاف بین دو تاریخ مشخص است. این تابع به شما این امکان را میدهد که فاصله زمانی بین دو تاریخ را بر اساس واحد زمانی دلخواهتان مثل روز، ماه یا سال محاسبه کنید. این قابلیت به خصوص در گزارشهای تحلیلی بسیار مفید است، زیرا میتواند به شما کمک کند تا مدت زمان بین دو رویداد مختلف را بسنجید و الگوهای زمانی را کشف کنید.
تابع DATEDIFF
سه پارامتر اصلی دریافت میکند:
StartDate
: تاریخ شروعEndDate
: تاریخ پایانInterval
: واحد زمانی که میتواند یکی از موارد “Year”، “Quarter”، “Month”، “Day”، “Hour”، “Minute” یا “Second” باشد.
فرض کنید یک جدول به نام Orders
دارید که دارای ستونهایی به نام OrderDate
و DeliveryDate
است. میخواهید مدت زمان تحویل هر سفارش را بر اساس روزها محاسبه کنید:
DeliveryTime = DATEDIFF(Orders[OrderDate], Orders[DeliveryDate], DAY)
RELATED :
تابع RELATED
در DAX به شما امکان میدهد تا مقادیری را از یک جدول مرتبط بر اساس رابطهای که بین جداول ایجاد شده است، بازیابی کنید. این تابع بهویژه زمانی مفید است که بخواهید اطلاعاتی را از یک جدول مرتبط به جدول اصلی خود منتقل کنید.
مثال:
فرض کنید دو جدول دارید:
- جدول
Orders
: شامل ستونهایOrderID
,CustomerID
,OrderDate
. - جدول
Customers
: شامل ستونهایCustomerID
,CustomerName
,CustomerEmail
.
حالا اگر بخواهید نام مشتری را بر اساس CustomerID
در جدول Orders
نمایش دهید، میتوانید از تابع RELATED
استفاده کنید. کد زیر این کار را انجام میدهد:
CustomerName = RELATED(Customers[CustomerName])
FIRSTNONBLANK – LASTNONBLANK :
توابع FIRSTNONBLANK
و LASTNONBLANK
در DAX به ترتیب اولین و آخرین مقدار غیر خالی را از یک ستون یا عبارت مشخص برمیگردانند. این توابع زمانی مفید هستند که شما میخواهید دادههای خود را با استفاده از اولین یا آخرین مقدار غیر خالی آنالیز کنید، بهویژه در مواردی که دادههای پراکنده دارید.
- تابع
FIRSTNONBLANK
: این تابع اولین مقدار غیر خالی را از یک ستون یا جدول مشخص شده بازیابی میکند. این میتواند زمانی کاربردی باشد که شما به دنبال اولین تراکنش یا اولین ورود داده در یک مجموعه باشید. - تابع
LASTNONBLANK
: این تابع برعکسFIRSTNONBLANK
عمل میکند و آخرین مقدار غیر خالی را از یک ستون یا جدول برمیگرداند. این میتواند برای پیدا کردن آخرین تراکنش یا آخرین داده ثبت شده در یک بازه زمانی مفید باشد.
فرض کنید یک جدول به نام Sales
دارید که دارای ستونهایی مانند SalesDate
و SalesAmount
است. شما میخواهید اولین و آخرین مبلغ فروش غیر خالی را پیدا کنید:
- برای پیدا کردن اولین مبلغ فروش غیر خالی :
FirstSale = FIRSTNONBLANK(Sales[SalesAmount], Sales[SalesDate])
- برای پیدا کردن آخرین مبلغ فروش غیر خالی :
LastSale = LASTNONBLANK(Sales[SalesAmount], Sales[SalesDate])
DIVIDE :
تابع DIVIDE
در DAX به شما امکان میدهد تا دو عدد را تقسیم کنید و در عین حال مقادیر صفر یا خالی را به خوبی مدیریت کنید. این تابع بسیار مفید است زیرا از ارورهای معمولی که در هنگام تقسیم بر صفر رخ میدهد، جلوگیری میکند. به جای اینکه ارور دهد، میتواند یک مقدار جایگزین را برگرداند.
تابع DIVIDE
به این صورت عمل میکند که دو عدد را از شما میگیرد: یک صورت (numerator
) و یک مخرج (denominator
). اگر مخرج برابر با صفر یا خالی باشد، تابع DIVIDE
یک مقدار جایگزین را برمیگرداند که شما مشخص کردهاید.
فرض کنید یک جدول به نام Sales
دارید که دارای ستونهایی به نامهای SalesAmount
و UnitsSold
است. میخواهید میانگین فروش هر واحد را محاسبه کنید و در صورت صفر بودن مقدار UnitsSold
، مقدار 0 را برگردانید:
SalesPerUnit = DIVIDE(Sales[SalesAmount], Sales[UnitsSold], 0)
سخن پایانی
توابع DAX در Power BI ابزارهای قدرتمندی برای تجزیه و تحلیل دادهها و ایجاد گزارشات دقیق هستند. از توابع اساسی مانند CALCULATE
و IF
که به شما امکان میدهند محاسبات شرطی و پیچیده انجام دهید، تا توابع پیشرفتهتری مانند DATEDIFF
و RELATED
که برای مدیریت تاریخها و روابط بین جداول استفاده میشوند، هر یک از این توابع نقش مهمی در بهینهسازی تحلیلهای داده دارند. استفاده هوشمندانه از این توابع میتواند به شما کمک کند تا از دادههایتان بیشترین ارزش را استخراج کنید و به بینشهای ارزشمندی دست یابید.