Expanding Your Workday Data Source Horizonsโฆ
Hey there! Mia here, with our second Well Built Solutions newsletter.
Around 70% of your Workday custom reports are likely built on Worker data sources (i.e. worker is the primary business object). Understandable! A wealth of information exists on the Worker business object, making it a top choice for reporting. BUT, with nearly 2,700 ๐คฏ data sources in Workday (run the โData Sourcesโ standard report in your tenant to explore them all), there is so much more reporting power to harness.
In todayโs newsletter, please welcome the underrated and underutilized All Positions data sourceโfeaturing the lesser known Position - Position Management primary business objectโto the stage ๐ Itโs a powerhouse for displaying clear, summarized insights into your staffing pipeline.
Why is position-level data needed here? Letโs get into itโฆ
Filled vs. Unfilled Positions
In Workday, positions can be Filled or Unfilled. To understand the state of your organizationโs staffing efforts, worker data alone isnโt going to cut it. You need a clear view of both your Filled and Unfilled positionsโthat is, what roles are already filled at your organization, and which roles you need to recruit for.
Quick refresher on positions in Workdayโฆ
Positions are the seats at your organization that workers fill. Each position in Workday is associated with job details such as job profile, job level, management level, FTE, and more. These position-level attributes often drive important business and system functions, such as security, business processes, absence, payroll, etc.
Assigned job attributes live on a position whether itโs filled or not. That is, job attributes live on the position business object independently of the worker who fills the position. This is helpful to keep in mind when reporting on positions.
Okay, back to businessโฆ
Your Filled positions (i.e. your current, active headcount) are only one part of your staffing storyโthe other part is Unfilled positions. Workday categorizes your Unfilled positions into delivered position staffing statuses.
Letโs discuss these statusesโฆ
Categorizing Unfilled Positions
Unfilled positions will always be in one of three Workday-delivered statuses: Open, Frozen, or Closed.
The Open ๐ช status typically means the position is eitherโฆ
a) an intended, net new addition to your headcount, or
b) a backfill for a recent termination
In both cases, your organization is usually actively recruiting to fill this open seat.
The Frozen ๐ง status means that recruiting for the unfilled position is paused.
Freezing a position is the right step to take when your organization initiates a hiring freeze or plans to wait many months before actively recruiting for the position.
The Closed โ status means the position is no longer needed.
Organizations manage their use of this status differently. Some organizations close a terminated workerโs position regardless of whether it will be backfilled, opting to create a new position if needed. Other organizations keep the position open upon a workerโs exit, opting to hire a backfill into the existing position to maintain the positionโs history (i.e. a record of who entered/exited the position and when).
Thereโs no right or wrong hereโjust pros and cons to consider carefully before selecting a standard process. The best practice is to nail down a method for your organization and train your end users to stick to it.
Now, onward to the fun stuffโreporting! ๐
Custom Reporting: Position Management Pipeline
The custom report weโre sharing with you today visualizes position pipeline activity. It doesnโt report on Unfilled positions that are Frozen or Closed, as these statuses imply zero activity from a recruitment and current headcount perspective (your Frozen and Closed positions can live on a different custom report, perhaps neighboring a Position Pipeline report on a Staffing dashboard).
This Position Management Pipeline report provides a snapshot of how employees are filling and vacating your existing positions. It focuses on Filled and Unfilled positions as they move from an Unfilled status of โOpenโ or โFuture Fillโ, to a Filled status of โCurrent Employeeโ or โFuture Leaverโ (weโll talk about these custom-labeled statuses shortly, donโt worry!).
Hereโs a preview of the report chart. Again, youโre counting positions with this report, not workers.

Custom Matrix Report for Position Management Pipeline
Are you getting excited yet!? ๐
Before you start configuring, letโs discuss the value of these 4 custom-labeled statuses (Open Positions, Future Fill, Current Employees, Future Leaver), which are built into the backend of the report via calculated fieldsโฆ
๐ This report organizes all Open Unfilled positions into the custom labels of โOpen Positionsโ and โFuture Fillsโ.
Here, weโre categorizing Open Positions as positions that are actively being recruited for and donโt yet have an accepted offer.
In the context of this report, Future Fill includes all positions for which a worker has accepted an offer (either a new hire or an internal transfer) but hasnโt officially started yet. Recruiting has stopped for the position because thereโs a planned fill with a future start date.
Seeing Open Unfilled positions broken down into these sub-statuses helps your talent acquisition team understand which positions are still being recruited for vs. what hiring has already been accomplished.
๐ On this report, Filled positions are organized into custom labels of โCurrent Employeesโ and โFuture Leaversโ.
Here, the Current Employees label includes all positions for which a worker is staffed in the position and is actively fulfilling its roles and responsibilities.
Future Leaver includes all positions that are staffed with an active worker who has an upcoming exit date (most often a termination, but could also be an internal transfer). A backfill may or may not be needed for the soon-to-be-vacated position. This particular report will focus on terminations as opposed to internal transfers.
Can you anticipate the value of this report yet?
It answers questions likeโฆ
Whatโs my volume of unfilled positions compared to filled positions?
How many positions are we actively recruiting for? Whatโs our anticipated growth?
Whatโs the size of our upcoming start class? How many employees will we be onboarding?
Whatโs our current, active headcount?
What positions do we need to consider backfilling? What positions have future leavers?
If youโre anything like us, you like having data at your fingertips to drive proactive action! This report is a helpful tool you can run for just that.
So, letโs get to configuring ๐
Building a Position Management Pipeline Custom Report
The crux of this report is a nested calculated field (think dream within a dream, calc field within a calc fieldโฆ) that youโll need to build from scratch. Letโs start there!
Why do you need a nested calculated field?
The 4 custom labels that we discussed earlier arenโt Workday-delivered. This means you need to create them with logic available to you in Workday. To build a field that returns the correct label for each position, youโll create an Evaluate Expression Band calculated field type with nested True/False Conditions within it.
Quick sidenoteโฆ
Weโve been posting breakdowns of the different calculated field types on LinkedIn for the past 5 weeks. Check out this post for a breakdown of True/False Conditions, and keep an eye out for a breakdown of Evaluate Expression Band coming this Thursday. Weโre making our way through all 34 calc field types!
Letโs Build Our Calculated Fields ๐ ๏ธ
Future Fill - True/False Condition
Run the task Create Calculated Field. Name the calculated field, โzCF TF - Future Fill on Open Positionโ. Select โPosition - Position Managementโ as the business object and โTrue/False Conditionโ as the Function. Click OK.
On the next page, add two line items to the field.
In the first line item, search and select the field, โHas Future Position Fillโ. This is a boolean field type (i.e. True/False, Yes/No), so you can set the criteria to Yes or No by checking the box or leaving it unchecked, respectively. In this case, set the Operator to โequal toโ and check the box in the Comparison Value input to indicate a value of โYesโ.
In the second line item, search and select the field, โStaffing Statusโ. Choose an Operator of โin the selection listโ and select โOpenโ as the Comparison Value.
This is how it should look๐

Calculated Field: True/False Condition to assess whether a position is Open with a Future Fill transaction.
Click OK.
Congratulations! You just built a True/False Condition that will return โTrueโ if the position is both Open AND Has a Future Fill.
Onto the nextโฆ
Future Leaver - True/False Condition (NESTED!)
The calculated field for our Future Leaver label is a bit trickier. It involves creating 4 calculated fields to produce our one Future Leave True/False Conditionโnothing you canโt handle! Letโs do itโฆ
To determine if the worker who is currently filling the position has a future-dated termination (i.e. they will be leaving the position on a known future date), youโll need to build a bridge from the Position business object to the Worker business object and sort through the workerโs termination event history. Weโll walk you through it from the inside, outโฆ
Most Recent Termination (Innermost Calculated Field) - Extract Single Instance
Run the task Create Calculated Field. Name the calculated field, โzCF ESI - Most Recent Termination Including Futureโ. Select โWorkerโ as the business object and โExtract Single Instanceโ as the Function.
Search and select โTermination History - Approvedโ as the Source Field. Set the Condition to โAny is Trueโ and the Sort Field to โEffective Dateโ. Then, set the Sort Direction to โDescending (Z to A)โ and the Instance to be Returned to โFirst occurrenceโ. Click OK.
๐ฅณ Great job! You just isolated the workerโs most recent, approved termination event. Your calculated field should look like this๐

Calculated Field: Extract Single Instance to pull the workerโs most recent, approved termination event.
Effective Date of the Most Recent Termination (2nd Layer Calculated Field) - Lookup Related Value #1
Next, youโll build a calculated field that pulls the Effective Date of the Most Recent Termination Event that you just isolated in the previous step (in this case, note that the Effective Date of the Termination Event is simply the Termination Date).
Run the task Create Calculated Field. Name the calculated field, โzCF LRV - Most Recent Termination Date (Including Future)โ. Select โWorkerโ as the business object and โLookup Related Valueโ as the Function.
In the Lookup Field, search and select the ESI field you just created, โzCF ESI - Most Recent Termination Including Futureโ. In the Return Value, search and select โEffective Dateโ. Click OK.
When youโre done, it will look like this๐

Calculated Field: Lookup Related Value to pull the effective date of the Workerโs most recent termination event.
Bridge the Termination Effective Date to the Position - Position Management Business Object (3rd Layer Calculated Field) - Lookup Related Value #2
Next, youโll create another Lookup Related Value calculated field to pull the Effective Date of the Termination Event onto the Position - Position Management business object. Weโre doing this so that we can incorporate this Effective Date into our upcoming True/False Condition that will identify Future Leaver positions.
Run the task Create Calculated Field. Name the calculated field, โzCF LRV - Workerโs Most Recent Termination Effective Date (Including Future)โ. Select โPosition - Position Managementโ as the business object and โLookup Related Valueโ as the Function.
In the Lookup Field, search and select โWorkerโ. In the Return Value, search and select the Lookup Related Value #1 field that we just created, โzCF LRV - Most Recent Termination Date (Including Future)โ. Click OK.
Compare your field to this screenshot to check your work!๐

Calculated Field: Lookup Related Value to pull the workerโs most recent termination date (including future terminations) onto the Position - Position Management business object.
Future Leaver (4th Layer Calculated Field) - True/False Condition
YOU MADE IT! This is the outermost layer of our Future Leaver calculated field.
Run the task Create Calculated Field. Name the calculated field, โzCF TF - Future Term on a Filled Positionโ. Select โPosition - Position Managementโ as the business object and โTrue/False Conditionโ as the Function. Click OK.
On the next page, add two line items to the field.
In the first line item, search and select the Lookup Related Value #2 field you created in the previous step, โzCF LRV - Workerโs Most Recent Termination Effective Date (Including Future)โ.
Set the Operator to โgreater thanโ. Set the Comparison Type to โValue from another fieldโ. In the Comparison Value, search and select the dynamic field of โTodayโ.
In the second line item, search and select the field โStaffing Statusโ. Set the Operator to โin the selection listโ and select โFilledโ as the Comparison Value.
Click OK. Compare it to this screenshot here๐

Calculated Field: True/False to evaluate whether the position is filled by a worker with a future termination date.
๐ฅด Are you feeling dizzy yet?
Nested calculated fields can make your head spin. Whether youโre following along easily or digesting the concept of nested calculated fields for the first time, youโve made it this far and youโre doing GREAT! Letโs summarize what weโve doneโฆ
With this series of nested calculated fields, you isolated the worker that sits in a position and pulled their most recent termination date, including any termination events in the future. You then built a True/False Condition to evaluate whether this termination date (if it exists) is in the future (greater than today). Essentially, youโve instructed Workday to return TRUE if these conditions are met: the position is indeed filled with a worker AND that worker will be terminated on a known future date.
Onward we go! ๐
Top Level Calculated Field for the Custom Label - Evaluate Expression Band
This is the last calculated field! ๐ This is the top-level field that youโll actually use in your custom report. All of the other fields you built feed into this field.
Run the task Create Calculated Field. Name the field something that makes sense for your organization using your standard calculated field nomenclature. We chose โzCF EEB - Staffing Sub-Statusโ. Select โPosition - Position Managementโ as the business object and โEvaluate Expression Bandโ as the Function.
TIP: You can type โEEB" + Enterโ in the Function input as a shortcut instead of manually sorting through the list of options. Hereโs our full list of calc field shortcuts.
Add 3 line items to your field.
In the first line item, pull in the Future Fill True/False Condition you created above, โzCF TF - Future Fill on Open Positionโ. In the Return Value, type โFuture Fillโ.
In the second line item, pull in the Future Termination on Filled Position True/Condition you created above, โzCF TF - Future Term on Filled Positionโ. In the Return Value, type โFuture Leaverโ.
In the third line item, search and select the Workday-delivered field, โStaffing Status Openโ. In the Return Value, type โOpen Positionsโ.
Lastly, in the Default Value, type โCurrent Employeesโ.
When youโre done, the field should look like this!๐

Calculated Field: Evaluate Expression Band to return the positionโs custom label / sub-status.
You may be wondering if the order of the line items mattersโฆ
YES, it does! The order is important here.
Workday evaluates the logic in an Evaluate Expression Band field from top to bottom. It will first assess whether the position meets the criteria for Future Fill. If TRUE, it will assign the label of โFuture Fillโ to that position. If not, it will move on to assess the next line of logic. If it moves through all 3 line items without a TRUE, then Workday assigns the default label of โCurrent Employeesโ.
Itโs important to build logic that is mutually exclusive and completely exhaustive (MECE), otherwise, positions may be incorrectly assigned a default label of โCurrent Employeesโ.
HOORAY! ๐ You have now completed the calculated field setup for this report! Now letโs configure the rest of the report. This will be quick compared to what you just accomplishedโฆ
Matrix Tab
Under the Row Column section, add your newly created top-level calculated field, โzCF EEB - Staffing Sub-Statusโ. Retitle the Label Override to Position Pipeline so your end user will see a clean label as opposed to your calculated field nomenclature.
Under the sort rows, swap out the default โRow total - Descendingโ for โSequence Defined in Field Values Groupโ. Then, click into Options > Create Field Values Group.
Name the Field Values Group, โPosition Pipelineโ, and add 4 line items. Select each of your custom labels by following this pathway: By Type > Evaluate Expression Band Calculated Field Related Content. Put them in this chronological order: Open Positions, Future Fill, Current Employees, Future Leaver. This โchronologicalโ order outlines the typical life cycle of a position.
It should look like this when youโre finished๐

Custom Report: Position Management Pipeline - Field Values Group Setup

Custom Report: Position Management Pipeline - Group by Field Setup
Under the Define the Field(s) to Summarize section, keep the default Summarization Type of โCountโ. Simply add a Label Override of โPositionsโ.

Custom Report: Position Management Pipeline - Define the Field(s) to Summarize Setup
Output Tab
Route to the Output tab. Switch ๐ the Output Type to โChart and Tableโ. Then, expand the Chart Options section, and select โColumn - Stackedโ for Chart Type. Confirm that the โRow Groupingโ and โMetricsโ populate for the Horizontal Axis and Legend, respectively. Select โMetric 1โ in the Metrics to Include input.
Hereโs what the setup should look like๐

๐ฅ Boom! You DID it!
Share this custom report with your talent acquisition team and executive leaders. We hope they love it! ๐
One last noteโฆ
You may want to add filters and prompts to narrow your results or give your end users more data query flexibility. You may also want to build out the Drill Down tab of the report settings, where you can add a ton of super valuable, granular data about the positions in each category. Weโll save these topics for another newsletter. In the meantime, enjoy your data, and experiment further if you feel inspired!
Additional Resources
As always, thank you for being a reader!
Weโre celebrating you and your pursuit of a Well Built Workday ๐ฅณ
Until next time!
Ceci & Mia
Co-Founders of Well Built Solutions
P.S. Loving the newsletter? Leave us a testimonial here ๐ฅฐ

Say hi ๐ on LinkedIn โ @ceciblomberg, @miaeisenhandler
