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 ๐Ÿฅฐ

Reply

Avatar

or to participate

Keep Reading