By Raphael Santos, Microsoft Project MVP
Working as a PPM consultant to support organizations from multiple sectors which have different business needs and requirements for their PPM deployments, brings lots of excitement and learning opportunities, while also being very challenging.
I have recently worked with a customer that was just getting started with Project Online, and their number one priority was to be able to easily see the consolidated portfolio of resources, which would help the senior management to identify bottlenecks on their capacity and the overallocation of resources based on their demand.
Figure 1 – Resource capacity and demand dashboard |
After delivering the initial set of reports which were consolidating resource capacity and demand management, I received another request: the senior management wanted to calculate the Full Time Equivalent (FTE) for resources, with the objective of knowing how many resources would be required every month throughout the year.
According to the Government Accountability Office (GAO), the FTE represents “the total number of regular straight-time hours (i.e., not including overtime or holiday hours) worked by employees divided by the number of compensable hours applicable to the fiscal year”. The text also determines that, for the purposes of estimating FTEs, 2,080 hours would be equal to one FTE (40 hours x 52 weeks).
The customer I was working with wanted to bring the calculation down to the lowest level, as we know that not every week throughout the year will have 5 business days (because of the federal holidays that will reduce the number of working hours) and not every month will be composed of 4 full weeks of work (because the number of working days within a month will vary based on the calendar). So they wanted to calculate the exact number of working days for each single month to be able to discover the number of needed FTEs each month.
In addition to this requirement, my customer wasn’t using Resource Engagements, so all the calculation would be created considering assignments only.
The data model used in the report is shown below. Note that the ResourceTimephased dataset wouldn’t be required to calculate the FTE, since the calculation needs to use only assignments data and does not require the utilization of capacity. However, it was included in the report because my customer also wanted to compare capacity vs. demand and wanted to discover the remaining availability.
Figure 2 – Data model used in the report |
Once the data was retrieved and all the relations were created, we could put together a simple report to compare capacity vs. assignments over time:
Figure 3 – Capacity vs. assignments over time |
If a very simplistic criteria could be used to calculate the FTE, we could create a formula that would take the total number of hours assigned to resources and divide its value by 168 (with 168 being the average number of hours an employee works a month: 8 hours per day * 21 days a month). The result would look like this:
Figure 4 – Preliminary FTE calculation |
As I am using Power BI to mock this report up, the DAX expression used to calculate the FTE is:
FTE = [AssignmentWork]/168
However, as per my initial considerations, we need to bring the calculation down to the lowest level, taking into consideration the exact number of working days each month to be able to determine the correct number of FTEs required each month.
The initial step is to add to the data model a new table that determines the federal holidays for the year, so we can use this table to subtract the number of working days in a month that has a holiday. To keep it simple, we can create a new SharePoint list and enter all the holidays for 2019:
Figure 5 – List of the US federal holidays |
Once the SharePoint list is created, we need to add it to the data model in Power BI. An important thing to note is that the Date column is formatted using the default ‘datetime’ format, which brings us inconsistent results such as 1/1/2019 8:00:00 AM and 5/27/2019 7:00:00 AM:
Figure 6 – The US Holidays table added to the data model |
As we will need to establish a relationship between the Date column from the US Holidays table with the TimeByDay column from the Timeset table, the column values on both tables need to be the same. The TimeByDay column uses the default ‘datetime’ format, always displaying the 12:00:00 AM suffix in conjunction with the date. Because of this, we need to transform the Date column in the US Holidays table to be formatted the same way, so we will be able to create the relationship. To do that, we can use the ‘Transform’ option in Power BI’s Power Query Editor. As a result, the Date column in the US Holidays table will look like this:
Figure 7 – Transforming the Date column |
Once the transformation is finished and the relationship between the tables US Holidays and Timeset is created, we will be able to build a more advanced set of formulas to calculate the FTE.
To be able to calculate the exact number of FTEs as needed in this exercise, the first thing to do is to discover the number of working days in each month. To facilitate the understanding of the logic used to achieve this goal, I will create two new columns in my data model, under the Timeset table:
The DAX expressions used to create the two columns are listed below:
Is Working Day = IF(OR(WEEKDAY(Timeset[TimeByDay])=1,WEEKDAY(Timeset[TimeByDay])=7),”No”,”Yes”)
Is Holiday = IF(RELATED(‘US Holidays'[Title])=””,”No”,”Yes”)
Once the DAX expressions are created, we can build a third column in the data model that will calculate the number of working days using the two previous columns:
Working Days = CALCULATE(COUNTA(Timeset[TimeByDay]), Timeset[Is Holiday]=”No”,Timeset[Is Working Day]=”Yes”)
As a result, we can now count the exact number of working days in each month (please be aware that the holidays for 2020 were not included in the SharePoint list):
Figure 8 – Number of working days on each month |
Based on that, we can change the FTE formula to not use 168 as a fixed number that represents the average number of hours worked per month by an employee; instead, we can multiple the number of working days by 8 to discover the number of working hours by employee each month, and then use this value in conjunction with the total number of assigned hours. It is also important to mention that, if your organization does not consider 8 as the total number of hours a resource can dedicate to projects each day, you can replace this number by whatever is your standard number of daily hours dedicated to projects. The results in my scenario will look like this:
Figure 9 – Number of needed FTEs each month |
To make things look more professional, there’s nothing better than building a very nice dashboard:
Figure 10 – FTE dashboard |
As we are using Power BI, all visuals are responsive, allowing the senior management to focus on what’s relevant to them:
Figure 11 – FTE dashboard filtered |
PMP, Microsoft Project MVP
Sensei Project solutions is a recognized global leader in Microsoft project and portfolio management (PPM) solutions focused on improving the way your team works. Sensei’s unique turn-key PPM Platform in the Microsoft Cloud, Sensei IQ™, is designed around your needs and a modern way of working. Sensei IQ™ helps you make informed decisions by understanding how all work fits together with meaningful insights into projects, resources and programs across your portfolios.