تابع IF و SWITCH در زبان DAX
در این مطلب به برسی دو تابع IF و SWITCH در زبان DAX می پردازیم که از توابع بسیار مهم و جذاب در زبان DAX به شمار می روند.
توابع منطقی
بررسی شرط های منطقی توسط Logical Function یا همان توابع منطقی در زبان DAX امکان پذیر است. توابع زیر ما را در این امر یاری می کنند.
این توابع هنگامی که می خواهیم محاسبات مختلفی با توجه به شرایط مختلف صورت پذیرد، به کمک ما می آیند. در این مطلب به بررسی و مقایسه IF و SWITCH می پردازیم.
IF
همان طور که می دانید IF یک تابع منطقی (Logical Function) است که در اکثر زبان های برنامه نویسی وجود دارد و برای گذاشتن شرط در کد های DAX به کمک کاربر می آید.
فرض کنید می خواهیم ستونی در جدول کالا ایجاد کنیم که اگر کالایی پایین تر از 1000 دلار قیمت دارد، ارزان و اگر بالاتر قیمت دارد گران درج شود.
برای این منظور کد زیر را نوشته و ستون مورد نظر را ایجاد می کنیم.
IF ( ‘Product'[Unit Price] > 1000, “Expensive”, “Cheap” )
بعد از ایجاد کد با خروجی زیر مواجه خواهیم شد.
IF های تو در تو
گاهی اوقات تعداد شروط بیشتر است و باید از IF های تو در تو استفاده کنیم. به طور مثال می خواهیم اگر رنگ کالا سفید یا مشکی بود، از عبارت بسیار پرطرفدار استفاده شود، اگر قرمز یا آبی بود از عبارت پرطرفدار، نقره ای یا طلایی، محبوب و در غیر این صورت از عبارت کم طرفدار استفاده شود.
به این منظور کد زیر را نوشته و اجرا می کنیم.
IF (
‘Product'[Color] = “White”
|| ‘Product'[Color] = “Black”,
“بسیار پرطرفدار”,
IF (
‘Product'[Color] = “Blue”
|| ‘Product'[Color] = “Red”,
“پرطرفدار”,
IF (
‘Product'[Color] = “Silver”
|| ‘Product'[Color] = “Gold”,
“محبوب”,
“کم طرفدار”
)
)
)
لازم به ذکر است که عملگر || در زبان DAX به معنی یا (OR) می باشد. در نهایت نتیجه به صورت زیر نمایش داده خواهد شد.
اگر نیاز به توضیح بیشتری در مورد کد هستید تصویر زیر را مشاهده کنید.
SWITCH
تابع SWITCH نیز از دسته توابع منطقی است که عملکردی مشابه IF دارد اما گاهی اوقات نوشتن کد ها را آسان تر می کند. در نوشتن SWITCH نیازی به تکرار کردن نام فیلد (color) نیست.
همان مثال قبل را با تابع SWITCH بنویسیم.
SWITCH (
‘Product'[Color],
“Black”, “بسیار پرطرفدار”,
“White”, “بسیار پرطرفدار”,
“Blue”, “پرطرفدار”,
“Red”, “پرطرفدار”,
“Gold”, “محبوب”,
“Silver”, “محبوب”,
“کم طرفدار”
)
همان طور که مشاهده می کنید تابع SWITCH هم مانند IF یک آرگومان در غیر این صورت (ELSE) دارد که در آن قسمت کم طرفدار درج شده است، بدین معنا که اگر هیچ کدام از شرط ها برقرار نشد قسمت در غیر این صورت فعال می شود.
در این جا گفته شده اگر هیچ کدام از شرط ها برقرار نشد عبارت کم طرفدار درج شود.
توجه نمایید که از SWITCH زمانی استفاده می شود که تعداد مقادیر محدودی در ستون مورد نظر وجود دارد. به طور مثال می خواهیم در کنار شماره ماه، نام آن را درج کنیم که در نهایت 12 مقدار برای آن وجود دارند. پس زمانی که ستون ما دارای مقادیر بسیار زیاد باشد استفاده از SWITCH خیلی منطقی به نظر نمی رسد.
SWITCH TRUE
حال فرض کنید می خواهیم ستونی در جدول کالا ایجاد کنیم که در صورتی که قیمت کالایی زیر 500 دلار بود عبارت خیلی ارزان، در صورتی که بین 500 تا 1500 دلار بود عبارت ارزان، بین 1500 تا 2500 گران و بالای 2500 خیلی گران درج شود.
IF (
‘Product'[Unit Price] <= 500,
“Very Cheap”,
IF (
‘Product'[Unit Price] <= 1500,
“Cheap”,
IF ( ‘Product'[Unit Price] <= 2500, “Expensive”, “Very Expensive” )
)
)
حال سعی کنید همین کد را با SWITCH بنویسید. همان طور که متوجه شدید نوشتن با SWITCH ممکن به نظر نمیرسد و باید از SWITCH TRUE استفاده نمایید.
SWITCH (
TRUE (),
‘Product'[Unit Price] <= 500, “Very Cheap”,
‘Product'[Unit Price] <= 1500, “Cheap”,
‘Product'[Unit Price] <= 2500, “Expensive”,
“Very Expensive”
)
در نهایت با هر دو روش فوق الذکر نتیجه به صورت زیر خواهد بود.
مقایسه توابع IF و SWITCH
در مقایسه تابع IF و SWITCH در زبان DAX باید گفت، استفاده از SWITCH، خوانایی کد را بسیار بالا می برد. استفاده از IF های تو در تو خواندن کد و عیب یابی آن را سخت می کند. البته SWITCH هیچ برتری از حیث عملکرد بر IF ندارد. هنگامی که از SWITCH استفاده می کنید در پشت پرده شروط شما به IF های تو در تو تبدیل می شود. می توان گفت SWITCH، ساده شده IF های تو در تو است.
ضمنا همان طور که گفته شد از SWITCH معمولا برای ستون هایی استفاده می شود که مقادیر یکتای زیادی نداشته باشند و گسسته باشند، مانند رنگ، ماه، سطح تحصیلی و ….
یک استفاده بسیار مهم تابع SWITCH در داینامیک کردن مژر است.
درباره حسین وثوقی
دانش آموخته مهندسی صنایع و مدیریت فناوری اطلاعات دانشگاه تهران، علاقه مند به تحلیل و ارائه راه حل برای مسائل و بهینه سازی راه حل ها هستم ...
نوشته های بیشتر از حسین وثوقی
حسین آقا واقعا کارتون درسته خیلی بدردم خورد سپاسگزارم