عملگر IN در فرمول نویسی DAX

عملگر IN در حقیقت همون OR هستش که به جای نوشتن چندین OR بر روی یک جدول یا ستون میتونیم از IN به عنوان جایگزین استفاده کنیم. همچنین IN خودش برگرفته شده و معادل (syntactic sugar) تابع CONTAINSROW هستش. در ادامه به بررسی این عملگر پر کاربرد می پردازیم.

تعریفی اگر بخواهیم داشته باشیم از این عملگر و تابع مرتبطش به این صورت خواهد بود که در صورتی که تابع CONTAINSROW، حداقل یک شرط برقرار داشته باشد خروجی True بر میگردونه (دقیقا همون منطق or). الگو این تابع به این صورت هستش (syntax):

و در مقابل روش ساده تر نوشتن این تابع با IN به این صورت خواهید بود:

اما دقت داشته باشید که این Values، جدولی از مقادیر خواهد بود.

IN :

به طور مثال فرض کنید داده هایی داریم به صورت زیر:

در صورتی که بخواهیم فقط رنگ های قرمز یا سبز در ستون Color مقادیرشون رو نمایش بدیم و جمع بزنیم اولین روش برای اجرا استفاده از عملگر || خواهد بود که به معنای OR می باشد.

در مقابل استفاده از CONTAINSROW خواهد بود که در ابتدا مقادیر شرط که در مثال ما Red و Green هستند رو دریافت می کنه و در آرگومان دوم ستون مورد نظری که شرط در اون برقرار میشه یعنی Color.

معادل فرمول های بالا با IN به این صورت نوشته می شود:

و البته اگه عبارت بالا رو با خطای عمدی در قسمت IN وارد کنید، خطای زیر بر میگرده که نشون میده در حقیقت IN از تابع CONTAINSROW داره استفاده میکنه!

The number of arguments is invalid. Function CONTAINSROW must have a value for each column in the table expression

خروجی:

فقط دقت کنید مقادیر شرط رو داخل براکت {} باید بنویسید که در انتها توضیح کامل تر رو در این باره خواهم داد.

NOT IN :

و اما در صورتی که بخواهیم شرط رو به صورت عکس بنویسیم فرمول ها بالا با NOT به غیر مقادیر شرط تغییر می کنند یعنی:

 

CONTAINS :

فقط جهت اطلاع: اگه دقت کرده باشید یا با تابع CONTAINS کار کرده باشید (احتمالا در ایجاد Dynamic RLS) متوجه شباهت هایی بین CONTAINS و CONTAINSROW شدید. تابع CONTAINSROW هم خودش ترکیبی خلاصه شده از تابع CONTAINS هست. در تابع CONTAINS یک ارگومان با نام جدول هم داریم که در این مثال اگر بخواهیم فرمول بالا رو با این تابع بازنویسی کنیم خواهیم داشت:

 

گرفتن مقادیر شرط از جدولی دیگر :

البته که شما می تونید مقادیر شرط خودتون رو از جدول دیگری دریافت کنید و الزامی به نوشتن شرایط در کد نیست. به طور مثال اگر جدولی با نام Conditions داشته باشیم که این دو رنگ داخل آن باشند فرمول بالا رو به صورت زیر می تونیم بازنویسی کنیم:

از این روش می تونید برای محاسباتی که امکان استفاده از روابط (relations) وجود نداره هم استفاده کنید.

چندین ستون و شرط :

برای این که چندین ستون و چندین سطر شرط رو داشته باشیم تنها کافیه مقادیر رو به صورت row constructor یعنی داخل پرانتز بنویسیم. در مثال بالا در صورتی که به داده ها ستونی به نام Group اضافه کنیم شرط به این صورت خواهد شد:

که لازمه شرط رو با استفاده از تابع FILTER بنویسیم.

البته در مثال بالا ستون های مورد نظر رو به ALL اضافه کردم تا در نمایش مقادیر رو بتونیم مشاهده کنیم و نه جمعش رو! (شما بر حسب نیاز باید تغییر بدید)

Table Constructor و Row Constructor :

در صورتی که بخواهیم جدولی ایجاد کنیم در کد DAX، برای این کار مجموعه ای با استفاده از براکت {} می نویسیم که به اون table constructor گفته میشه. این مجموعه شامل سطرهایی هستند که با استفاده از پرانتز از هم جدا شدندکه به اون row constructor گفته میشه. به این صورت:

مثال بالا؛ مقادیر دو ستون Color و Group و دو سطر رو تشکیل میدهند که با پرانتز و کامل از هم جدا شدند.

اما در صورتی که این جدول یک ستون داشته باشه می تونیم از پرانتزها صرف نظر کنیم.

که عبارت زیر برابر عبارت بالا می باشد:

نتیجه این موضوع اینه که عبارت تک شرط که در مثال ابتدایی نوشتیم و تنها شامل یک ستون بود خلاصه این عبارته و اگر جایی دیدید به این صورت فرمول نوشته شده! بدونید این الگو اصلی table constructor هستش.

یعنی عبارت زیر

با این عبارت معادل هستش

 

 

 

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست