محاسبه ی روزهای کاری در گزارشات Power BI با استفاده از تابع NETWORKDAYS

NETWORKDAYS

ورودی و خروجی تابع NETWORKDAYS

تابع دارای چهار پارامتر ورودی (دو پارامتر اجباری و دو پارامتر اختیاری) است،

				
					NETWORKDAYS(<start_date>, <end_date>, [<weekend>, <holidays>])
				
			

دو پارامتر <start_date>, <end_date> اجباری و دو پارامتر <weekend>, <holidays> اختیاری هستند. اگر بخواهید مقدار پارامتر <holidays> را به تابع بدهید، آنگاه بایستی مقدار پارامتر <weekend> نیز مشخص گردد و این پارامتر نیز اجباری خواهد بود.

خروجی تابع NETWORKDAYS  یک عدد صحیح  است که عبارت است از روزهای کاری بین دو تاریخ (تاریخ شروع و پایان).

استفاده از تابع NETWORKDAYS

واضح است که، محاسبه­­ی روزهای کاری مستلزم حذف تعطیلات آخر هفته و سایر تعطیلات در طول سال(تعطیلات عمومی، مناسبتهای خاص و غیره) می­باشد. بنابراین برای محاسبه­ی دقیق تعداد روز­ کاری در یک بازه ی مشخص،  به جدولی از تعطیلات آخر هفته و سایر تعطیلات (بر اساس تعطیلات مشخص شده­ی هر کشور ) نیاز خواهیم داشت. حال با یک مثال ساده نحوه­­ی استفاده از این تابع را شرح خواهیم داد:

  • ابتدا با استفاده از تابع calendar() یک جدول تاریخ ایجاد می­کنیم.
  • یک جدول جداگانه از تعطیلات (به جز آخر هفته ها) را ایجاد می­نماییم.
  • بر اساس قوانین و ضوابط سازمان و کسب و کار خود روزهایی تعطیلات آخر هفته را مشخص می­نماییم (پنج شنبه و جمعه در برخی سازمانها و جمعه در برخی دیگر، شنبه و یکشنبه در کشورهای اروپایی و غیره).
  • یک ستون برای کل روزهای کاری ایجاد می­کنیم.
  • یک Measure برای محاسبه­ی کل روزهای کاری خواهیم ساخت.

گام 1 : ایجاد جدول تاریخ بر اساس دو تاریخ شروع و پایان بازه

برای این کارکافیست از تابع calendar() استفاده نموده و تاریخ شروع و پایان بازه ی مورد نظرتان را وارد نمایید. تا تمامی تاریخ های بین این دو نقطه­ی زمانی  در جدول درج شود. در مثال فعلی تاریخ شروع یک ژانویه 2023 و تاریخ پایان 29 ژوئن 2023 لحاظ شده است.

در اغلب کسب و کارها ، بسیاری از شاخصهای کسب و کار بر مبنای تعداد روزهای کاری محاسبه می­شوند، برای مثال:

  • تعداد روزهای کاری که طول کشیده است تا یک سفارش به مشتری نهایی تحویل گردد
  • تعداد کل روزهای کاری برای محاسبه­ی نحوه­ی عملکرد و سایر شاخص­های مربوط به ساعات کاری کارمندان
  • میزان ظرفیت تولید و…

از طرفی علاوه بر متغیر بودن تاریخ تعطیلات مناسبتی در تقویم جلالی در سالهای مختلف، تعطیلات آخر هفته نیز در سازمانهای مختلف ممکن است متفاوت باشد. همین مسأله محاسبه­ی تعداد روزهای کاری در یک بازه­ی زمانی مشخص را به یک چالش تبدیل می­کند.

 خوشبختانه مایکروسافت اخیراً یک تابع DAX جدید به نام NETWORKDAYS منتشر کرده است که عملکردی شبیه توابع اکسل NETWORKDAYS.INTL و NETWORKDAYS دارد.

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

دانلود فایلهای این مقاله:
فایل اکسل UK Holidays.xlsx
فایل اکسل SampleDate.xlsx
فایل Power BI: NetworkDays.pbix

 

				
					SampleDate = CALENDAR(DATE(2023,01,01), DATE(2023,06,29))
				
			

گام 2: ایجاد جدول تعطیلات(به جز تعطیلات آخر هفته)

جدول تعطیلات رسمی را به شیوه های مختلفی میتوان ایجاد نمود، تنها باید به این نکته توجه داشته باشید که این جدول حتما باید شامل یک ستون، و آن هم تاریخ تعطیلات باشد. 

