ایجاد دوره زمانی و بازه زمانی دلخواه بر اساس تاریخ شمسی در Power BI
کارگاه تقویم شمسی در پاور بی آی
تقویم فارسی در پاور بی آی برای فیلتر کردن اطلاعات
یکی از چالش هایی که طراحان داشبورد مخصوصا در ابزارهای Self Service BI همچون کلیک ویو ، کلیک سنس ، پاور بی آی و تبلو با آن روبرو هستند استفاده از تقویم شمسی در داشبورد برای فیلتر کردن اطلاعات می باشد .
برای دیدن جزییات و لینک ثبت نام به لینک زیر رجوع کنید
در طراحی داشبورد یکی از بعد های تحلیل بعد زمان است .و یکی از چالشهایی که با آن روبه رو هستیم بازه های زمانی است در این مقاله قصد داریم نحوه پیاده سازی داشبورد با ابعاد مختلف زمانی و همچنین با فاصله زمانی دلخواه را بررسی کنیم
مدت زمان مطالعه :۲۰ دقیقه
فایل اکسل داده ها :Special Range Date Slicer with Default Value
فایل نهایی :DynamicDateAndSlicerPBI
پیش نیاز :
- جدول زمان (Dimdate)
- Fact در اینجا فروش بررسی میگردد
مرحله ۱ : اضافه کردن Measure های مرتبط با تاریخ شمسی
- روز جاری
M_CurrentDay = LOOKUPVALUE(DateTable[PersianStr],DateTable[GregorianDate].[Date],TODAY())
- ماه جاری
M_CurrentMonth = LOOKUPVALUE(DateTable[PersianMonthNo],DateTable[GregorianDate].[Date],TODAY())
- سال جاری
M_CurrentYear = LOOKUPVALUE(DateTable[PersianYearInt],DateTable[GregorianDate].[Date],TODAY())
- ماه جاری
M_CurrentYearMonth = LOOKUPVALUE(DateTable[PersianYearMonthStr],DateTable[GregorianDate].[Date],TODAY())
- اولین روز ماه
M_FirstDayCurrentMonth = CALCULATE(Min(DateTable[GregorianDate].[Date]),FILTER(DateTable,DateTable[PersianYearMonthStr]= LOOKUPVALUE(DateTable[PersianYearMonthStr],DateTable[GregorianDate].[Date],TODAY())))
- اولین روز فصل
M_FirstDayCurrentSeason = CALCULATE(Min(DateTable[GregorianDate].[Date]),FILTER(DateTable,DateTable[PersianYearSeason]= LOOKUPVALUE(DateTable[PersianYearSeason],DateTable[GregorianDate].[Date],TODAY())))
- اولین روز سال
M_FirstDayCurrentYear = CALCULATE(Min(DateTable[GregorianDate].[Date]),FILTER(DateTable,DateTable[PersianYearInt]= LOOKUPVALUE(DateTable[PersianYearInt],DateTable[GregorianDate].[Date],TODAY())))
مرحله ۲:
ایجاد یک Calculated Table ، جدول بازه های زمانی دلخواه که بتوان بر اساس آن مقادیر را برای امروز،دیروز،سال جاری،ماه جاری و … در اختیار داشت .با توجه به تقویم فارسی این موارد پیچیده به نظر میرسد کد های زیر این کار را برای شما آسانتر میکند و میتوانید به راحتی از آنها استفاده نمایید
-
SpecialDates = VAR _datetable = DateTable VAR _today = TODAY() VAR _month = [M_CurrentMonth] VAR _year = [M_CurrentYear] VAR _thismonthstart = [M_FirstDayCurrentMonth] VAR _thisyearstart = [M_FirstDayCurrentYear] VAR _lastmonthstart = EDATE(_thismonthstart,-1) VAR _thisquarterstart = [M_FirstDayCurrentSeason] RETURN UNION( ADDCOLUMNS(FILTER(_datetable,[GregorianDate]=_today),"Period","امروز","Order",1), ADDCOLUMNS(FILTER(_datetable,[GregorianDate]=_today-1),"Period","دیروز","Order",2), ADDCOLUMNS(FILTER(_datetable,[GregorianDate]>_today-7),"Period","هفت روز گذشته","Order",3), ADDCOLUMNS(FILTER(_datetable,[GregorianDate]>=_thismonthstart),"Period","ماه جاری","Order",4), ADDCOLUMNS(FILTER(_datetable,[GregorianDate]>=_thisquarterstart),"Period","فصل جاری","Order",5), ADDCOLUMNS(FILTER(_datetable,[GregorianDate]>=_thisyearstart),"Period","سال جاری","Order",6), ADDCOLUMNS(FILTER(_datetable,[GregorianDate]>_today-30),"Period","سی روز گذشته","Order",7), ADDCOLUMNS(_datetable,"Period","بازه دلخواه","Order",8) )
مرحله ۳: تنظیم Data Model است
در این مرحله باید دقت داشته باشید که ارتباط بین datetable و CrossDatetable حتما از نوع Both باشد
بسیار خوب در این مرحله جداول و ارتباط بین آنها ایجاد شده است حالا فقط باید داشبورد را طراحی کرد
مرحله۴ :
ایجاد یک Layout جدید
افزودن یک Slicer بر روی Period از جدول Special Date که در مرحله یک ایجاد شده بود
در مرحله بعد به قسمت تنظیمات Slicer بروید و از قسمت selection Control گزینه Singel Select را فعال نمایید
مرحله ۵
اضافه کردن یک Button با تکه کد زیر
ButtonLabel = VAR _selectedperiod = SELECTEDVALUE(SpecialDates[Period]) VAR _start = MIN(SpecialDates[PersianStr]) VAR _end = MAX(SpecialDates[PersianStr]) RETURN SWITCH(true, _selectedperiod = "Custom...",FORMAT(_start,"d mmm")&" - "&FORMAT(_end,"d mmm")&" ✎", _selectedperiod = "Today", FORMAT(_start,"d mmm yyyy") , _selectedperiod = "Yesterday", FORMAT(_start,"d mmm yyyy") , FORMAT(_start,"d mmm")&" - "&FORMAT(_end,"d mmm") )
تا اینجا همه بازه های زمانی به جز بازه زمانی دلخواه به درستی پیاده سازی شده اند
قدم ۵ : پیاده سازی بازه زمانی دلخواه
در این مرحله نیاز است یک slicer دیگر بر روی فیلد PersianInt اضافه گردد که بتوان محدوده زمانی را انتخاب کرد و همین طور یک دکمه Reset از قسمت Button اضافه گردد
و حالا در قسمت section تنظیمات را Show و hide را به گونه ای تنظیم نمایید که با کیلیک بر روی دکمه ایجاد شده در مرحله۵ Slicer دوم و دکمه reset نمایش داده شوند و با کلیک بر روی دکمه reset Slicer ایجاد شده درمرحله ۴ نمایش داده شود
جالب بود به خصوص نحوه محاسبه اولین روز ماه ترفند خوبی بود ممنون
سلام بی زحمت بگین که راهی هست دوره بازه زمانی رو مثل تقویم خارجی داخل data picker بیاریم اما تقویم شمسی نمایش بده؟
برای نمایش تقویم فارسی باید کدهای سمت سرور تغییر کنند ، قابل انجام است اما پیچیده
https://rypitech.com/product/powerbi_persian_calendar/
با سلام
مطالب خیلی خوب و جالبی بود. متشکرم
در مورد مقایسه فروش هر ماه با ماه قبل نیز اگر مثال یا راهنمایی دارید لطفا در سایت قرار بدهید ممنون میشوم
کد button را کجای نرم افزار باید بنویسیم؟
سلام وقتتون بخیر
رفرنس، نمونه یا آموزش برای ساخت date_picker فارسی دارید؟
آیا منظورتون ساخت تقویم شمسی در قالب یک visual هست یا تغییر در تنظیمات تقویم فعلی؟
تغییر در تنظیمات تقویم فعلی و تغییر بر رویه کدهای سمت سور
https://rypitech.com/product/powerbi_persian_calendar/