تنظیم مقدار پیشفرض فیلتر (Slicer) بر روی ماه جاری در Power BI
فرض کنید گزارشی در اختیار دارید و میخواهید مقدار پیشفرض یک Slicer بهصورت خودکار با گذر زمان تغییر کند. بهعبارتی، زمانی که وارد ماه جدیدی میشوید، مقدار فیلتر نیز بهصورت خودکار به ماه جدید منتقل شود. این کار چگونه امکانپذیر است؟
در بسیاری از گزارشها، Slicerهایی وجود دارند که گزارش را براساس بازهی زمانی دلخواه فیلتر میکنند. در گزارشهای مالی، معمولاً میخواهید آخرین ماهی را ببینید که بهطور کامل به پایان رسیده است. فرض کنیم شما میخواهید دادههای مربوط به ماه سپتامبر را ببینید. پس مقدار Slicer را روی سپتامبر قرار میدهید و گزارش Power BI خود را منتشر میکنید. اما با گذر زمان و ورود به ماه جدید، فیلتر شما همچنان روی سپتامبر باقی میماند.
در حالی که حالا میخواهید دادههای ماه اکتبر را ببینید. در حالت ایدهآل، انتظار دارید که همیشه آخرین ماه کاملشده بهصورت خودکار نمایش داده شود، بدون اینکه نیاز به تغییر دستی در گزارش داشته باشید.
پس چطور میتوان به این هدف رسید؟
فهرست مطالب
دو روش برای رسیدن به این هدف وجود دارد:
1. استفاده از Relative Date Filters (فیلترهای نسبی تاریخ)
اولین روش از فیلترهای داخلی Power BI استفاده میکند. در هر گزارشی، زمانی که وارد محیط طراحی (report canvas) میشوید، میتوانید پنل فیلتر را در سمت راست مشاهده کنید. این پنل به شما امکان میدهد تا فیلترهایی را بر روی گزارش خود اعمال کنید. شما میتوانید انتخاب کنید که فیلتر برای تمام صفحات (All Pages)، فقط این صفحه (This Page) یا تنها برای این تصویر视 (This Visual) اعمال شود.
وقتی یک فیلد تاریخ را به این پنل فیلتر منتقل میکنید، میتوانید از انواع فیلترهای Relative Date و Relative Time استفاده کنید.
1.1. پیکربندی فیلترها (Configure Filters)
برای انجام این کار مراحل زیر را دنبال کنید:
یک فیلد تاریخ را به یکی از بخشهای فیلتر (All Pages، This Page یا This Visual) منتقل کنید.
از منوی کشویی Filter Type گزینهی Relative date را انتخاب کنید.
پس از انتخاب Relative date، میتوانید مشخص کنید که آیتمها در چه بازهی زمانیای نمایش داده شوند (مثلاً «در 1 ماه گذشته»، «در 1 روز آینده» و غیره).
هر یک از گزینههایی که در بالا ذکر شد، بر اساس تاریخ فعلی عمل کرده و بازهی زمانی را از آن نقطه به جلو یا عقب تغییر میدهند. زمانی که گزینهی “در ۱ ماه تقویمی گذشته” را انتخاب میکنید، در واقع به هدف خود (نمایش خودکار ماه گذشتهی کاملشده) دست یافتهاید.
1.2. معایب روش Relative Date Filters
این روش در مقایسه با استفاده از یک Slicer معمولی معایبی دارد:
محدود بودن گزینهها: شما تنها میتوانید از گزینههایی که در فیلترهای نسبی تاریخ ارائه شدهاند استفاده کنید. اگر بخواهید فیلترهای خاصتری تعریف کنید (مثلاً ترکیبی از تاریخها یا شرایط پیچیده)، باید به دنبال راهحلهای دیگر باشید.
اعمال دشوار فیلتر بهصورت انتخابی: یا باید فیلتر را به تمام صفحات اعمال کنید، یا آن را برای هر صفحه یا هر ویژوال جداگانه تنظیم نمایید. اگر بخواهید فیلتر را به همهی صفحات بهجز یکی اعمال کنید، باید بهصورت دستی وارد هر صفحه شوید و فیلتر را تنظیم کنید—حالا تصور کنید ۲۰ صفحه دارید!
پنل فیلتر مخفی و کاربری دشوار دارد: اگر مقدار پیشفرض فیلتر روی ماه خاصی باشد، و بخواهید آن را تغییر دهید، باید وارد پنل فیلتر شوید، فیلتر را حذف کنید، ماه موردنظر را پیدا و اعمال کنید، و در صورت نیاز دوباره به حالت اولیه بازگردید. این فرآیند اصلاً ساده و کاربرپسند نیست.
ظاهر نهچندان جذاب: وقتی فیلترهای زیادی در پنل فیلتر وجود داشته باشند، ظاهر کلی گزارش آشفته میشود. همچنین گزینههای بصری برای تنظیم نحوه نمایش پنل فیلتر وجود ندارد. در حالیکه استفاده از Slicerها این امکان را میدهد که قالب مناسبی مانند تایملاین (Timeline)، منوی کشویی (Dropdown) یا نوار جستجو (Search Bar) را انتخاب کرده و چینش افقی یا عمودی آن را تعیین کنید.
عدم امکان اعمال فیلتر بر اساس Measureها: در پنل فیلتر نمیتوان از مقادیر محاسباتی (Measures) برای فیلتر کردن استفاده کرد. اما در پنل شامل Slicer، میتوانید به کمک Measureها فیلترهای هوشمند اعمال کنید.
با توجه به این موارد، همانطور که میتوانید حدس بزنید، روش پیشنهادی من استفاده از Slicerهای معمولی در Power BI است—که در ادامه به آن خواهیم پرداخت.
2. تنظیم مقدار پیشفرض برای Slicer
راهکاری منعطفتر برای تعیین مقدار پیشفرض در Slicer استفاده از Slicerهای معمولی است. هر مقداری که در Slicer انتخاب و ذخیره شود، ثابت باقی میماند. بهعنوان مثال اگر ماه سپتامبر را انتخاب کنید، این مقدار همواره بهصورت پیشفرض باقی خواهد ماند.
اما همانطور که در روش اول دیدیم، استفاده از ورودیهای دینامیک مانند «x ماه گذشته» نامگذاری پویا ایجاد میکند.
چالش اصلی اینجاست: چگونه میتوان چنین رفتار پویایی را در Slicer معمولی ایجاد کرد؟
پاسخ در تنظیم دادههای تقویم در Power Query است. چگونه؟ آماده باشید، وارد جزئیات میشویم.
برای این مثال، از یک جدول تقویم استفاده میکنیم که فقط روز اول هر ماه را نمایش میدهد تا بتوان آن را بهراحتی در یک تصویر واحد نمایش داد.
2.1. ایجاد ستون تنظیمشده برای ماه (Create Adjusted Month Column)
برای برآورده کردن نیاز خود، یک ستون جدید به جدول تاریخ اضافه میکنیم با نام Month Name Default. بهجای نمایش نام ماههای معمولی، این ستون مقادیر متنی “Current” برای ماه جاری و “Previous” برای ماه قبل را نشان میدهد.
با این کار میتوانیم Slicer خود را بهگونهای پیکربندی کنیم که بهصورت پویا بین ماه جاری و ماه قبل تغییر کند.
برای ساخت این ستون میتوانیم از عبارت زیر استفاده کنیم:
let
CurrentMonth = Date.Month( DateTime.LocalNow() ),
DefaultMonthColumn =
if [Month] = CurrentMonth then "Current" else
if [Month] = CurrentMonth-1 then "Previous" else [Month Name]
in
DefaultMonthColumn
اضافه کردن این عبارت به ستونی با نام “Month Name Default” به ما نتیجه زیر را میدهد:
این ستون شامل نامهای معمول ماهها است، با این تفاوت که برای ماه جاری مقدار “Current” و برای ماه گذشته مقدار “Previous” نمایش داده میشود. با گذر زمان و تغییر ماهها، این مقادیر نیز بهصورت خودکار بهروزرسانی میشوند.
2.2. مزایای تنظیم مقدار پیشفرض برای Slicer
ستون جدید شما حاوی مقادیری مشابه ستون معمولی “Month Name” است، با این تفاوت که ماه جاری با برچسب Default (یا در اینجا “Current”) جایگزین شده است. چند نکته مهم دربارهی این راهکار وجود دارد:
ماه سپتامبر با کلمه “Default” جایگزین میشود، نه فقط برای سال جاری، بلکه برای تمام سالها. این طراحی عمدی است. اگر فقط نام ماه در سال جاری را تغییر دهید، ممکن است در زمان تحلیل دچار مشکل شوید.
فرض کنید در حال استفاده از یک Slicer برای سال هستید و میخواهید سال قبل را انتخاب کنید. اما اگر مقدار ماه روی “Default” تنظیم شده باشد، سال گذشته دیگر در Slicer قابل انتخاب نخواهد بود، چون مقدار “Default” فقط در سال جاری وجود دارد. در نتیجه باید ابتدا فیلتر ماه را بردارید، سال را تغییر دهید، سپس ماه موردنظر (مثلاً August) را انتخاب کنید. و اگر بخواهید به حالت قبل بازگردید، باید همین مسیر را برعکس طی کنید.
این راهکار بسیار انعطافپذیر است. میتوانید آن را طوری طراحی کنید که مثلاً ماهی که سه ماه قبل بوده انتخاب شود. همچنین اگر بخواهید چند ماه بهطور همزمان فیلتر شوند، میتوانید کدی بنویسید که این امکان را فراهم کند.
2.3. پیکربندی Slicerها (Configure Slicers)
اکنون که تقویم شما آماده است و ستون جدید ایجاد شده، میتوانید آن را وارد مدل کنید. پیش از آنکه این ستون را به Slicer اضافه کنید، وارد بخش Data View شوید، ستون Month Name Default را انتخاب کرده و آن را بر اساس ستون ماه (Month) مرتب (Sort) کنید.
این کار اطمینان حاصل میکند که مقادیر به ترتیب شماره ماهها نمایش داده شوند. در نتیجه، مقدار “Default” (یا “Current”) همیشه در جایگاهی قرار میگیرد که مربوط به همان ماه واقعی است.
زمانی که ستون Month Name Default را به یک Slicer اضافه میکنید، نمایش Slicer به شکل زیر خواهد بود:
اکنون Slicer دیگر نامهای ماه جاری و ماه گذشته را به صورت متنی نشان نمیدهد. با این حال، برای کاربران این موضوع کاملاً قابل فهم است، زیرا ترتیب مرتبسازی (Sort Order) نشان میدهد که ماه انتخاب شده کدام است. شما اکنون مقدار پیشفرض Slicer را به ماه مورد نظر تنظیم کردهاید.
2.4. ایجاد عنوان برای دوره انتخاب شده (Create Selected Period Header)
اگر میخواهید وضوح بیشتری در گزارش خود درباره انتخاب ماه داشته باشید، میتوانید یک عنوان (Title) به گزارش اضافه کنید که دوره انتخاب شده را نمایش دهد. این عنوان میتواند بر اساس ستون معمولی Month Name باشد که هنوز نام ماههایی مثل July و June را در خود دارد.
مثالی از چنین عنوانی میتواند به شکل زیر باشد:
= "Period: "
& SELECTEDVALUE( Calendar[Month Name] )
& " "
& SELECTEDVALUE( Calendar[Year] )
این امکان را به گزارش خود میدهید که هم یک انتخاب پویا در Slicer داشته باشید و هم یک مرجع به دوره انتخاب شده در عنوان یا بخشهای دیگر گزارش نمایش دهید.
2.5. ایجاد ستون تنظیمشده برای سال (Create Adjusted Year Column)
در نهایت، میتوانید همین تکنیک را برای عدد سال نیز بهکار ببرید. اگر میخواهید آخرین ماه کاملاً پایانیافته را نشان دهید، بهتر است سال مربوط به آن ماه را نیز نمایش دهید. فقط دقت کنید که در این ستون جدید، شماره سال به صورت متن (Text) فرمت شود، زیرا این ستون شامل مقدار Default به صورت متنی است.
برای این کار، کافی است کد را کمی تغییر دهید. به جای گرفتن شماره ماه قبلی، ابتدا تاریخ ماه قبلی را بازیابی کنید، سپس آن را به سال تبدیل کنید. مثلاً میتوانید از کد زیر استفاده کنید:
if [Year] =
Date.Year(
Date.AddMonths(
DateTime.Date( DateTime.LocalNow() ),
-1 )
)
then "Current"
else Text.From( [Year] )
و اینگونه است که میتوانید مقدار پیشفرض یک Slicer را در گزارش Power BI خود به ماه یا سال جاری تنظیم کنید!
دیدگاهتان را بنویسید