برای مثال فعلی از سایت Gov.UK تعطیلات رسمی انگلستان در سال 2023 را استخراج کرده ­ایم.

در صورتیکه جدول شما شامل ستونهای دیگری غیر از تاریخ تعطیلات است، با استفاده کد زیر میتوانید یک جدول تک ستونی از تاریخ ها ایجاد کنید.

				
					HolidayTable = SUMMARIZECOLUMNS('UK Holidays'[Date].[Date])
				
			

گام 3: مشخص نمودن تعطیلات آخر هفته

این مرحله کاملا به قوانین کسب و کار و سازمان شما بستگی دارد. در مثال فعلی، روزهای آخر هفته شامل شنبه و یکشنبه است.

برای مشخص کردن روزهای تعطیلات آخر هفته ( آرگومان سوم تابع NETWORKDAYS ) باید بر اساس جدول زیر اقدام نمایید:

آرگومان weekend، یا تعطیلات آخر هفته: یک عدد از 1 تا 17 است که مشخص می کند تعطیلات آخر هفته چه روزهایی هستند.

به عبارتی هر عدد، روزهایی از هفته را نشان می­دهد که براساس قوانین آن کسب و کار، تعطیلات آخر هفته محسوب می­شوند و در تعداد کل روزهای کاری بین start_date و end_date لحاظ نمی­شوند.

مقدار

روز

1

شنبه و یکشنبه

2

یکشنبه و دوشنبه

3

دوشنبه و سه شنبه

4

سه شنبه  و چهار شنبه

5

چهارشنبه و پنج شنبه

6

پنج شنبه و جمعه

7

جمعه و شنبه

11

یکشنبه

12

دوشنبه

13

سه شنبه

14

چهارشنبه

15

پنج شنبه

16

جمعه

17

شنبه

در مثال فعلی، عدد “1” را به عنوان آرگومان سوم لحاظ می­کنیم که نشان می­دهد روزهای شنبه و یکشنبه به عنوان تعطیلات آخر هفته لحاظ شده ­اند.

گام 4: ایجاد یک ستون به عنوان روزهای کاری

ایجاد یک ستون محاسباتی(Calculated Column)  و یک Measure با استفاده از  تابع NETWORKDAYS متفاوت است. برای ایجاد یک ستون محاسباتی، به صورت زیر اقدام می­نماییم. از تب new column یک ستون جدید در جدول sampleDate به روش زیر ایجاد میکنیم،

				
					Working Days (Column) = NETWORKDAYS(SampleDate[StartDate],TODAY(), 1, 'UK Holidays')
				
			

با استفاده از دستور فوق، در ستون جدید، در هر ردیف تعداد روزهای کاری از تاریخ، StartDate  تا تاریخ روز جاری محاسبه می­گردد.

برای درک بهتر، روزهای هفته نمایش داده شده اند، به عنوان مثال ردیف اول تا سوم را ملاحظه نمایید، ردیف اول روز یکشنبه است که جزء تعطیلات آخر هفته است، ردیف دوم دوشنبه 2 ژانویه حزء تعطیلات رسمی در جدول UK Holidays میباشد، به همین دلیل تعداد روزهای کاری در سه ردیف اول همچنان 182 باقی مانده است.  پس از سپری شدن هر روز، تعداد روزهای کاری کاهش می­یابد تا تاریخ 7 و 8 ژانویه که مجددا روزهای شنبه و یکشنبه میباشند که به عنوان تعطیلات آخر هفته به تابع معرفی شده­اند.

گام 5 : ایجاد یک Measure بر اساس تعداد روز کاری

همانطور که قبلا ذکر شد، ایجاد یک Measure با استفاده از تابع NETWORKDAYS DAX با نحوه انجام همان کار برای ستون­های محاسباتی متفاوت است. برای ایجاد یک Measure ، بهتر است از تعریف متغیر استفاده شود،

				
					Working Days (Measure) = 
        VAR _StartDate = SELECTEDVALUE(SampleDate[StartDate])
        VAR _EndDate =TODAY()
    
    RETURN
        NETWORKDAYS(_StartDate, _EndDate, 1, 'UK Holidays')

				
			

با انتخاب هر ردیف از جدول SampleDate تعداد روز کاری از ردیف انتخاب شده ، تا روز جاری محاسبه میگردد.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا