Forum Discussion
DATEDIFF Working Days
- 9 years ago
Hi Benjamin_500,
First you should create a holiday table including all holiday form Delivery start date to Today. Then create relationship between holiday table and your 'Repot' table.
I try to reproduce your scenario using date from 2017/1/1 to 2017/3/31.
Search the holiday days for 2017, I use "List of federal Public Holidays of USA in 2017", and type it in Power BI table as followings.
Create relationship between Holiday table and Date Table.
Use WEEKDAY function to get weekdays, use RELATED function to get holidays. Use if function to decide if the day is work day.WeekDay = WEEKDAY(DateTable[Date]) Holiday = RELATED(Holiday[Holiday])
If work day = IF(OR(DateTable[WeekDay]=1,DateTable[WeekDay]=7),0,IF(ISBLANK(DateTable[Holiday]),1,0))
The 1 stands for the day is work day.
Finally, create a measure to calculate the number od holidays. And create a card visual to display the result.Total work days = CALCULATE(COUNT(DateTable[Date]),FILTER(DateTable,DateTable[If work day]=1))
If you have other issues, please let me know.Best Regards,
Angelia
Hi Benjamin_500,
First you should create a holiday table including all holiday form Delivery start date to Today. Then create relationship between holiday table and your 'Repot' table.
I try to reproduce your scenario using date from 2017/1/1 to 2017/3/31.
Search the holiday days for 2017, I use "List of federal Public Holidays of USA in 2017", and type it in Power BI table as followings.
Create relationship between Holiday table and Date Table.
Use WEEKDAY function to get weekdays, use RELATED function to get holidays. Use if function to decide if the day is work day.
WeekDay = WEEKDAY(DateTable[Date]) Holiday = RELATED(Holiday[Holiday])
If work day = IF(OR(DateTable[WeekDay]=1,DateTable[WeekDay]=7),0,IF(ISBLANK(DateTable[Holiday]),1,0))
The 1 stands for the day is work day.
Finally, create a measure to calculate the number od holidays. And create a card visual to display the result.
Total work days = CALCULATE(COUNT(DateTable[Date]),FILTER(DateTable,DateTable[If work day]=1))
If you have other issues, please let me know.
Best Regards,
Angelia
- Benjamin_5009 years agoAdvocate I
Hi v-huizhn-msft (Angelia)
Thanks for this, however, this is an akward workaround, it relies on the table being updated every year and it being populated accuratly for a whole year to start with.
While we could make a central "Holidays" table for all users to link too, its the kind of thing that will always get left behind due to its low priority vs other tasks.
I guess, coming from Tableau, where you just clicked on "Weekdays" and it worked it all out for you, I was looking for something much the same.Thank you for the idea, I will keep it in mind if i cant find a better solution.
Kind Regards,
Ben
- prakashacharya9 years agoHelper I
How can i filter to show the workdays just for that month?
- Archie18 years agoFrequent Visitor
Hi prakashacharya,
I am not sure if you have got your answer or not.Here is the answer,
If you are planning to get total no. of days then you have to use COUNTROWS or SUM function in your main field.
for example: Nofworkingdays_Month = CALCULATE(COUNTROWS('month'), Dimtable[if working day] =1)
where, Month = DATESINPERIOD('Calendar'[Date],[ThisMonth],1,MONTH)
ThisMonth = DATE(YEAR([Today]), MONTH([Today]),1)
Today = DATE(YEAR(Now()), MONTH(NOW()), DAY(NOW()))
For more details refer to this link: https://blog.andredevelopment.com/post/power-bi-desktop-fiscal-comparison-part-1-setting-up-for-the-comparisons
Cheers, Archie
- Archie18 years agoFrequent Visitor
Hi prakashacharya and hmedinaa
Please find my soultion below for finding no. of working days excluding holidays & weekends.
WorkingDays_FiscalMTH = CALCULATE((sum('Calendar'[.IsWorkingDay])+1),ALLEXCEPT('Calendar','Calendar'[fiscalYear],'Calendar'[fiscalQuarter],'Calendar'[fiscalMonth]))
OR
Use
WorkingDays_MTH = CALCULATE((sum('Calendar'[.IsWorkingDay])+1),ALLEXCEPT('Calendar','Calendar'[Year],'Calendar'[Quarter],'Calendar'[Month]))
Note: Assuming that you already had a calendar table with Fiscal year, Fiscal Quarter & Fiscal Month.
Hope this helps!!
Cheers,
Archie
- Anonymous7 years agoNot applicable
Good morning,
I've followed these instructions for calculate the working days. In fact, I have a table with the saturdays, sundays and holidays. But I'm not getting what I want. Could you help me?
Also, I have a table like this:
ID Start Date Final Date DATEDIFF DATEDIFF1 123 01/01/2018 02/01/2018 1 ? 124 05/01/2018 10/01/2018 5 ? 125 15/01/2018 01/02/2018 17 ? 126 18/01/2018 20/01/2018 2 ? I got a DATEDIFF between dates but I want the DATEDIFF discounts the saturdays, sundays and holidays. I thoght about calculate how many saturdays, sundays and holidays are between start and final date and then rest it in DATEDIFF column. But I don't know how I should say it to PowerBI.
Regards
- hmedinaa9 years agoFrequent Visitor
I can no see where is the calculation to find the weeks days with the scenario using date from 2017/1/1 to 2017/3/31.
- bengisby8 years agoHelper I
Hello v-huizhn-msft, this is a great solution and I"m close to solving my problem, but how can I insert the measure result as a value in the new column? I need the business days value for EACH ROW of data, not as a single summarized measure. Any ideas?
- clubspec8 years agoHelper III
Hi,
I stuck at this step too. How do I use this measure result in calculating the column?
Thank you your help in advance.
- Anonymous7 years agoNot applicable
v-huizhn-msft wrote:Hi Benjamin_500,
First you should create a holiday table including all holiday form Delivery start date to Today. Then create relationship between holiday table and your 'Repot' table.
I try to reproduce your scenario using date from 2017/1/1 to 2017/3/31.
Search the holiday days for 2017, I use "List of federal Public Holidays of USA in 2017", and type it in Power BI table as followings.
Create relationship between Holiday table and Date Table.
Use WEEKDAY function to get weekdays, use RELATED function to get holidays. Use if function to decide if the day is work day.WeekDay = WEEKDAY(DateTable[Date]) Holiday = RELATED(Holiday[Holiday])
If work day = IF(OR(DateTable[WeekDay]=1,DateTable[WeekDay]=7),0,IF(ISBLANK(DateTable[Holiday]),1,0))
The 1 stands for the day is work day.
Finally, create a measure to calculate the number od holidays. And create a card visual to display the result.Total work days = CALCULATE(COUNT(DateTable[Date]),FILTER(DateTable,DateTable[If work day]=1))
If you have other issues, please let me know.Best Regards,
AngeliaHi v-huizhn-msft Angelia,
I'm having the same issue, your solution is great, however this will give the total result for an year. how to obtain work days per month basis. i.e.
January 20
Feb 19
Mar 21 likwise. I'm bit strugglling with dax code. Thanks again. Keep up the good work!
- che0912crw6 years agoNew MemberExcellent explanation, I have two questions,
1. How to do in the case of having holidays from various countries?,
Thinking in a multinational company. Having several countries we could no longer make the 1: 1 relationship between the Date table and the Holiday table because the dates would be repeated when there are different holidays on the same day. Therefore the RELATED function could no longer be used.
2. And how to add the vacations of each employee (who live in different countries)?
Thanks in advance!