
زمینه فیلتر (Filter Context) در DAX به صورت تصویری
0 دقیقه
زمان مطالعه
5
1 رای
۱۲۹
بازدید
۱۴۰۵/۵/۳۱
تاریخ انتشار
مقدمه ای بر زمینه فیلتر در دکس (Dax Filter Context)
زمینه فیلتر (Filter Context) یک مفهوم اساسی در فرمولنویسی DAX است. در این مقاله، زمینه فیلتر (Filter Context) در DAX به صورت تصویری توضیح میدهیم –تکیه بر یک تجسم گرافیکی که تعاملات مختلف موجود در زمینه فیلتر را هنگام استفاده از عناصر نمودار، فیلترها و اسلایسرهای یک گزارش نشان میدهد. این اولین گام برای برنامهریزی تغییرات موردنیاز برای دستیابی به نتیجه مطلوب است: این تغییرات میتوانند با استفاده از تابع CALCULATE به دست آیند که فیلترهای موجود در زمینه فیلتر را حذف، اضافه و جایگزین میکند. این مقاله دیدگاه متفاوتی در مورد موضوعی ارائه میدهد که قبلاً در مقالات دیگر درباره زمینه فیلتر بحث شده است: آنها را بخوانید تا بینش بیشتری درباره این مفهوم مهم برای DAX به دست آورید. پیشنیاز درک کامل مفاهیم ارائه شده در این مقاله، آشنایی کامل با مفاهیم زمینههای ارزیابی در DAX میباشد که در مقاله زمینههای ارزیابی (Evaluation Context) در DAX به طور کامل مورد بررسی قرار گرفتهاست.
هر سلول دارای یک زمینه فیلتر (Filter Context) متفاوت است
هر عدد در یک گزارش با ارزیابی یک عبارت DAX در یک زمینه فیلتر (Filter Context) خاص تولید میشود. یک عبارت واحد در نمودارها و صفحات مختلف گزارش، نتایج متفاوتی تولید میکند زیرا در زمینههای فیلتر متفاوت ارزیابی میشود. بنابراین، هر سلول در یک ماتریس و هر نقطه داده در یک نمودار دارای زمینه فیلتر متفاوتی هستند. ما زمینه فیلتر (Filter Context) در DAX را با توصیف فیلترهایی که به یک سلول در یک نمودار ماتریس اعمال شدهاند، تحلیل میکنیم. تصویر زیر زمینه فیلتر (Filter Context) برای سلول هایلایتشدهای که مقدار 8,776.54 را بازمیگرداند، توصیف میکند.
این سلول مقدار Sales Amount در سال «2019» را برای محصولات «Contoso» با رنگ «آبی» که در «ایالات متحده و کانادا» فروخته شدهاند نشان میدهد. هر فیلتر در زمینه فیلتر (Filter Context) یک جدول است که شامل لیستی از مقادیر «قابل مشاهده» برای یک یا چند ستون در مدل معنایی است. در این مثال اولیه، چهار فیلتر وجود دارد که هر کدام یک ستون را فیلتر میکنند. یک مقدار در ستونهای Brand، Color و Year فیلتر شده است؛ ستون Country شامل لیستی از دو مقدار قابل مشاهده است که با انتخاب انجامشده در slicer (کانادا و ایالات متحده) مطابقت دارد. تمام توابع جدولی که در زمینه فیلتر (Filter Context)(Filter Context) در DAX ارزیابی میشوند، تنها آن سطرهایی را بازمیگردانند که از طریق فیلترهای اعمالشده در زمینه فیلتر «قابل مشاهده» هستند. زمینه فیلتر جداول مدل را به شکلی بسیار کارآمد فیلتر میکند. علاوه بر این، فیلتر تنها زمانی « اعمال» میشود که یک فرمول تجمیعِ یا یک پیمایشگر ارزیابی شود. در ادامه خواهیم دید که با استفاده از CALCULATE میتوان زمینه فیلتر را قبل از اجرای یک تجمیع پرهزینه دستکاری کرد، که این کار هم از نظر انعطافپذیری و هم عملکرد مزایایی دارد.
یک فیلتر درواقع یک جدول است
اولین مفهوم مهم این است که یک فیلتر در زمینه فیلتر (Filter Context) در DAX، جدولی است که شامل لیستی از مقادیر برای یک یا چند ستون است. در مثال قبلی، slicer دو کشور انتخابشده دارد و این مقادیر در فیلتر مربوطه لیست شدهاند. با این حال، حتی اگر فیلتر با استفاده از عملگری مانند «کمتر از» برای یک ستون عددی مشخص شود، فیلتر همیشه به صورت لیستی از مقادیر موجود برای آن ستون که شرایط فیلتر را برآورده میکنند نمایش داده میشود. برای مثال، اگر پنل فیلتر در یک گزارش شرطی داشته باشد که Net Price کمتر از 10.00 باشد، فیلتر مربوطه شامل لیستی از مقادیر یکتای موجود در ستون خواهد بود که این شرط را برآورده میکنند. تعداد مقادیر موجود در فیلتر به مقادیر یکتای موجود در ستون بستگی دارد. 
دستیابی به زمینه فیلتر (Filter Context) موردنظر
هنگامی که یک عبارت محاسباتی مینویسید، معمولاً میتوانید – در همان نمودار یا در نموداری دیگر – تمام اعداد دخیل در محاسبه را نمایش دهید. هر عدد در گزارش نتیجه یک مژر است که در یک زمینه فیلتر (Filter Context) خاص اجرا شده است. هر زمان که به آن عدد نیاز داشته باشیم، کافی است آن مژر را در همان زمینه فیلتر (Filter Context) ارزیابی کنیم. بنابراین ایده خوبی است که پیش از نوشتن یک فرمول DAX، زمینه فیلتر (Filter Context) هر عبارت دخیل در محاسبه را توصیف کنیم. برای مثال، مژر of Color % را در نظر بگیرید که درصد Sales Amount را برای هر رنگ بازمیگرداند. گزارش زیر درصد هر رنگ را در برند Contoso نشان میدهد، در حالی که تنها دو کشور کانادا و ایالات متحده فیلتر شدهاند. پیش از نوشتن هر کد DAX، میتوانیم محاسبه را به زبان انگلیسی بهصورت تقسیم بین Sales Amount یک رنگ (11,791.62 برای محصولات آبی در برند Contoso) و Sales Amount برای تمام رنگها (202,753.05 برای تمام رنگهای محصول در برند Contoso) توصیف کنیم. در تصویر زیر صورت و مخرج این تقسیم هایلایت شدهاند و زمینه فیلتر برای هر عبارت توصیف شده است.
میتوانیم مژر % of Color را بهصورت تقسیم بین دو مژر، Sales Amount و Sales All Colors، بنویسیم:
مژر Sales Amount در زمینه فیلتر (Filter Context) فعلی، مقدار صورت تقسیم را فراهم میکند و مژر Sales All Colors باید Sales Amount را در زمینه فیلتر موردنظر ارزیابی کند.
حذف یک فیلتر
با مقایسه زمینه فیلتر (Filter Context) اولیه و زمینه فیلتر (Filter Context) موردنظر، میتوانیم زمینه فیلتر (Filter Context) اولیه را تغییر دهیم تا به زمینه فیلتر موردنظر برسیم و سپس مژری را که مورد نیاز است محاسبه کنیم. برای مثال، مژر of Color % که از دو مژر Sales Amount بعنوان صورت کسر و مژر Sales All Colors بعنوان مخرج کسر استفاده میکند. این دو مژر نیاز به فیلترهای متفاوتی دارند. زمینه فیلتر اولیه دارای سه فیلتر است: رنگ آبی، برند Contoso، کشورهای کانادا و ایالات متحده. زمینه فیلتر اولیه با صورت تقسیم مطابقت دارد اما زمینه فیلتر موردنظر برای مخرج کسر با تمامی فیلترهای زمینه فیلتر اولیه مطابق نیست. در واقع تنها تفاوت بین زمینه فیلتر موردنظر برای مخرج با زمینه فیلتر اولیه، فیلتر رنگ است که در زمینه فیلتر موردنظر وجود ندارد. میتوانیمزمینه فیلتر (Filter Context) موردنظر را برای Sales All Colors با حذف فیلتر رنگ از زمینه فیلتر اولیه به دست آوریم. با استفاده از CALCULATE، زمینه فیلتر اولیه (صورت) بهصورت موقت کپی میشود، سپس REMOVEFILTERS فیلتر را از Product[Color] حذف میکند و در نهایت مژر Sales Amount در زمینه فیلتر اصلاحشده (مخرج) ارزیابی میشود.
این تعریف Sales All Colors است:
همچنین میتوان از ALL به جای REMOVEFILTERS استفاده کرد. با وجود اینکه رفتار هر دو تابع در CALCULATE یکسان است، اما توصیه میشود از REMOVEFILTERS استفاده کنید زیرا عمل انجامشده درزمینه فیلتر (Filter Context) را بهتر توصیف میکند: یک فیلتر حذف میشود به جای اینکه با لیستی از تمام مقادیر موجود در ستون جایگزین شود. در واقع، REMOVEFILTERS فقط فیلترهای موجود را حذف میکند، در حالی که ALL فیلتر موجود را با لیستی از تمامی مقادیر موجود در ستون جایگزین میکند.
افزودن یک فیلتر
تا به اینجا توضیح داده شد که چگونه یک فیلتر را حذف کنید تا به زمینه فیلتر (Filter Context) موردنظر برسید. موارد دیگری هم وجود دارد که باید یک فیلتر که در زمینه فیلتر اولیه وجود ندارد، اضافه شود. به یاد داشته باشید که افزودن یک فیلتر معمولاً تعداد سطرهایی را که تجمیع میشوند کاهش میدهد، بنابراین عدد کوچکتری را هنگام جمع مقادیر تولید میکند. برای مثال، مژر Sales Contoso را در نظر بگیرید. این مژر برای مقایسه Sales Amount به ازای هر رنگ محصول با فروش محصولات Contoso نوشته شده است. زمینه فیلتر اولیه برای Sales Amount تنها یک فیلتر برای رنگ دارد. برای اضافه کردن فیلتر روی Product[Brand] کافیست یک شرط فیلتر در CALCULATE برای Sales Contoso اضافه شود:
اگرچه شرط فیلتر یک عبارت است، اما آنچه در زمینه فیلتر موردنظر به دست میآوریم، جدولی است که شامل لیستی از مقادیر فیلتر شده روی برند است، که در این مثال تنها مقدار برگشت داده شده برابر با Contoso است. 
جایگزینی یک فیلتر
در سناریویی متفاوت، ممکن است نیاز داشته باشیم یک فیلتر موجود در زمینه فیلتر (Filter Context) را با فیلتری دیگر جایگزین کنیم. برای مثال، در گزارش زیر میخواهیم فروش هر کشور را در طول چند سال با استفاده از سال 2017 به عنوان معیار مقایسه کنیم. مژر Benchmark 2017 فروش یک سال را بر فروش سال 2017 تقسیم میکند. مشابه مثالی که قبلاً دیدیم، میتوانیم مژر Benchmark 2017 را بهصورت تقسیم بین دو مژر بنویسیم:
هنگامی که زمینه فیلتر اولیه (صورت) را با زمینه موردنظر (مخرج) مقایسه میکنیم، متوجه میشویم که باید فیلتر موجود روی ستون Year را با مقدار 2017 جایگزین کنیم.
برای جایگزینی فیلتر نیز، میتوانیم از تابع CALCULATE استفاده کنیم. در اینجا مژر Sales 2017 به صورت زیر تعریف میشود:
در این حالت، آرگومان فیلتر در CALCULATE فیلتر روی ستون Year (سال 2017) را به زمینه فیلتر (Filter Context) اولیه اضافه میکند. اما فیلتر موجود روی Year (برای مثال، سال 2018) حذف میشود، زیرا هر فیلتری که به زمینه فیلتر اضافه شود، بهطور خودکار هر فیلتری که قبلاً روی همان ستونها اعمال شده بود را حذف میکند.
از دیدگاه DAX، این شبیه آن است که بگوییم هر بار که فیلتری به زمینه فیلتر (Filter Context) اضافه شود، یک REMOVEFILTERS نیز بهطور خودکار روی همان ستونها به CALCULATE اضافه میشود. بنابراین نتیجهای مشابه کدی که در زیر نوشته شده است، خواهیم داشت:
ساختار CALCULATE در DAX به شما امکان میدهد تا زمینه فیلتر (Filter Context) را با افزودن، جایگزینی یا حذف فیلترها تغییر دهید. مژر نوشته شده فوق عملیات زیر را انجام میدهد:
- آرگومان فیلتر 'Date'[Year] = 2017 یک فیلتر روی ستون Year برای مقدار 2017 اضافه میکند.
- هر فیلتر موجود روی ستون Year (مثلاً 2018) بهطور خودکار حذف میشود زیرا افزودن یک فیلتر جدید در
CALCULATEهر فیلتر موجود روی همان ستون را جایگزین میکند.
این رفتار کلیدی در چگونگی تغییر زمینه فیلتر توسط CALCULATE است و به شما امکان کنترل دقیق بر تجمیعها و محاسبات در Power BI میدهد.
ترکیب یک فیلتر جدید با فیلترهای موجود
حذف خودکار یک فیلتر موجود در مثال قبلی مفید بود، اما ممکن است بخواهیم این رفتار را در شرایطی که نیازهای متفاوتی داریم تغییر دهیم. برای مثال، فرض کنید باید یک مژر Large Transactions ایجاد کنیم که مقدار Sales Amount را برای تراکنشهایی بازگرداند که مقدار آنها بیش از ۱,۰۰۰ است. این شرط فیلتر باید نتیجه ضرب دو ستون Sales (Quantity و Net Price) را فیلتر کند و فیلتری ایجاد کند که شامل دو ستون باشد و نه فقط یک ستون. با این حال، اگر گزارش از قبل دارای فیلتری روی Quantity یا Net Price باشد، نمیخواهیم آن را در محاسبه حذف کنیم. برای حل این مشکل، باید شرط فیلتر را داخل تابع KEEPFILTERS قرار دهیم:
این روش اجازه میدهد تا فیلتر جدید اضافه شود بدون اینکه فیلترهای موجود روی ستونهای Quantity یا Net Price حذف شوند. تصویر زیر تغییرات اعمالشده بر زمینه فیلتر را مرحلهبهمرحله نشان میدهد و کنترل بیشتری بر نتایج محاسبات فراهم میکند.
این کد توضیح میدهد که چگونه زمینه فیلتر در DAX هنگام استفاده از CALCULATEو KEEPFILTERS کار میکند. در زیر خلاصهای از این توضیحات وجود دارد:
زمینه فیلتر (Filter Context) اولیه:
برای Sales Amount محصولات Contoso، زمینه فیلتر اولیه شامل دو فیلتر است:
- Brand = Contoso
- یک فیلتر روی Net Price.
افزودن یک فیلتر: شرط Sales[Quantity] * Sales[Net Price] > 1000 در CALCULATE یک فیلتر با دو ستون (Quantity و Net Price) به زمینه فیلتر اضافه میکند. وجود KEEPFILTERS مانع از حذف فیلتر موجود روی Net Price میشود، که در غیر این صورت توسط فیلتر جدید حذف میشد. این رفتار به شما امکان میدهد تا فیلترهای موجود را حفظ کرده و تنها فیلترهای جدید موردنیاز را اضافه کنید. برای اطلاعات بیشتر درباره استفاده از KEEPFILTERS ، میتوانید به بهترین شیوههای توضیح داده شده در مقالات مرتبط مراجعه کنید.
نتیجهگیری
استفاده از نمای گرافیکی برای توصیف زمینه فیلتر (Filter Context) هم در برنامهریزی پیادهسازی محاسبات با استفاده از CALCULATE و هم در توضیح رفتار محاسبات موجود مفید است. اگرچه موتور Power BI ممکن است بهینهسازیهایی انجام با اینحال باز هم این روش نمایش فیلترها در زمینه فیلتر (Filter Context) میتواند تمام موارد خاص دستکاری زمینه فیلتر را توضیح دهد. شما میتوانید با استفاده از CALCULATE ، فیلترها را در زمینه فیلتر (Filter Context) حذف، اضافه یا جایگزین کنید. هدف این مقاله ارائه دیدگاهی متفاوت درباره زمینه فیلتر است، بدون اینکه جایگزین مطالب موجود در مقالات، کتابها و دورههای ویدیویی دیگر باشد. علاوه بر این، بهترین راه یادگیری تمرین با دادههای خودتان است. اگر شما یک یادگیرنده بصری هستید، امیدواریم این مقاله به شما کمک کند تا مفاهیم انتزاعی پشت زمینه ارزیابی در DAX را بهتر درک کنید منبع Filter context in DAX explained visually - SQLBI
این محتوا چطور بود؟
نظر شما به بهبود محتوا کمک میکند

امیر دایی
500k دنبالکنندهاز بچگی عاشق برنامه نویسی بودم