زبان فرمول نویسی DAX به صورت ویژه به منظور کار با مدل های داده با استفاده از عبارت ها(expressions) و فرمول ها طراحی شده است. از زبان DAX در محصولات متعدد مایکروسافت از قبیل Microsoft power BI، Microsoft Analysis Services و power pivot در اکسل مورد استفاده قرار می گیرد. در تمام محصولات گفته شده از یک موتور داخلی به نام tabular استفاده میشود.
در مطالب قبل در مورد زبان فرمول نویسی DAX، مقدماتی در این مورد ارائه شد و شباهت های این زبان فرمول نویسی با زبان فرمول نویسی معمولی اکسل گفته شد. در این مطلب انواع توابع زبان DAX را بررسی میکنیم .
پیشنهاد مطالعه:
در مطالب گذشته در زمینه زبان فرمول نویسی DAX اطلاعات بسیار مفیدی ارائه شده است که پیشنهاد میکنیم قبل از این مطلب، مطالعه کنید.
زبان فرمول نویسی Dax و مفهوم ستون های محاسباتی در مدل داده اکسل
انواع توابع در زبان فرمول نویسی DAX
توابع در زبان DAX به گروههای بسیار شبیه به گروه های توابع در محیط اکسل، تقسیم میشوند. در این مطلب تلاش میکنیم به صورت جداگانه هرکدام از این گروهها و توابعی که در درون آنها قرار میگیرد را بررسی کنیم.
- توابع جدول-مقدار DAX
- توابع فیلتر DAX
- توابع تجمیعی
- توابع اطلاعات زمانی
- توابع تاریخ و زمان
- توابع اطلاعاتی
- توابع منطقی
- توابع ریاضی و مثلثاتی
- توابع آماری
- توابع متنی
توابع جدول-مقدار DAX
بسیاری از توابع DAX از جدول ها بعنوان ورودی، خروجی و یا هر دو استفاده میکنند. این توابع را در زبان فرمول نویسی DAX توابع جدول-مقدار می گویند. از آنجایی که جدول میتواند صرفا یک ستون داشته باشد، این گونه توابع میتوانند یک ستون را نیز بعنوان ورودی یا خروجی بپذیرند. توابع جدول مقدار DAX خود دارای سه زیر مجموعه توابع تجمیعی، توابع فیلترکننده و توابع اطلات زمانی است:
توابع تجمیعی DAX
این گونه توابع که شباهت زیادی به توابع پرکاربرد اکسل دارند بیشتر در امور محاسباتی مورد استفاده قرار می گیرند.
نام تابع DAX | ترکیب | توضیحات |
Average | AVERAGE(<column>) | مقدار میانگین تمام اعداد موجود در یک ستون را برمیگرداند. |
AVERAGEA |
AVERAGEA(<column>)
|
مقدار میانگین تمام مقادیر، در یک ستون را برمیگرداند.(مقادیر متنی و غیر عددی را بعنوان صفر در نظر می گیرد) |
AVERAGEX |
AVERAGEX(<table>, <expression>)
|
|
COUNT |
COUNT(<column>)
|
تعداد سلول های یک جدول را که حاوی عدد هستند، شمارش میکند |
COUNTA |
COUNTA(<column>)
|
تعداد سلول های موجود در یک ستون را که خالی نباشند را شمارش میکند. |
COUNTAX |
COUNTAX(<table>, <expression>)
|
زمانی که نتیجه بک عبارت بر روی یک جدول بررسی میشود، سلول های غیر خالی را شمارش میکند. |
COUNTBLANK |
COUNTBLANK(<column>)
|
تعداد سلول های خالی در یک ستون را شمارش میکند. |
COUNTROWS |
COUNTROWS(<table>)
|
تعداد ردیف ها را در یک جدول مشخص میکند. |
COUNTX |
COUNTX(<table>, <expression>)
|
|
Max |
MAX(<column>)
|
بزرگترین مقدار عددی را در یک ستون برمیگرداند. |
MAXA |
MAXA(<column>)
|
بزرگترین مقدار در یک ستون بعنوان نتیجه برگردانده میشود. مقادیر منطقی و خالی نیز در نظر گرفته میشود. |
MAXX | MAXX(<table>, <expression>) | یک عبارت را برای هرکدام از ردیف های یک جدول بررسی میکند و بزرگترین مقدار عددی را برمیگرداند. |
MIN |
MIN(<column>)
|
کوچکترین مقدار عددی در یک ستون را برمیگرداند. تابع Min مقادیر منطقی(true و false) و خالی را در نظر نمیگیرد. |
MINA |
MINA(<column>)
|
کوچکترین مقدار عددی در یک ستون را برمیگرداند. مقادیر منطقی(true و false) و خالی را در نظر میگیرد. |
MINX |
MINX(<table>, < expression>)
|
کوچکترین مقدار عددی را که از ارزیابی یک عبارت بر روی هرکدام از ردیف های یک جدول بدست می آید، برمیگرداند. |
SUM |
SUM(<column>)
|
مجموع تمام مقادیر یک ستون را به دست میدهد. |
SUMX |
SUMX(<table>, <expression>)
|
توابع فیلترکننده DAX
یکی دیگر از زیرگروههای توابع جدول مقدار DAX، توابع فیلتر هستند.شما میتوانید از توابع Filter برای برگرداندن نوع خاصی از داده ها، جستجوی مقادیر در جدول های مرتبط شده و فیلتر کردن مقادیر مرتبط شده استفاده کنید. توابع فیلترکننده dax به شما امکان میدهند داده ها را به نحوی دستکاری کنید که محاسبات به شکل پویا انجام شوند.
گروه توابع فیلتر (Dax Filter Functions)
نام تابع DAX |
ترکیب |
توضیحات |
ALL |
ALL(<table_or_column>)
|
تمام ردیف ها در یک جدول یا تمام مقادیر در یک ستون را برمیگرداند و هرگونه فیلتری را که قبلا اعمال شده باشد را در نظر نمیگیرد. |
ALLEXCEPT |
ALLEXCEPT(<table>,column1>,<column2>,…)
|
تمام فیلترهایی را که بر روی جدول اعمال شده است باطل میکند، به جز فیلترهایی که بر روی ستون های خاص اعمال شده باشد. |
BLANK |
BLANK()
|
یک مقدار خالی را برمیگرداند. |
CALCULATE |
CALCULATE(<expression>,<filter1>,<filter2>…)
|
|
DISTINCT |
DISTINCT(<column>)
|
یک جدول یک ستونه را که شامل مقادیر منحصر به فرد ستون مشخص شده است، بعنوان نتیجه برمیگرداند. |
EARLIER |
EARLIER(<column>, <number>)
|
|
EARLIEST |
EARLIEST(<table_or_column>)
|
|
FILTER |
FILTER(<table>,<filter>)
|
زیر مجموعه ای از یک جدول یا عبارت را بعنوان یک جدول مجزا برمیگرداند. |
RELATEDTABLE |
RELATEDTABLE(<table>)
|
|
VALUES |
VALUES(<column>)
|
توابع Time Intelligence
این توابع جداول حاوی تاریخ را بعنوان ورودی، خروجی یا هر دو میپذیرند. DAX با استفاده از این نوع توابع، محاسباتی را انجام میدهد و در نتیجه شما را قادر می سازد مقادیر مختلف را در طول روزها، ماهها، فصول و سالهای مختلف با هم مقایسه کنید. شما میتوانید با استفاده از این گروه از توابع محاسباتی را بر پایه تقویم و تاریخ انجام دهید. شما میتوانید با ترکیب توابع تجمیعی گفته شده در بالا و این نوع توابع، مقایسه های بسیار معناداری را بر روی اطلاعات فروش، موجودی کالا و … در طول بازه های زمانی مختلف فراهم آورید.
توابع مربوط به تاریخ و زمان
این گونه توابع بسیار شبیه به توابع تاریخ و زمان اکسل هستند با این تفاوت که در اینجا، توابع تاریخ و زمان بر اساس فرمت داده datetime هستند.افرادی که با ابزار SQL server مایکروسافت کار کرده اند، به خوبی با این فرمت داده آشنایی دارند.
گروه توابع تاریخ و زمان (Date&Time functions)
نام تابع DAX |
ترکیب |
توضیحات |
DATE |
DATE(<year>, <month>, <day>) |
تاریخ مشخص شده را در فرمت DATE-TIME برمیگرداند. |
DATEDIFF |
|
|
DATEVALUE |
DATEVALUE(date_text) |
یک تاریخ در فرمت متنی را به تاریخی در فرمت DATETIME تبدیل میکند. |
DAY |
DAY(<date>) |
شماره روز مربوط به ماه را بعنوان نتیجه برمیگرداند.( عددی بین 1 تا 31) |
EDATE |
EDATE(<start_date>, <months>) |
تعداد ماههای قبل یا بعد از تاریخ مشخص شده را بعنوان نتیجه برمیگرداند. |
EMONTH |
EOMONTH(<start_date>, <months>) |
|
HOUR |
HOUR(<datetime>) |
مقدار ساعت را به صورت عددی بین 0 (12:00 A.M.) تا 23(11:00 P.M.) برمیگرداند. |
MINUTE |
MINUTE(<datetime>) |
مقدار دقیقه را به صورت عددی بین 0 تا 59 برمیگرداند. |
MONTH |
MONTH(<datetime>) |
مقدار ماه را به صورت عددی بین 1(ژانویه) تا 12(دسامبر) برمیگرداند. |
NOW |
NOW() |
تاریخ و ساعت فعلی را در فرمت datetime برمیگرداند. |
SECOND |
SECOND(<time>) |
ثانیه یک مقدار زمانی را به فرمت datetime برمیگرداند. |
TIME |
TIME(hour, minute, second) |
ساعت، دقیقه و ثانیه را به صورت عددی می گیرد و تبدیل به فرمت datetime میکند. |
TIMEVALUE |
TIMEVALUE(time_text) |
زمان به فرمت TEXT را تبدیل به زمان به فرمت datetime میکند. |
TODAY |
TODAY() |
تاریخ فعلی را بعنوان نتیجه برمیگرداند. |
WEEKDAY |
WEEKDAY(<date>, <return_type>) |
روز هفته تاریخ مشخص شده را به صورت عددی بین 1 تا 7 برمیگرداند. توجه داشته باشید که عدد 1 نشان دهنده روز یکشنبه و عدد 7 نشان دهنده روز شنبه است. |
WEEKNUM |
WEEKNUM(<date>, <return_type>) |
|
YEAR |
YEAR(<date>) |
سال مربوط به تاریخ مشخص شده را به صورت یک عدد 4 رقمی نمایش میدهد. برای مثال 1999 |
توابع اطلاعاتی DAX
این نوع توابع، جدول یا ستونی را که بعنوان پارامتر به یک تابع دیگر ارائه شده است را بررسی میکند و مشخص میکند که آیا این مقدار مطابق با فرمت مورد انتظار هست یا خیر. برای مثال، تابع Iserror، در صورتی که مقدار مورد نظر شامل خطا باشد، مقدار true را برمیگرداند.
گروه توابع اطلاعاتی (Dax information functions)
نام تابع DAX |
ترکیب |
توضیحات |
CONTAINS |
CONTAINS(<table>, <column1>, <value1>, <column2>, <value2>,…) |
در صورتی که مقادیر مورد نظر در ستون های مشخص شده موجود باشد، مقدار TRUE برگردانده میشود، در غیر اینصورت FALSE برگردانده میشود. |
ISBLANK |
ISBLANK(<value>) |
خالی بودن یک مقدار را بررسی میکند و مقدار TRUE و FALSE را بسته به نتیجه بدست آمده برمیگرداند. |
ISERROR |
ISERROR(<value>) |
خطا بودن یک مقدار را بررسی میکند و TRUE و FALSE را بعنوان نتیجه برمیگرداند. |
ISLOGICAL |
ISLOGICAL(<value>) |
بررسی میکند که آیا مقدار مشخص شده، مقدار منطقی(TRUE,FALSE) است یا خیر. در صورت مثبت بودن پاسخ مقدار TRUE و در غیر اینصورت FALSE برگردانده میشود. |
ISNONTEXT |
ISNONTEXT(<value>) |
TEXT نبودن مقدار مشخص شده را بررسی میکند. در صورت TEXT نبودن مقدار TRUE و در غیر اینصورت مقدار FALSE برگردانده میشود. |
ISNUMBER |
ISNUMBER(<value>) |
در صورتی که مقدار مشخص شده عدد باشد مقدار TRUE و در غیر اینصورت FALSE را بعنوان نتیجه برمیگرداند. |
توابع منطقی DAX
همه ما کم و بیش با توابع منطقی در محیط اکسل آشنا هستیم. توابع منطقی DAX نیز تا حدودی شبیه به اکسل عمل میکنند و اطلاعاتی را در مورد مقادیر یک عبارت برمیگردانند. برای مثال، تابع TRUE در زبان فرمول نویسی DAX، مشخص میکند که آیا عبارت مورد نظر شما یک مقدار صحیح(TRUE) را برمیگرداند یا خیر.
گروه توابع منطقی(Dax logical Functions)
نام تابع DAX | ترکیب | توضیحات |
IF |
IF(logical_test>, <value_if_true> , value_if_false) |
این تابع شرطی را که بعنوان پارامتر اول ارائه شده بررسی میکند و در صورت صحیح بودن پارامتر دوم و در غیر اینصورت پارامتر سوم را برمیگرداند. |
NOT |
NOT(<logical>) |
مقدار منطقی TRUE را به FALSE تغییر میدهد و برعکس |
True |
True() |
مقدار منطقی true را برمیگرداند. |
False |
False() |
مقدار منطقی false را برمیگرداند. |
OR |
OR(<logical1>, <logical2>) |
در صورتی که حداقل یکی ازشروط مشخص شده صحیح باشد مقدار TRUE را برمیگرداند و در صورتی که تمام آرگومان ها نادرست باشد، مقدار FALSE را برمیگرداند. |
AND |
AND(<logical1>, <logical2>) |
در صورتی که هر دو پارامتر صحیح باشند مقدار true و در غیر اینصورت مقدار false برگردانده میشود. |
SWITCH |
SWITCH(<expression>, <value1>, <result1>, <value2>, <result2>…, <else>) |
یک عبارت را در لیستی از مقادیر بررسی میکند و بر اساس مطابقت یافت شده، نتیجه از پیش تعیین شده را برمیگرداند. در صورتی که مقدار مطابق در لیست وجود نداشته باشد مقدار Else برگردانده میشود. |
IFERROR |
IFERROR(<value>, <value_if_error>) |
در صورت خطا بودن یک مقدار، به جای پیغام خطا، مقدار مشخص در پارامتر دوم رو برمیگرداند. |
توابع ریاضیاتی و مثلثاتی DAX
توابع ریاضیاتی DAX نیز بسیار شبیه به توابع ریاضیاتی معمولی اکسل هستند و اینکه شما با این خانواده توابع در اکسل آشنا باشید میتواند شما را تا حد زیادی در یادگیری این گروه از توابع DAX یاری کند.
توابع متنی DAX
توابع متنی DAX با جداول و ستون ها کار میکنند. با استفاده از این گروه از توابع DAX شما میتوانید بخشی از یک رشته را برگردانید، قسمتی از یک متن را در یک رشته جستجو کنید یا مقادیر string را به هم متصل کنید. با عبارت دیگر توابع متنی در زبان فرمول نویسی DAX برای دستکاری رشته های متنی طراحی شده است.
گروه توابع متنی (Dax text Functions)
نام تابع DAX | ترکیب | توضیحات |
BLANK |
BLANK() |
یک مقدار خالی را بعنوان نتیجه برمیگرداند. |
CONCATENATE |
CONCATENATE(<text1>, <text2>) |
دو رشته متنی را به هم متصل میکند. |
EXACT |
EXACT(<text1>,<text2>) |
دو رشته متنی را با هم مقایسه میکند و در صورتی که هر دو رشته دقیقا یکسان باشند، مقدار true و در غیر اینصورت مقدار false برگردانده میشود. تابع Exact نسبت به حروف بزرگ و کوچک حساس است ولی تفاوت های مربوط به فرمت را در نظر نمیگیرد. |
FIND |
FIND(<find_text>, <within_text>, <start_num>, <NotFoundValue>) |
جایگاه و محل قرارگیری یک رشته متنی را در میان رشته متنی دیگر نشان میدهد. این تابع نیز نسبت به حروف بزرگ و کوچک حساس است. پارامترهای Start num و notfindvalue اختیاری هستند. |
FIXED |
FIXED(<number>, <decimals>, <no_commas>) |
به تعداد اعشار مشخص شده، عدد مورد نظر را رند میکند و نتیجه را به فرمت text برمیگرداند. شما میتوانید مشخص کنید که آیا نتیجه با یا بدون کاما ظاهر شود. |
FORMAT |
FORMAT(<value>, <format_string>) |
یک مقدار را تبدیل به فرمت text میکند. |
LEFT |
LEFT(<text>, <num_chars>) |
تعداد مشخصی از کاراکتر را از سمت چپ یک رشته متنی جدا کرده و برمیگرداند. |
LEN |
LEN(<text>) |
تعداد کاراکترهای یک رشته متنی را برمیگرداند. |
LOWER |
LOWER(<text>) |
تمام حروف یک رشته متنی را به حروف کوچک تبدیل میکند. |
MID |
MID(<text>, <start_num>, <num_chars>) |
رشته ای از کاراکترها را با توجه به نقطه شروع و پایانی که شما مشخص میکنید، از میان یک رشته متنی تفکیک میکند. |
REPLACE |
REPLACE(<old_text>, <start_num>, <num_chars>, <new_text>) |
بر اساس تعداد کاراکترهایی که شما مشخص میکنید، بخشی از یک رشته متنی را با رشته ای دیگر جایگزین میکند. |
REPT |
REPT(<text>, <num_times>) |
متن مورد نظر را به تعداد دفعات مشخصی تکرار میکند. |
RIGHT |
RIGHT(<text>, <num_chars>) |
برعکس تابع left عمل میکند و تعداد مشخصی از کاراکترها را از سمت راست رشته متنی جدا کرده و برمیگرداند. |
SEARCh |
SEARCH(<search_text>, <within_text>, <start_num>, <NotFoundValue>) |
|
SUBSTITUTE |
SUBSTITUTE(<text>, <old_text>, <new_text>, <instance_num>) |
متن موجود را در یک رشته متنی با یک متن جدید جایگزین میکند. |
Trim |
TRIM(<text>) |
تمام فاصله های موجود در یک متن را به جز یک فاصله بین کلمات حذف میکند. |
UPPER |
UPPER (<text>) |
تمام کاراکترهای یک رشته متنی را به حروف بزرگ تبدیل میکند. |
سخن پایانی
چیزی که به سادگی از مطالب گفته شده در این آموزش، قابل درک است، این است که فرمول های DAX گروه بندی و مفهومی شبیه به فرمول های اکسل دارند و شما در صورتی که با توابع و فرمول های اکسل آشنا باشید به سادگی خواهید توانست توابع DAX را نیز فراگیرید. مطالبی گفته شده تاکنون، صرفا مباحثی نظری و به اصطلاح تئوریک بودند و شما را به صورت ذهنی با زبان DAX آشنا میکردند؛ اما زمانی که به صورت عملی شروع به استفاده از توابع DAX در فرمول های خود کنید، می بایست درک درستی از توابع و ترکیب فرمول ها داشته باشید. تلاش میکنیم در مطالب آینده با استفاده از آموزش های متنی و ویدئویی گام به گام این آمادگی را در شما ایجاد کنیم.