You’re building a retention risk report when your CHRO drops this bomb:
“Show me employees with 5+ years tenure, performance rating 4+, earning below the 90th percentile for their role as of January 1st, who’ve had no promotion in 24 months. I need their formatted name (Last, First M.), current vs. historical salary comparison, all time off types they’ve used, all managers in their supervisory chain, and a risk score. Oh, and make it update daily.”
Your first thought: “That’s impossible without exporting to Excel and spending 6 hours on pivot tables and VLOOKUPs.”
But here’s the truth: You can build this entire report in Workday using calculated field patterns.
The problem? Most Workday report writers plateau after learning basic formulas. They know IF-THEN logic and simple math, but they’ve never learned the 16 design patterns that professional consultants use to build enterprise-grade reports.
Patterns like:
- ESI → LRV → LVAOD (extract multi-instance, lookup related value, get historical snapshot)
- EMI (edit multi-instance for advanced filtering and operations)
- ARI + Conditional Logic (aggregate filtered multi-instance lists)
- Build Date + Date Calculations (dynamic date math)
- Evaluate Expression Band (range-based categorization)
This guide teaches you all 16 patterns with real formulas, use cases, and step-by-step configurations from actual Workday implementations.
Understanding Workday Calculated Field Architecture
What Are Calculated Fields?
Calculated fields are custom fields you create to derive, manipulate, and display data based on existing Workday information.
Think of them as formulas in Excel, but built directly into Workday reports.
Without Calculated Fields:
- Export everything to Excel for every calculation
- Manual formulas that break when data updates
- Hours spent on data cleanup weekly
- Stale reports requiring constant rebuilding
With Calculated Fields:
- Calculations happen in real-time inside Workday
- Data updates automatically when source changes
- Reusable logic across multiple reports
- Self-service reports for end users
Single-Instance vs. Multi-Instance Fields
Understanding this distinction unlocks which patterns to use.
Single-Instance Field:
Returns one value per worker.
Examples:
- Worker Name (one name)
- Hire Date (one date)
- Current Base Salary (one current salary)
- Manager (one direct manager)
Multi-Instance Field:
Returns multiple values per worker.
Examples:
- Job History (5 previous jobs)
- Dependents (3 children)
- Time Off Entries (12 time offs this year)
- All Position / Jobs (worker holds 2 concurrent positions)
- Performance Reviews (4 annual reviews)
- Management Chain (all managers up the hierarchy)
Why This Matters:
Different calculated field patterns handle single vs. multi-instance data.
The Pattern Framework
All 16 patterns fall into 4 categories:
1. Data Extraction Patterns (ESI, EMI, ARI)
Extract from multi-instance fields
2. Data Traversal Patterns (LRV, LPV)
Navigate relationships between objects
3. Historical/Temporal Patterns (LVAOD, Build Date, Date Calculations)
Work with dates and historical data
4. Data Transformation Patterns (Evaluate Expression, Concatenate, Arithmetic, Banding)
Transform and manipulate data
Let’s master all 16.
Category 1: Data Extraction Patterns
Pattern 1: LRV (Lookup Related Value) – Basic Data Traversal
What It Does:
Retrieves a field value from a related business object when the source is single-instance.
When to Use:
- Source field is single-instance
- You need one field from a related object
- Direct relationship (Worker → Manager → Email)
Formula Structure:
LRV
├── Source Field: Single-instance field
└── Related Value: Field from related object
Real-World Example: Get Manager’s Email
Requirement: Show each employee’s manager’s email address.
Data Relationship:
Worker → Manager (single-instance) → Email (field on Manager/Worker object)
Configuration:
Field Name: CF_LRV_Manager_Email
Field Type: Lookup Related Value
Source Field: Manager
Related Value: Email – Primary Work
Output:
| Employee | Manager | Manager Email |
|---|---|---|
| John Smith | Sarah Johnson | sarah.johnson@company.com |
| Jane Doe | Mike Chen | mike.chen@company.com |
Common LRV Use Cases:
Worker → Manager → Manager Name
Worker → Location → Location Address
Worker → Primary Position → Position Title
Worker → Cost Center → Cost Center ID
Job Profile → Job Family → Job Family Name
Organization → Manager → Manager Email
Pattern 2: ESI (Extract Static Instance) – Extracting from Multi-Instance
What It Does:
Extracts one instance from a multi-instance field based on criteria.
When to Use:
- Source field is multi-instance (worker has multiple jobs, multiple dependents, etc.)
- You need to isolate one specific instance (primary job, eldest dependent, most recent review)
- You’ll use this instance for further calculations
Formula Structure:
ESI
├── Source Field: Multi-instance field
├── Condition: Filter to identify the instance
└── Return: One extracted instance (now single-instance)
Real-World Example: Extract Primary Job
Requirement: Get worker’s primary job (not all jobs, just the primary).
The Problem:
Worker business object has “All Position / Jobs” field – multi-instance. A worker could have:
- Job 1: Software Engineer (Primary = True)
- Job 2: Technical Trainer (Primary = False)
You need only the primary job.
Configuration:
Field Name: CF_ESI_Primary_Job
Field Type: Extract Static Instance
Source Field: All Position / Jobs
Condition: Primary Job = True
Step-by-Step:
- Create Calculated Field for Report
- Select Extract Static Instance (ESI)
- Source: All Position / Jobs
- Add Condition: Primary Job Equals True
- Click OK
Returns: Single job instance (the primary one) that can now be used in LRV.
Common ESI Use Cases:
Extract Primary Job from All Jobs
Extract Most Recent Performance Review
Extract Eldest Dependent
Extract Latest Compensation Change
Extract Primary Benefit Election
Extract Current Leave of Absence
Pattern 3: ESI → LRV – The Power Combination
What It Does:
Combines ESI and LRV to extract one instance from multi-instance, then look up a related value.
When to Use:
- Source is multi-instance (need ESI first)
- You need a related value from the extracted instance (need LRV second)
Formula Structure:
ESI → LRV
├── Step 1: ESI extracts one instance from multi-instance field
└── Step 2: LRV looks up field from that instance
Real-World Example: Get Job Profile from Primary Job
Requirement: Show each employee’s job profile from their primary job only (ignore additional jobs).
Data Relationship:
textWorker
→ All Position / Jobs (multi-instance ❌ Can't LRV directly)
→ Job Profile (single-instance on each job)
Solution: Two Calculated Fields
CF 1: Extract Primary Job (ESI)
Field Name: CF_ESI_Primary_Job
Field Type: Extract Static Instance
Source: All Position / Jobs
Condition: Primary Job = True
CF 2: Get Job Profile from Primary Job (LRV)
Field Name: CF_LRV_Primary_Job_Profile
Field Type: Lookup Related Value
Source: CF_ESI_Primary_Job (the ESI field!)
Related Value: Job Profile
Output:
| Employee | CF_LRV_Primary_Job_Profile |
|---|---|
| John Smith | Software Engineer |
| Jane Doe | Product Manager |
| Mike Chen | Data Analyst |
Why This Works:
ESI converts multi-instance → single-instance, enabling LRV to function.
Pattern 4: ESI → LRV → LRV – Multi-Level Traversal
What It Does:
Chains multiple LRVs after ESI to traverse deep relationship hierarchies.
When to Use:
- You need to go 3+ levels deep in data relationships
- Starting from multi-instance field
Formula Structure:
ESI → LRV → LRV → LRV
├── Step 1: ESI extracts instance
├── Step 2: LRV gets related object A
├── Step 3: LRV gets related object B from A
└── Step 4: LRV gets final field from B
Real-World Example: Get Job Family from Primary Job
Requirement: Show each employee’s Job Family (not just Job Profile – go deeper).
Data Relationship:
Worker
→ All Position / Jobs (multi-instance)
→ Job Profile (single-instance)
→ Job Family (single-instance)
Solution: Three Calculated Fields
CF 1: Extract Primary Job (ESI)
Field Type: Extract Static Instance
Source: All Position / Jobs
Condition: Primary Job = True
CF 2: Get Job Profile (LRV)
Field Type: Lookup Related Value
Source: CF_ESI_Primary_Job
Return: Job Profile
CF 3: Get Job Family (LRV)
Field Type: Lookup Related Value
Source: CF_LRV_Primary_Job_Profile
Return: Job Family
Output:
| Employee | Job Profile | Job Family |
|---|---|---|
| John Smith | Software Engineer | Technology |
| Jane Doe | Product Manager | Product |
| Mike Chen | Data Analyst | Analytics & Insights |
Pattern 5: ARI (Aggregate Related Instances) – Collecting Multi-Instance Lists
What It Does:
Aggregates all instances from a multi-instance field into a new list.
When to Use:
- You need all instances (not just one like ESI)
- Create semicolon-separated lists
- Aggregate data across multiple related records
Formula Structure:
ARI
├── Source Field: Single or multi-instance field
├── Condition: Optional filter
└── Fields to Aggregate: What to collect from each instance
Real-World Example: List All Time Off Types Used
Requirement: Show a list of all time off types employee has taken (Sick, Vacation, PTO, etc.) in one field.
Data Relationship:
Worker
→ Time Off Completed Details (multi-instance)
→ Time Off Type (field: "Sick", "Vacation", "PTO")
Configuration:
Field Name: CF_ARI_All_Time_Off_Types
Field Type: Aggregate Related Instances
Source: Time Off Completed Details
Condition: (none – get all)
Fields to Aggregate: Time Off Type
Output:
| Employee | CF_ARI_All_Time_Off_Types |
|---|---|
| John Smith | PTO; Sick; Vacation |
| Jane Doe | Parental Leave; Vacation |
| Mike Chen | Sick |
Workday lists values separated by semicolons, alphabetically.
Advanced: ARI with Date Filter
Requirement: Only time offs in last 12 months.
Add Condition:
- Field: Time Off Start Date
- Operator: >=
- Value: Today – 365 days
Now ARI only aggregates recent time offs.
Pattern 6: ARI + Conditional Logic – Filtered Aggregation
What It Does:
Aggregates instances that meet specific criteria.
Real-World Example: List Only High Performance Ratings
Requirement: Show only ratings of 4 or 5 (exclude 1, 2, 3).
Configuration:
Field Name: CF_ARI_High_Performance_Ratings
Field Type: Aggregate Related Instances
Source: Performance Review Events
Condition: Performance Rating >= 4
Fields to Aggregate: Performance Rating; Review Date
Output:
| Employee | CF_ARI_High_Performance_Ratings |
|---|---|
| John Smith | 5 (2024-12-01); 4 (2023-12-01); 5 (2022-12-01) |
| Jane Doe | 4 (2024-12-01); 4 (2023-12-01) |
| Mike Chen | (blank – no ratings >= 4) |
Pattern 7: EMI (Edit Multi-Instance) – Advanced Multi-Instance Operations
What It Does:
Performs advanced operations on multi-instance fields including Subset, Union, Intersection, and Except.
When to Use:
- You need to filter multi-instance fields with complex criteria (Subset)
- Combine two multi-instance fields (Union)
- Find common instances between two multi-instance fields (Intersection)
- Find instances in one field but not another (Except)
Formula Structure:
EMI
├── Source Field: Multi-instance field
├── Operation Type: Subset, Union, Intersection, or Except
├── Condition: Filter criteria (for Subset)
└── Secondary Field: Second multi-instance field (for Union/Intersection/Except)
1. Subset (Default): Extract multiple instances that meet criteria (like ESI but returns multiple)
2. Union: Combine instances from two multi-instance fields
3. Intersection: Return only instances common to both fields
4. Except: Return instances in Field A that are NOT in Field B
Real-World Example 1: Extract All Directors and Above in Management Chain (Subset)
Requirement: Show all managers in worker’s supervisory chain who are Director-level or above.
Configuration:
Field Name: CF_EMI_Senior_Managers_Chain
Field Type: Edit Multi-Instance (EMI)
Operation Type: Subset
Source Field: Management Chain (multi-instance field)
Condition: Job Level >= Director
Output:
| Employee | CF_EMI_Senior_Managers_Chain |
|---|---|
| Analyst | Director of Engineering; VP Operations; Chief Technology Officer |
| Manager | VP Operations; Chief Technology Officer |
| Director | Chief Technology Officer |
Real-World Example 2: Combine Assigned and Inherited Roles (Union)
Requirement: Show ALL role assignments on a project (both assigned and inherited) in one field.
The Problem:
Workday delivers two separate fields:
- Role Assignments (only assigned roles)
- Inherited Role Assignments (only inherited roles)
You want both combined.
Configuration:
Field Name: CF_EMI_All_Roles_Combined
Field Type: Edit Multi-Instance (EMI)
Source Field 1: Role Assignments
Source Field 2: Inherited Role Assignments
Returns: Combined list of all roles (assigned + inherited)
Output:
| Project | CF_EMI_All_Roles_Combined |
|---|---|
| Project Alpha | Project Manager (Assigned); Business Analyst (Assigned); Stakeholder (Inherited); Finance Reviewer (Inherited) |
Real-World Example 3: Find Common Certifications (Intersection)
Requirement: Find certifications that appear in both worker’s active certifications AND required certifications for their job.
Configuration:
Field Type: Edit Multi-Instance (EMI)
Source Field 1: Worker Active Certifications
Source Field 2: Job Profile Required Certifications
Returns: Only certifications that appear in both lists (worker has required certs)
Real-World Example 4: Find Missing Certifications (Except)
Requirement: Show required certifications that worker does NOT yet have.
Configuration:
Field Type: Edit Multi-Instance (EMI)
Source Field 1: Job Profile Required Certifications
Source Field 2: Worker Active Certifications
Returns: Required certifications NOT in worker’s active certifications (missing certs)
Output:
| Employee | Job Profile | CF_EMI_Missing_Certifications |
|---|---|---|
| John Smith | Network Engineer | Cisco CCNA; CompTIA Security+ |
| Jane Doe | Project Manager | PMP Certification |
Why EMI is Powerful:
ESI extracts one instance. EMI extracts multiple instances or performs set operations on multi-instance fields.
Category 2: Historical & Temporal Patterns
Pattern 8: LVAOD (Lookup Value as of Date) – Historical Snapshots
What It Does:
Retrieves a field’s value as of a specific past date (not current value).
When to Use:
- You need historical data (salary 6 months ago, job title on hire date)
- Year-over-year comparisons
- Compliance/audit reports requiring point-in-time snapshots
Formula Structure:
LVAOD
├── Source Field: Field that changes over time (effective-dated)
├── As of Date: Specific date to retrieve value
└── Return: Historical value from that date
Real-World Example: Get Base Salary as of January 1st
Requirement: Show each employee’s base salary as of January 1st (not current salary).
Configuration:
Field Name: CF_LVAOD_Salary_Jan_1
Field Type: Lookup Value as of Date
Source: Base Salary
As of Date: 2025-01-01 (or use Build Date field)
Output:
| Employee | Current Salary | Salary Jan 1 | Increase YTD |
|---|---|---|---|
| John Smith | $95,000 | $90,000 | $5,000 |
| Jane Doe | $110,000 | $105,000 | $5,000 |
Why This Matters:
Without LVAOD, you’d need to manually export historical data or run reports on Jan 1 and save them.
Pattern 9: Build Date – Dynamic Date Construction
What It Does:
Constructs specific dates dynamically (first day of year, last day of prior month, etc.).
When to Use:
- Create date constants for LVAOD
- Dynamic report filters (always show “this month”)
- Calculate fiscal year dates
- Probationary period end dates
Formula Structure:
Build Date
├── Year: Specific or calculated (Current Year, Current Year - 1)
├── Month: Specific or calculated
└── Day: Specific or calculated
Real-World Example: First Day of Current Year
Configuration:
Field Name: CF_BD_First_Day_Current_Year
Field Type: Build Date
Year: Current Year
Month: 01 (January)
Day: 01
Returns: 2025-01-01 (updates automatically each year)
Common Build Date Patterns:
First Day of Current Year:
Year: Current Year, Month: 01, Day: 01
Last Day of Prior Month:
Year: Current Year, Month: Current Month - 1, Day: Last Day of Month
First Day of Fiscal Year (July 1):
Year: Current Year, Month: 07, Day: 01
Same Date Last Year:
Year: Current Year - 1, Month: Current Month, Day: Current Day
Probationary Period End Date (Hire + 90 days):
Use Date Calculation: Hire Date + 90 days
Using Build Date with LVAOD:
CF_BD_Jan_1 = Build Date (Current Year, 01, 01)
CF_LVAOD_Salary_Jan_1 = LVAOD(Base Salary, as of CF_BD_Jan_1)
Now salary comparison updates automatically each year.
Pattern 10: Date Calculations – Tenure, Age, Time Between Dates
What It Does:
Calculates differences between dates or adds/subtracts days/months/years.
When to Use:
- Employee tenure calculations
- Time since last promotion
- Age calculations
- Days until event
- Probationary period end date
Formula Structure:
Date Calculations
├── Operation: Difference, Add Days, Subtract Days, Add Months, etc.
├── Start Date: Earlier date
├── End Date: Later date (or Today)
└── Return Unit: Days, Months, Years
Real-World Example 1: Calculate Tenure in Years
Configuration:
Field Name: CF_DATE_Tenure_Years
Field Type: Date Calculations
Calculation Type: Difference in Years
Start Date: Hire Date (Original Hire Date)
End Date: Today
Decimal Places: 1
Output:
| Employee | Hire Date | Tenure (Years) |
|---|---|---|
| Mike Johnson | Jan 15, 2019 | 5.9 |
| Lisa Wang | Jun 1, 2021 | 3.6 |
| Tom Harris | Sep 12, 2023 | 1.3 |
Real-World Example 2: Probationary Period End Date
Configuration:
Field Name: CF_DATE_Probation_End
Field Type: Date Calculations
Source Date: Hire Date
Days to Add: 90
Returns: Hire Date + 90 days
Syntax Example: Add_Days([Hire_Date], 90)
More Date Calculation Examples:
Time Since Last Promotion (Months):
Calculation Type: Difference in Months
Start Date: Last Promotion Date
End Date: Today
Days Until Performance Review:
Calculation Type: Difference in Days
Start Date: Today
End Date: Next Review Date
Age Calculation:
Calculation Type: Difference in Years
Start Date: Date of Birth
End Date: Today
Decimal: 0
Pattern 11: LPV (Lookup Prior Value) – Before/After Comparison
What It Does:
Retrieves the previous value of a field (before most recent change).
When to Use:
- Comparing current vs. previous (salary before vs. after raise)
- Calculating change amounts
- Tracking transitions (previous job vs. current job)
Formula Structure:
LPV
├── Source Field: Field that tracks history
└── Return: Value before most recent change
Real-World Example: Calculate Salary Increase Amount
Requirement: Show salary increase from most recent compensation change.
CF 1: Get Previous Salary (LPV)
Field Name: CF_LPV_Previous_Salary
Field Type: Lookup Prior Value
Source: Base Salary
CF 2: Calculate Increase (Arithmetic)
Field Name: CF_NUM_Salary_Increase
Field Type: Numeric Calculation
Formula: Base Salary - CF_LPV_Previous_Salary
Output:
| Employee | Previous Salary | Current Salary | Increase |
|---|---|---|---|
| John Smith | $90,000 | $95,000 | $5,000 |
| Jane Doe | $105,000 | $110,000 | $5,000 |
| Mike Chen | $72,000 | $72,000 | $0 |
Category 3: Data Transformation Patterns
Pattern 12: IF-THEN-ELSE Logic (Evaluate Expression) – Conditional Logic
What It Does:
Returns different values based on conditions.
When to Use:
- Flag employees meeting criteria
- Categorize data into groups
- Create yes/no indicators
- Route business process approvals
Formula Structure:
Evaluate Expression
├── Condition 1: IF criteria
│ └── Then Return: Value if true
├── Condition 2: ELSE IF criteria
│ └── Then Return: Value if true
└── Else: Default value
Real-World Example: Flight Risk Flag
Requirement: Flag employees as “High Risk” if: tenure 3+ years, no promotion in 24+ months, rating 4+.
Configuration:
Field Name: CF_IF_Flight_Risk_Flag
Field Type: Evaluate Expression
Return Type: Text
Condition:
IF (Tenure >= 3 years)
AND (Months Since Promotion > 24)
AND (Performance Rating >= 4)
THEN "High Flight Risk"
ELSE "Standard Risk"
Step-by-Step:
- Create Calculated Field for Report
- Select Evaluate Expression
- Add Condition:
- IF: CF_DATE_Tenure_Years >= 3
- AND: CF_DATE_Months_Since_Promotion > 24
- AND: Performance Rating >= 4
- Then Return: “High Flight Risk”
- Else Return: “Standard Risk”
Output:
| Employee | Tenure | Last Promo | Rating | Flight Risk |
|---|---|---|---|---|
| Jane Smith | 4.2 | 30 mo ago | 4.5 | High Flight Risk |
| John Doe | 2.1 | 12 mo ago | 4.2 | Standard Risk |
Pattern 13: Nested IF Logic (Multi-Tier Categorization)
What It Does:
Handles multiple conditions in sequence (IF-ELSEIF-ELSEIF-ELSE).
Real-World Example: Performance Tier Assignment
Configuration:
Field Name: CF_IF_Performance_Tier
Field Type: Evaluate Expression
Logic:
IF Rating = 5 THEN "Exceptional"
ELSE IF Rating = 4 THEN "Strong Performer"
ELSE IF Rating = 3 THEN "Meets Expectations"
ELSE IF Rating = 2 THEN "Developing"
ELSE "Underperforming"
Best Practice: Order conditions by frequency (most common first) for better performance.
Pattern 14: Evaluate Expression Band – Range-Based Categorization
What It Does:
Assigns values to numeric ranges (salary bands, age groups, tenure tiers).
When to Use:
- Salary band assignment
- Age group categorization
- Tenure tier grouping
- Commission tier calculation
Formula Structure:
Evaluate Expression Band
├── Source Field: Numeric field
└── Bands: Define ranges and labels
Real-World Example: Salary Band Assignment
Configuration:
Field Name: CF_BAND_Salary_Tier
Field Type: Evaluate Expression Band
Source: Base Salary
Bands:
| Band Name | Minimum | Maximum |
|---|---|---|
| Entry Level | 0 | 50000 |
| Mid-Level | 50001 | 100000 |
| Senior | 100001 | 150000 |
| Executive | 150001 | 999999999 |
Output:
| Employee | Base Salary | Salary Band |
|---|---|---|
| Junior Analyst | $45,000 | Entry Level |
| Manager | $85,000 | Mid-Level |
| Senior Director | $135,000 | Senior |
| VP Operations | $190,000 | Executive |
Pattern 15: Text Concatenation – Building Formatted Strings
What It Does:
Combines multiple text fields into formatted string.
When to Use:
- Format full names (Last, First M.)
- Create address strings
- Build email formats
- Generate file export strings
Formula Structure:
Concatenate Text
├── Field 1: First text element
├── Literal: ", " (separator)
├── Field 2: Second text element
└── Continue as needed
Real-World Example: Format Name as “Last, First M.”
Configuration:
Field Name: CF_CT_Full_Name_Formatted
Field Type: Concatenate Text
Formula: Last Name + “, ” + First Name + ” ” + Middle Initial
Elements:
- Last Name (field)
- “, ” (literal text)
- First Name (field)
- ” ” (literal space)
- Substring(Middle Name, 1, 1) – middle initial
Output:
| First | Middle | Last | Formatted Name |
|---|---|---|---|
| John | Alexander | Smith | Smith, John A. |
| Sarah | Lee | Lee, Sarah | |
| Michael | James | Rodriguez | Rodriguez, Michael J. |
Pattern 16: Arithmetic Calculations – Math Operations
What It Does:
Performs basic math: +, -, ×, ÷.
When to Use:
- Calculate annual salary from hourly
- Compute bonus amounts
- Determine compensation ratios
- Project costs
Real-World Example: Annual Salary from Hourly Rate
Configuration:
Field Name: CF_NUM_Annual_Salary_Equivalent
Field Type: Numeric Calculation
Formula: Hourly Rate × 40 × 52
Output:
| Employee | Hourly Rate | Annual Equivalent |
|---|---|---|
| Tech Support | $22.50 | $46,800 |
| Warehouse | $18.00 | $37,440 |
More Examples:
Total Compensation:
textBase Salary + Target Bonus + Equity Value
Compa-Ratio:
textBase Salary ÷ Salary Range Midpoint
Bonus as % of Base:
text(Bonus ÷ Base Salary) × 100
Real-World Report: Retention Risk Analysis
Business Requirement:
“Show employees with 3+ years tenure, performance 4+, earning below 90th percentile for role as of January 1, no promotion in 24+ months, all managers in their chain at Director level+. Show formatted name, tenure, time since promotion, historical salary, current salary, and risk score.”
Solution: Multi-Pattern Report Using 13 Calculated Fields
CF 1: Extract Primary Job (ESI)
Field Type: Extract Static Instance
Source: All Position / Jobs
Condition: Primary Job = True
CF 2: Get Job Profile (LRV)
Field Type: Lookup Related Value
Source: CF_ESI_Primary_Job
Return: Job Profile
CF 3: Extract Senior Managers in Chain (EMI)
Field Type: Edit Multi-Instance (EMI)
Operation Type: Subset
Source: Management Chain
Condition: Job Level >= Director
CF 4: Calculate Tenure (Date Calculation)
Field Type: Date Calculations
Operation: Difference in Years
Start: Hire Date
End: Today
Decimals: 1
CF 5: Calculate Months Since Promotion (Date Calculation)
Field Type: Date Calculations
Operation: Difference in Months
Start: Last Promotion Date
End: Today
CF 6: Build Date – Jan 1 (Build Date)
Field Type: Build Date
Year: Current Year
Month: 01
Day: 01
CF 7: Salary as of Jan 1 (LVAOD)
Field Type: Lookup Value as of Date
Source: Base Salary
As of Date: CF_BD_Jan_1
CF 8: Salary Increase YTD (Arithmetic)
Field Type: Numeric Calculation
Formula: Base Salary - CF_LVAOD_Salary_Jan_1
CF 9: Is Below 90th Percentile (True/False)
Field Type: True/False Condition
Condition: Base Salary < Job Profile 90th Percentile Salary
CF 10: Formatted Name (Concatenate)
Field Type: Concatenate Text
Formula: Last Name + ", " + First Name + " " + Middle Initial
CF 11: Flight Risk Score (Nested IF)
Field Type: Evaluate Expression
Logic: Component scores from tenure, rating, compa, promotion
Returns: 0-10 risk score
CF 12: Risk Category (Evaluate Expression Band)
Field Type: Evaluate Expression Band
Source: CF_Flight_Risk_Score
Bands:
8-10: Critical Risk
5-7: High Risk
3-4: Moderate Risk
0-2: Low Risk
CF 13: Meets All Criteria (True/False for filtering)
Field Type: True/False Condition
Condition:
(CF_Tenure >= 3) AND
(Performance Rating >= 4) AND
(CF_Is_Below_90th = TRUE) AND
(CF_Months_Since_Promo >= 24)
Report Filter: CF_Meets_All_Criteria = TRUE
Report Columns:
- CF_CT_Full_Name_Formatted
- CF_DATE_Tenure_Years
- Performance Rating
- CF_LVAOD_Salary_Jan_1
- Base Salary
- CF_NUM_Salary_Increase_YTD
- CF_DATE_Months_Since_Promotion
- CF_EMI_Senior_Managers_Chain
- CF_Flight_Risk_Score
- CF_BAND_Risk_Category
Output:
| Employee | Tenure | Rating | Salary Jan 1 | Current | YTD Inc | Mo Since Promo | Senior Mgmt Chain | Risk | Category |
|---|---|---|---|---|---|---|---|---|---|
| Smith, Jane A. | 5.2 | 4.5 | $90K | $92K | $2K | 36 | Dir Eng; VP Ops; CTO | 9 | Critical |
| Rodriguez, Michael J. | 4.1 | 4.8 | $86K | $88K | $2K | 30 | VP Ops; CTO | 8 | Critical |
| Lee, Sarah | 3.8 | 4.2 | $76K | $78K | $2K | 28 | Dir Product; VP Product | 7 | High |
Patterns Used: ESI, LRV, EMI, Date Calculations, LVAOD, Build Date, Arithmetic, True/False, Concatenate, Nested IF, Expression Band
Result: Executive-ready report built entirely in Workday. No Excel. Updates daily automatically.
Pattern Selection Decision Tree
Start Here: What type of field is your source data?
Single-Instance Source
Question: Do you need current or historical value?
Current → Use LRV (Pattern 1)
Historical → Use LVAOD (Pattern 8)
Previous value → Use LPV (Pattern 11)
Multi-Instance Source
Question: Do you need ONE instance or MULTIPLE instances?
One Instance → Use ESI (Pattern 2)
- Then likely ESI → LRV (Pattern 3)
- Or ESI → LRV → LRV (Pattern 4) for deep traversal
Multiple Instances → Choose operation type:
- All instances with filter → Use ARI (Pattern 5) or ARI + Condition (Pattern 6)
- Multiple instances with complex filter → Use EMI – Subset (Pattern 7)
- Combine two multi-instance fields → Use EMI – Union (Pattern 7)
- Find common instances → Use EMI – Intersection (Pattern 7)
- Find differences → Use EMI – Except (Pattern 7)
Working with Dates
Question: What do you need?
Build specific date → Build Date (Pattern 9)
Calculate date difference → Date Calculations (Pattern 10)
Add/subtract days → Date Calculations – Add Days (Pattern 10)
Get historical value → LVAOD (Pattern 8)
Compare to previous → LPV (Pattern 11)
Transforming Data
Question: What transformation?
Conditional logic (if-then) → Evaluate Expression (Pattern 12)
Multiple conditions → Nested IF (Pattern 13)
Range categorization → Expression Band (Pattern 14)
Combine text → Concatenate (Pattern 15)
Math operations → Arithmetic (Pattern 16)
Best Practices
1. Build Incrementally
Don’t try to build ESI → LRV → LRV → LVAOD in one step.
Build and test each field individually:
- Build ESI, test output
- Build first LRV using ESI, test
- Build second LRV, test
- Build LVAOD, test
Why: Easier to debug when broken into components.
2. Follow Naming Conventions
Use standardized prefixes indicating pattern type:
CF_ESI_Primary_Job
CF_LRV_Job_Profile
CF_ARI_All_Time_Off_Types
CF_EMI_Senior_Managers_Chain
CF_LVAOD_Salary_Jan_1
CF_DATE_Tenure_Years
CF_IF_Flight_Risk_Flag
CF_CT_Full_Name_Formatted
CF_NUM_Annual_Salary
CF_BAND_Salary_Tier
CF_TF_Is_High_Performer
CF_BD_First_Day_Year
CF_LPV_Previous_Manager
Why: Makes report structure self-documenting.
3. Document Data Relationships
Before building, map the relationship:
Worker → All Position / Jobs (multi) → Job Profile → Job Family
↑ ↑ ↑ ↑
Start ESI needed LRV needed LRV needed
Then identify patterns:
- Multi-instance start = ESI or EMI
- Two levels deep = ESI → LRV → LRV
- Need all instances = ARI or EMI
Why: Prevents building wrong pattern.
4. Handle NULL Values
Always account for missing data:
❌ Bad:
Base Salary + Bonus
(Returns NULL if Bonus is blank)
✅ Good:
IF Bonus is Not Blank
THEN (Base Salary + Bonus)
ELSE Base Salary
5. Understand Performance Impact
Pattern Speed (Fast → Slow):
- LRV – Fastest
- ESI – Fast
- Date Calculations – Fast
- Arithmetic – Fast
- LVAOD – Moderate (historical lookup)
- EMI – Moderate to Slow (depends on operation)
- ARI – Slower (aggregates all instances)
- Nested LRVs (4+ levels) – Slowest
Best Practice: If report has 10,000 rows with multiple ARIs or EMIs, schedule overnight.
6. Reuse System-Wide Fields
Report-Level: Only available in one report
System-Wide: Available tenant-wide
Make system-wide if used in 3+ reports:
CF_ESI_Primary_Job (reuse across 20 reports)
CF_LRV_Primary_Job_Profile
CF_DATE_Tenure_Years
CF_LVAOD_Salary_Year_Start
CF_EMI_Senior_Managers
Why: Don’t rebuild same ESI or EMI 15 times.
7. Test Edge Cases
Test with workers who have:
- No manager (NULL handling)
- Multiple jobs (multi-instance complexity)
- No performance reviews (empty multi-instance)
- Future hire dates (LVAOD with future dates)
- Recently terminated (historical data access)
- Blank middle names (text concatenation)
- Zero hourly rates (division by zero)
- Empty management chains (EMI returns no instances)
Why: Production data is messier than test data.
Common Mistakes
Mistake 1: Using LRV on Multi-Instance Source
Problem:
Source: All Position / Jobs (multi-instance)
LRV: Job Profile
Error: Workday doesn’t know which job to use.
Fix: Add ESI first to extract one job, or use EMI if you need multiple jobs.
Mistake 2: Choosing ESI When You Need Multiple Instances
Problem: Using ESI when you actually need all instances (or multiple filtered instances).
Wrong:
ESI: Extract Primary Job
(But you actually need all jobs at Director level+)
Correct:
textEMI - Subset: Extract all jobs where Job Level >= Director
- ESI: Returns one instance
- EMI: Returns multiple instances
Mistake 3: Forgetting to Chain Fields
Wrong:
Source: Worker
LRV: Job Family (doesn't exist directly on Worker)
Correct:
ESI: Extract Primary Job
LRV: Get Job Profile from Job
LRV: Get Job Family from Job Profile
Mistake 4: LVAOD on Non-Effective-Dated Fields
Problem: Using LVAOD on field without effective-dating history.
Fields WITH effective-dating:
- Compensation
- Job History
- Position
- Location
- Organization assignments
Fields WITHOUT:
- Name
- Email (unless configured)
- Custom fields (unless enabled)
Fix: Verify field tracks history before using LVAOD.
Mistake 5: Not Using EMI Operation Types
Problem: Using EMI with only Subset operation when Union/Intersection/Except would be better.
Example: Combining assigned and inherited roles.
Inefficient:
ARI: Role Assignments
ARI: Inherited Role Assignments
(Two separate fields in report)
Better:
EMI - Union: Combine Role Assignments + Inherited Role Assignments
(One elegant field)
Mistake 6: ARI/EMI Without Condition on Large Datasets
Problem:
ARI Source: All Job History (worker with 20 jobs over 30 years)
Returns 20 jobs – messy output.
Fix: Add filter:
Condition: Effective Date >= (Today - 1825 days) [last 5 years]
Mistake 7: Not Testing Condition Order in Nested IF
Problem: Putting rare condition first.
Bad:
IF Rating = 5 THEN "Exceptional" (5% of employees)
ELSE IF Rating = 3 THEN "Meets" (70% of employees)
Workday checks every row against Rating = 5 first (slow).
Good:
IF Rating = 3 THEN "Meets" (70% - most common first)
ELSE IF Rating = 4 THEN "Strong"
ELSE IF Rating = 5 THEN "Exceptional"
Why: Workday stops at first TRUE condition.
Pattern Cheat Sheet
| Pattern | Type | Source | Returns | Primary Use |
|---|---|---|---|---|
| LRV | Traversal | Single | Single field | Simple lookup |
| ESI | Extraction | Multi | Single instance | Extract one from many |
| ESI → LRV | Combined | Multi | Single field | Extract + lookup |
| ESI → LRV → LRV | Combined | Multi | Single field (deep) | Multi-level traversal |
| ARI | Aggregation | Multi | Multi-instance list | Collect all instances |
| ARI + Condition | Aggregation | Multi | Filtered list | Filtered collection |
| EMI | Advanced Multi | Multi | Multi-instance list | Subset/Union/Intersection/Except |
| LVAOD | Historical | Single | Historical value | Point-in-time data |
| Build Date | Date | N/A | Constructed date | Dynamic dates |
| Date Calc | Date | Two dates | Difference or new date | Tenure, age, add days |
| LPV | Historical | Single | Previous value | Before/after |
| Evaluate Expr | Transform | Any | Conditional value | IF-THEN logic |
| Nested IF | Transform | Any | Multi-tier value | Complex conditions |
| Expression Band | Transform | Numeric | Range label | Salary bands, tiers |
| Concatenate | Transform | Text | Combined text | Format strings |
| Arithmetic | Transform | Numeric | Calculated number | Math operations |
Your Learning Path
Week 1: Master LRV + Date Calculations
Week 2: Add ESI
Week 3: Multi-Level Traversal
Week 4: Historical Data
Week 5: Aggregation with ARI
Week 6: Advanced Multi-Instance with EMI
- Learn EMI operations: Subset, Union, Intersection, Except
- Practice: Senior managers in chain, combined role assignments
Week 7: Complex Transformations
- Combine IF logic, bands, concatenation
- Practice: Risk scoring, categorization
Week 8: Combined Patterns
- Build expert reports using 8+ patterns
- Practice: Full retention risk analysis
Final Thoughts
These 16 patterns are the professional toolkit every expert Workday report writer uses.
Beginners build simple reports with delivered fields and export to Excel for everything else.
Experts build reports that:
- Extract exactly the right instance from multi-instance chaos (ESI)
- Perform advanced multi-instance operations (EMI with Union/Intersection/Except)
- Traverse complex relationships effortlessly (LRV chains)
- Pull historical snapshots for compliance (LVAOD + Build Date)
- Aggregate collections into actionable lists (ARI)
- Compare previous vs. current seamlessly (LPV)
- Apply conditional logic dynamically (Evaluate Expression)
- Calculate dates and time differences (Date Calculations)
- Transform raw data into formatted insights (Concatenate, Arithmetic, Banding)
The CHRO who asked for that impossible retention risk report? You built it in 60 minutes using 13 calculated field patterns. It runs daily. Executives live in it. HR uses it to prevent regrettable attrition.
That’s what pattern mastery unlocks.
Start with Pattern 1 (LRV). Master it this week.
Then add one pattern per week. By week 8, you’ll build reports that make people think you have a PhD in Workday.
Because you’ll have something better: pattern mastery.
Now go build something incredible.
Disclaimer: This guide represents original content based on Workday consulting experience and publicly available documentation. Calculated field patterns and functionality vary based on Workday tenant version and configuration. Always test thoroughly in sandbox before deploying to production. Consult Workday Community for version-specific syntax and best practices.