Advent of Code is back! Unwrap daily challenges to sharpen your Alteryx skills and earn badges along the way! Learn more now.

Alteryx Designer Desktop Discussions

Find answers, ask questions, and share expertise about Alteryx Designer Desktop and Intelligence Suite.

Datetimediff using only weekdays/business days

JessicaAddy
5 - Atom

Is there a way to calculate the number of weekdays/business days between two dates?  I have spent some time searching the internet and the Alteryx Community, but cannot find any solutions to this.

 

Thanks!

Jessica

22 REPLIES 22
jdunkerley79
ACE Emeritus
ACE Emeritus

I am not sure if this is the best way to do it but is a way I have tried in the past and think works. Basically a port of the C# code on StackOverflow to an Alteryx formula.

 

Assuming the two dates are StartDate and EndDate.

 

First I needed to get the weekday as an integer with 0 for Sunday and 6 for Saturday (just to reproduce .Net behaviour). A simple enough case statement after formatting the Start and End Date:

Switch(DateTimeFormat([StartDate],"%a"),
       0,
       "Sun",0,
       "Mon",1,
       "Tue",2,
       "Wed",3,
       "Thu",4,
       "Fri",5,
       "Sat",6)

Having created a StartWeekday and EndWeekday the business day function is:

 

IIF([StartDate]>[EndDate], 
Null(),
1 +
((DateTimeDiff([EndDate],[StartDate],"days")*5 - ([StartWeekday]-[EndWeekday])*2) / 7) +
IIF([EndWeekday]==6,-1,0) +
IIF([StartWeekday]==0,-1,0)
)

Attached as a workflow.

 

Update: There was a typo in the initial version, have corrected it and updated the yxmd file.

 

Hope it helps

James

BCarley
7 - Meteor

Hello,

 

I've uploaded a macro to the gallery here for you to use if you'd like. I've used a similar flow to James but I forgot about Alteryx's DateTimeExport feature, instead I used the fact that 1900-01-01 was a Monday and used the mod of the difference in days to find what day I'm starting on!

 

I think from then on we did things very similar but for completeness, I found the whole number of weeks by rounding down the number of days between start and end divided by 7 (using the floor() function). From there I found the number of "extra days" i.e. the days that do not fall into a complete week.

 

Using the zero indexed start day (Mon:0, Tues:1 ...) you are able to see how many non-weekdays in involved, also taking into acount the starting day. If StartDay + Extra Days is less than 4, you have only weekdays, if equal to 5, you must have 1 non weekday, if greater than 5, you only have weekdays.

 

The macro could have been reduced into one formula but I've expanded it out for clarity.

 

Thanks!

Ben - BIPB

RodL
Alteryx Alumni (Retired)

Another approach, but I think worth showing here, points out the ability in Alteryx to format a date/time into just about any configuration you can think of using the format specifiers. 

In the attached app, I use that functionality to format a date as "Monday", "Tuesday", etc. Then all you need is a simple filter tool to take out Saturday and Sunday. 

I have also added in the functionality in the app to designate a file for holidays if you want to include that.

ssjl
8 - Asteroid

Is there any chance you could perhaps upload a 9.5 version?  Thanks so much!

-s

jdunkerley79
ACE Emeritus
ACE Emeritus

Not sure if this will work but try this

ssjl
8 - Asteroid

That's got it! 

Thank you very much...

-s

Mitchell_G
7 - Meteor

I like this approach, it's very simple. I'm new to Alteryx,  any adivce on how to use this method to calculate the working days between two dates for each record?

 

I have ~10,000 records. There are two date columns, for simplicity, starting date and ending date. I want to leverage your method to show me the working days date difference for each record.

 

Thanks for the help!

jdunkerley79
ACE Emeritus
ACE Emeritus

You just need a formula tool set up with the formula above.

 

Are you just wanting a weekday count or do you need holidays as well?

 

If you can post some sample data will put together an example for you

RodL
Alteryx Alumni (Retired)

Attached is where I turned the workflow into a batch macro.

I think this will get you close.

Labels