دانلود DimDate تاریخ شمسی در Power BI

جدول ابعاد تاریخ که به آن DimDate گفته می‌شود، یک تقویم جامع است که به هر تاریخ یک ردیف اختصاص می‌دهد و امکان گروه‌بندی و تحلیل داده‌ها بر اساس بازه‌های زمانی مانند سال، ماه و روز را فراهم می‌کند.  جدول dimDate نوشتن محاسبات DAX را ساده کرده و امکان ایجاد گزارش‌های یکپارچه و دقیق بر مبنای زمان را فراهم می‌کند.


نحوه محاسبه DimDate تاریخ شمسی فرساران

در این روش شما می‌توانید به صورت پویا (داینامیک) تمامی تقویم تاریخ شمسی یا همان dimDate شمسی را توسط یک کوئری در Power Query تولید کنید.

 در ویدئوی زیر آموزش این روش را خواهید یافت و همچنین در قسمت فایل‌های پیوست همین مقاله، می‌توانید فایل تقویم تاریخ شمسی در  Power BI و یا تقویم شمسی در Excel مورد نیاز پروژه خود را دانلود کنید.

 

تابع Date.ToText در Power Query

مبنای اصلی ساخت dimDate (تقویم شمسی) تابع Date.ToText است. با این توابع می‌توان یک تاریخ میلادی را به تاریخ تقویم هر کشوری تبدیل کرد و شکل آن برای تبدیل تاریخ شمسی اینگونه است:

=Date.ToText( [order date] , [Format = "yyy/MM/dd", Culture = "fa-IR"] )

توجه:‌ حروف کوچک و بزرگ در این فرمول دقت کنید.

همچنین به صورت خلاصه‌تر هم می‌توان فرمول را به شکل زیر نوشت:

=Date.ToText( [order date] , [Format = "yyy/MM/dd", Culture = "fa"] )

و یا برای محاسبه ماه قمری (مورد نیاز شرکت‌های بیمه در ایران) فرمول زیر بکار می‌رود:

=Date.ToText( [order date] , [Format = "yyy/MM/dd", Culture = "ar-SA"] )

محاسبه اختلاف بین دو تاریخ شمسی در Power BI

از آنجایی که در زبان DAX بر روی تاریخ شمسی هیچ محاسبه‌ای نمی‌توان انجام داد، باید تمامی تاریخ‌های شمسی به معادل تاریخ میلادی آن‌ها تبدیل شوند و سپس بر روی این تاریخ میلادی محاسباتی مانند اختلاف با یک تاریخ دیگر را محاسبه کرد. در ویدئوی زیر تبدیل تاریخ شمسی به میلادی در Power BI  آموزش شرح داده شده است:

 تابع Date.FromText در پاورکوئری

این تابع تاریخ شمسی را به صورت یک متن به عنوان ورودی دریافت می‌کند و سپس آن را به یک تاریخ معتبر میلادی تبدیل می‌کند:

Date.FromText( "1357/05/17" , [Format = "yyyy/MM/dd", Culture = "fa"])

 


محاسبه داینامیک تاریخ شروع جدول تاریخ شمسی

برای آنکه تاریخ شروع جدول ما به صورت داینامیک محاسبه شروع شود، می‌توانیم سال اولین تاریخ میلادی موجود در یکی از جداول اصلی مثلا factSales را با روش زیر محاسبه کنیم و در Step کوئری به نام StartDate از این فرمول استفاده کنیم:

= #date( Date.Year( List.Min(factSales[Order Date]) ), 1, 1)

محاسبه داینامیک تاریخ شروع جدول تاریخ شمسی

ایده اصلی بکار گرفته شده در این جدول تقویم آن است که تاریخ پایان جدول، یکسال بعد از تاریخ جاری سیستم باشد و برای اینکار از فرمول زیر استفاده می‌کنیم و می‌توانیم عدد + 1  را در فرمول زیر به مقدار دلخواه تغییر دهیم:

= #date( Date.Year(DateTime.LocalNow()) + 1, 1, 1)

محاسبه شماره هفته در تقویم ایران

ظاهرا تقویم هجری شمسی دارای مشکلاتی است که در مقالات تخصصی سایت «مرکز تقویم دانشگاه تهران» اشاره شده است که هنوز مرتفع نشده‌اند و البته در این سایت هیچ معیاری برای محاسبه شماره هفته در تقویم سال مشخص نشده است و به همین دلیل اینجانب در محاسبه شماره هفته سال از فرمول زیر (که در منابع انگلیسی به آن اشاره شده است) استفاده کرده‌ام:

Number.RoundDown( ([P.Day of Year] - [P.Day of Week] + 10) / 7 , 0)

در این فرمول P.Day of Year اشاره به چندمین روز سال دارد و P.Day of Week اشاره به شماره روز در هفته می‌کند. 

شایان ذکر است که در سایر نسخه‌های dimDate که در سایت‌های دیگر منتشر شده است هیچ دقتی بر روی این موضوع نشده و شماره هفته اشتباه است.


نمایش روز جاری در Power BI

برای نمایش روز جاری تقویم شمسی کافی است که تاریخ میلادی را در dimDate با تابع LOOKUPVALUE و مقدار متناظر تاریخ شمسی آن را بیابیم و این Measure را می‌نویسیم:

Persian Today =
LOOKUPVALUE(dimDate[P.Date], dimDate[Date], TODAY())

نمایش آخرین تاریخ به روز رسانی / Refresh در Power BI

برای اینکار یک کوئری ساده در Power Query می‌سازیم که تاریخ روی جاری را به میلادی برگرداند:

let
    Source = #table(type table[Last Refreshed=datetime],
             {{DateTime.LocalNow()}})
in
    Source

سپس این تاریخ را در جدول dimDate با تابع LOOKUPVALUE جستجو و مقدار متناظر شمسی آن را می‌یابیم و این Measure را می‌نویسیم:

Persian Last Refreshed = 
    VAR dt = MIN('Today'[Last Refreshed])
RETURN
    LOOKUPVALUE(dimDate[P.Date], dimDate[Date], int(dt))
    & FORMAT(dt, "  hh:mm:ss")

کارهای بعد از Load کردن dimDate در Power BI

بعد از آنکه تاریخ شروع و پایان کوئری dimDate را مشخص کردید و دادهای این جدول را در Data Model بارگذاری شد، کارهای زیر را انجام دهید:

۱)‌ Data Type ستون‌ها را بررسی کنید و اگر نیاز است آنها را تصحیح نمایید. توجه داشته باشید که در کوئری اصلی Data Type ها تنظیم شده‌اند و احتمالا نیازی به تغییر نخواهد بود.

۲) باید تمامی ستون‌های عددی را انتخاب و summarization‌ آنها را یک به یک در حالت Don't summarize قرار دهید:

حالت پیش فرض summarization در Power BI
تنظیم پیش فرض summarization در Power BI

۳) باید مرتب سازی ستون‌هایی که به صورت متنی هستند مانند «نام ماه» با گزینه Sort by column بر اساس P.Month (عدد ماه)‌ انجام شود. اینکار باید برای «نام روز هفته»، «نام فصل» و اعداد متناظر آنها جداگانه انجام شود.

تنظیم مرتب سازی ماه‌های شمسی در Power BI
تنظیم مرتب سازی ماه‌های شمسی در Power BI

۴)‌ برای استفاده از قابلیت Drill Down/Up، می‌توانید یک Hierarchy درست کنید. برای اینکار ابتدا روی P.Year (بالاترین مرتبه سلسله مراتب) در فهرست فیلدها،‌R-click کنید و گزینه Create hierarchy را بزنید. نام این سلسله مراتب را به دلخواه تغییر دهید.

سپس به ترتیب بر روی فیلدهای P. Month Name و P. Day of Month که می‌خواهید به این سلسله مراتب اضافه شوند، R-Click‌ کنید و گزینه Add to hierarchy را انتخاب کنید و بر روی نام سلسله مراتب که ساخته‌اید، کلیک کنید.

ساخت سلسله مراتب تاریخ شمسی
ساخت سلسله مراتب تاریخ شمسی

 


توجه : این آموزش ادامه دارد ....

 

لازم به ذکر است که بخشی از این آموزش برای اولین بار در ایران از وب سایت فرساران منتشر شده است و لذا خواهشمندست که در بازنشر این روش/آموزش به منبع آن یعنی وب سایت فرساران ارجاع داده شود.


منابع:
مشاهده سایر Culture nameها

 

به عنوان اولین نفر، تجربه یا دیدگاه خود را بنویسید!

محتوای این فیلد خصوصی است و به صورت عمومی نشان داده نخواهد شد.

متن ساده

  • تگ‌های HTML مجاز نیستند.
  • خطوط و پاراگراف‌ها بطور خودکار اعمال می‌شوند.
کد امنیتی