تابع ALLSELECTED یک تابع بسیار پیچیده در DAX است. در این مقاله، ما یک مقدمه ای برای ALLSELECTED و موارد کاربرد اصلی آن ارائه می دهیم.
دو روش برای توصیف آنچه که ALLSELECTED انجام می دهد و کاربردهای آن وجود دارد وجود دارد: روشی ساده و روشی پیچیده. در این مقاله، ما بر توضیح ساده این تابع و موارد کاربرد اصلی آن تمرکز داریم. همچنین جزئیاتی در مورد زمان و نحوه استفاده از ALLSELECTED را بدون نگرانی از جزئیات پیچیده فراهم می کنیم. اگر می خواهید به سطح بالاتر برسید، مقدار زمان مناسبی برای مطالعه دارید این مقاله را مطالعه کنید: The definitive guide to ALLSELECTED.
به دلیل پیچیدگی ذاتی آن، ابتدا توضیحی راجع به موارد استفادهی ALLSELECTED ارائه میدهیم و سپس یک توصیف ناقص – اما مفید – از عملکرد ALLSELECTED را ارائه میدهیم. در نهایت، چندین رویهی مناسب برای استفاده از ALLSELECTED را بیان خواهیم کرد. ما توضیح کامل ALLSELECTED را به عنوان یک مفهومی از نظر shadow filter context ارائه نخواهیم داد، حتی به عنوان یک مقدمه.
بیایید با یک مورد کاربردی شروع کنیم. فرض کنید میخواهید گزارش زیر را ایجاد کنید.
در ماتریس Sales% ، درصد فروش نسبت به مجموع کل را نشان میدهد. آنچه این محاسبه را پیچیده میکند این است که درصد باید با تقسیم مقدار مبلغ فروش در filter context فعلی بر مبلغ فروش محاسبه شده در یک filter context که در ستون برند حذف شده محاسبه شود.
تابع استفاده شده برای حذف فیلترها از یک ستون ALL است، به همراه CALCULATE، همانطور که در این مژر اول نشان داده شده است:
متاسفانه، این تکنیک پایه در حالت ما کار نمیکند به دلیل وجود فیلتر اضافی از سمت اسلایسر. در واقع، متوجه میشویم که مژر Sales % Wrong، مقادیر نادرستی را برمیگرداند.
دلیل عدم صحت محاسبه Sales % Wrong به این دلیل است که تابع ALL فیلترمربوط به Product[Brand] را از محیط فیلتر حذف میکند. این شامل هم فیلتر در ماتریس فعلی و هم فیلتری است که توسط اسلایسر اعمال شده است. به عبارت دیگر، ALLیک filter context بدون هیچ فیلتری بر روی Product[Brand] بازیابی می کند، که در مخرج محاسبه مجموع کل فروش قرار میگیرد.
آنچه ما میخواهیم به دست آوریم متفاوت است. ما میخواهیم عددی که در ماتریس به عنوان مجموع کل که شامل فیلتر از اسلایسر است نشان داده شدهاست تقسیم کنیم. این نوع محاسبات به عنوان Visual Totals شناخته میشوند، جایی که ما میخواهیم مجموع کلی را که در ویژوال نشان داده شده است محاسبه کنیم به جای مجموع کل در پایگاه داده.
ALLSELECTED به طور خاص برای دستیابی به محاسبات Visual Totals طراحی شده است. ALLSELECTED فیلتری که توسط ویژوال فعلی (ماتریس) ایجاد شده را حذف میکند و filter context قبلی را بازیابی میکند، یعنی فیلتر ایجاد شده توسط اسلایسر. در واقع، روش صحیح محاسبه Sales% استفاده از ALLSELECTED به جای ALL است:
میتوانید یک ستون مرجع را به ALLSELECTED منتقل کنید، همانطور که در این مثال انجام دادیم، یا میتوانید یک جدول کامل را منتقل کنید. ALLSELECTED ، filter context بیرونی را برای یک ستون منفرد یا تمامی ستونهای جدول بازیابی میکند. همچنین میتوانید بدون هیچ آرگومانی از ALLSELECTED استفاده کنید. در آن صورت، فیلتر بیرونی برای تمام جداول مدل بازیابی میشود. با استفاده از پارامترهای مختلف، رفتارهای متفاوتی به دست میآورید. بنابراین، همانطور که همیشه در DAX گفته شده است، شما باید نیازهای خود را با دقت ارزیابی کنید تا اثر مطلوب را بدست آورید.
شما همچنین میتوانید از ALLSELECTED به عنوان یک تابع جدول استفاده کنید تا ردیفهایی که در خارج از ویژوال فعلی انتخاب شدهاند را بازیابی کنید. ما اکنون یک عبارت DAX کمی پیچیدهتر را به عنوان یک مثال نشان میدهیم. ما میخواهیم برندها را بر اساس عملکرد مارجین آنها در بین برندهای انتخاب شده دستهبندی کنیم، با استفاده از سه خوشه: پایین، متوسط و بالا. برای دستیابی به هدف خود، ما میخواهیم حداقل و حداکثر درصدهای مارجین را محاسبه کنیم. ما بازه را بین حداقل و حداکثر به سه قطعه تقسیم میکنیم. سپس بررسی میکنیم که آیا انتخاب فعلی در قطعه اول، دوم یا سوم جا میشود و به تبع آن به کلاسها اختصاص میدهیم.
محاسبه بسیار ساده است. بخش پیچیده تنها محاسبه حداقل و حداکثر درصد مارجین در بین برندهای انتخاب شده است؛ ما این کار را با حلقهزدن بر روی تمام برندهای انتخاب شده انجام میدهیم:
در اینجا مژر Brand Class مورد استفاده در یک گزارش آمده است:
با استفاده از ALLSELECTED، تجربه کاربری به طور روان است. خوشهبندی با استفاده از مقادیری که به طور واضح در گزارش قابل مشاهده هستند اتفاق میافتد: حداقل و حداکثر درصدهای مارجین در ماتریس نشان داده میشوند. علاوه بر این، تغییر انتخاب با استفاده از اسلایسر به طریق بسیار بصری پارامترها را تغییر میدهد.
قبل از ادامه، ما نیاز داریم تا یک نکته را به اطلاع شما برسانیم: ALLSELECTED پیچیدهتر از این توضیح کوتاه است که میتواند نشان دهد. برای انجام وظیفهاش، ALLSELECTED از filter context shadow استفاده میکند که توسط iterator ایجاد شدهاند، و بر این استوار است که تکرار ساخته شده توسط ویژوال تنها تکرار فعال باشد هنگامی که مژر محاسبه میشود. شما میتوانید توضیحات کامل در مورد این موضوع را در این مقاله پیدا کنید: The definitive guide to ALLSELECTED. به منظور سادگی، ما آن مقاله پیچیده را به این روش ساده مختصر میکنیم: هرگز ALLSELECTED را در داخل یک تکرار استفاده نکنید.
به عنوان مثال، کد زیر بسیار خطرناک است، زیرا ALLSELECTED در داخل یک AVERAGEX که یک تکرارکننده است، استفاده شده است:
در این قطعه کد، مسأله این نیست که ALLSELECTED کار نمیکند. مشکل این است که معنای ALLSELECTED بسیار پیچیده است، تقریباً فراتر از فهم انسان است. بنابراین، ممکن است اعداد عجیبی را بدست آورید که بسیار پیچیده برای توضیح هستند و احتمالاً همان اعدادی که نیاز داشتید، نیستند.
هر زمان که نیاز به انجام visual calculations دارید، ALLSELECTED بهترین انتخاب شماست. شما میتوانید با اطمینان از ALLSELECTED استفاده کنید تا زمانی که اجتناب کنید از تکرارها قبل از فراخوانی این تابع استفاده کنید. احتیاط کنید که این ممکن است اتفاق بیافتد، اگر از یک تکرارکننده استفاده کنید و سپس یک مژر را فراخوانی کنید که در نتیجه از ALLSELECTED استفاده کند. در نهایت، مراقب باشید که اگر ALLSELECTED توسط یک مژر دیگر فراخوانی شود، ممکن است در بازگرداندن فیلتر صحیح شکست بخورد. بطور کلی، قانون بسیار ساده است اگر میخواهید در سمت ایمن باقی بمانید: میتوانید ALLSELECTED را در یک مژری که به طور مستقیم در گزارش قرار میدهید، استفاده کنید، اما هرگز نباید یک مژر را که شامل ALLSELECTED است صدا بزنید. اگر نتایج غیرمنتظرهای در هنگام استفاده از ALLSELECTED دریافت میکنید، زمان آن است که به مقاله پیشرفتهتر مراجعه کنید، جایی که به صورت عمیقتر در مکانیزمهای داخلی ALLSELECTED وارد میشویم.
دانلود فایلهای مربوط به این مقاله هوش تجاری
با تکمیل فرم زیر، فایل (های) همراه مقاله در اختیار شما قرار خواهد گرفت: