Introduction
The Oracle Fusion HCM Position Table is a core technical object that every HCM consultant, reporting analyst, and integration developer eventually works with. Whether you’re building OTBI reports, writing BI Publisher extracts, or developing HDL loads, understanding how position data is stored in Fusion is critical.
In Oracle Fusion HCM (26A), the position model is tightly integrated with workforce structures, security, and approvals. The Position Table acts as the backbone for storing position-related attributes such as job, department, location, headcount, and synchronization settings.
From a consultant’s perspective, this is not just a table—it’s a central data object driving workforce planning, budgeting, and approvals.
What is Oracle Fusion HCM Position Table?
The Position Table in Oracle Fusion HCM refers primarily to the database table:
PER_POSITIONS_F
This is a date-effective table that stores all position-related records.
Key Characteristics:
Date Effective (Start & End Dates)
Supports multiple versions of the same position
Stores organizational attributes
Links with jobs, departments, grades, and locations
Used across modules like:
Workforce Structures
Recruiting
Workforce Compensation
Approvals
Important Related Tables
| Table Name | Purpose |
|---|---|
| PER_POSITIONS_F | Core position details |
| PER_POSITIONS_TL | Translated position names |
| PER_ALL_ASSIGNMENTS_M | Employee assignment linked to position |
| HR_ALL_ORGANIZATION_UNITS_F | Department details |
| PER_JOBS_F | Job information |
| PER_LOCATION_DETAILS_F | Location data |
Why Oracle Fusion HCM Position Table is Important
In real implementations, the Position Table becomes critical in:
Position Control Model
Headcount Planning
Approval Workflows
Security Profiles
Reporting & Analytics
If you don’t understand this table, you cannot:
✔ Build accurate reports
✔ Debug assignment issues
✔ Develop integrations using HDL or APIs
✔ Configure position synchronization
Key Concepts Explained Clearly
1. Date Effectivity
The Position Table uses:
EFFECTIVE_START_DATE
EFFECTIVE_END_DATE
This allows tracking of changes over time.
👉 Example:
Position A created on Jan 1
Updated department on March 1
Both versions exist in the table.
2. Position vs Assignment
Position → Organizational placeholder
Assignment → Employee record
Link:
3. Position Synchronization
When enabled:
Changes in position automatically update assignments
Example:
Change department in position
Employee assignment updates automatically
4. Headcount Control
Fields:
MAX_PERSONS
FTE (Full-Time Equivalent)
Used in:
Budgeting
Hiring approvals
5. Active vs Inactive Positions
Controlled using:
ACTIVE_STATUS
Hiring allowed flag
Real-World Integration Use Cases
Use Case 1: BI Publisher Report for Position Hierarchy
Client requirement:
Extract all positions with reporting hierarchy
Tables used:
PER_POSITIONS_F
Supervisor Position ID
Use Case 2: HDL Load for Position Creation
Scenario:
Bulk upload 10,000 positions
File:
Position.dat
Mapping:
PositionCode → POSITION_CODE
Department → ORGANIZATION_ID
Use Case 3: OIC Integration for Position Sync
Using OIC Gen 3:
Trigger: Position created
Action: Send to third-party workforce planning system
Flow:
REST API call from Fusion
OIC transformation
Target system update
Architecture / Technical Flow
How Position Data Flows
User creates position via UI
Data stored in PER_POSITIONS_F
Linked to:
Job
Department
Location
Assignment references position
Reports & integrations fetch data
Data Flow Diagram (Conceptual)
Prerequisites
Before working with Position Table:
Functional Setup
Enterprise Structure configured
Jobs created
Departments defined
Locations configured
Technical Access
BI Publisher access
OTBI access
SQL access (PaaS / BICC / ATP)
Step-by-Step Build Process
Scenario: Extract Position Data Using BI Publisher
Step 1 – Navigate to BI Publisher
Navigator → Tools → Reports and Analytics
Step 2 – Create Data Model
Select SQL Query
Use sample query:
P.POSITION_ID,
P.POSITION_CODE,
PT.NAME,
P.EFFECTIVE_START_DATE,
P.EFFECTIVE_END_DATE,
P.ACTIVE_STATUS
FROM
PER_POSITIONS_F P,
PER_POSITIONS_TL PT
WHERE
P.POSITION_ID = PT.POSITION_ID
AND PT.LANGUAGE = ‘US’
Step 3 – Define Parameters
Example:
Position Code
Effective Date
Step 4 – Create Report Layout
Use RTF Template
Map fields
Step 5 – Save and Run
Submit report
Validate output
Testing the Technical Component
Test Scenario
Create a position:
Position Code: FIN_MGR_001
Department: Finance
Job: Finance Manager
Validation Steps
Query PER_POSITIONS_F
Verify:
Position exists
Correct effective dates
Active status = ‘A’
Expected Result
Position visible in UI
Assignment can be created
Report shows correct data
Common Errors and Troubleshooting
1. Missing Position in Report
Cause:
Wrong effective date filter
Fix:
2. Duplicate Records
Cause:
Multiple effective-dated rows
Fix:
Use:
3. Assignment Not Updating
Cause:
Synchronization disabled
Fix:
Enable:
Position Synchronization
4. HDL Load Failure
Cause:
Invalid Department ID
Fix:
Validate ORGANIZATION_ID
Best Practices
1. Always Handle Date Effectivity
Never write queries without:
2. Use TL Table for Names
PER_POSITIONS_F → IDs
PER_POSITIONS_TL → Names
3. Avoid Hardcoding IDs
Use joins instead of static values.
4. Use Secured Views in Production
Instead of direct tables:
Use secured views like PER_POSITIONS_F_V
5. Optimize Performance
Avoid unnecessary joins
Use indexed columns like POSITION_ID
6. Validate Data Before HDL Loads
Always cross-check:
Job ID
Department ID
Location ID
Real Implementation Scenarios
Scenario 1: Banking Client – Position Control
Strict headcount control
Positions must be approved before hiring
Solution:
MAX_PERSONS enforced
Approval workflow configured
Scenario 2: IT Company – Dynamic Workforce
Frequent restructuring
Positions change often
Solution:
Date-effective updates
Synchronization enabled
Scenario 3: Manufacturing Client – Multi-location Setup
Same position across plants
Solution:
Separate positions per location
Linked to location ID
Frequently Asked Interview Questions
1. What is PER_POSITIONS_F?
It is the core table storing position data in Oracle Fusion HCM.
2. Why is it date-effective?
To track historical and future changes.
3. Difference between Position and Job?
Job → Role definition
Position → Specific slot in organization
4. How is Position linked to Assignment?
Using POSITION_ID.
5. What is Position Synchronization?
Automatic update of assignment when position changes.
6. What is MAX_PERSONS?
Defines headcount limit.
7. What is FTE?
Full-time equivalent value.
8. Which table stores position names?
PER_POSITIONS_TL
9. How to get active position?
Use effective date filter.
10. What is POSITION_CODE?
Unique identifier for position.
11. How to load positions?
Using HDL Position.dat file.
12. What happens if position is inactive?
Cannot assign employees.
13. How to avoid duplicate records?
Use ROW_NUMBER logic.
14. What is ORGANIZATION_ID?
Department reference.
15. Which tool is used for reporting?
OTBI / BI Publisher
Expert Tips
Always validate position hierarchy before reporting
Use OIC Gen 3 for real-time integrations
Avoid direct table access in SaaS production
Understand business model (Position vs Job model) before design
Debug issues using SQL first before UI
Summary
The Oracle Fusion HCM Position Table (PER_POSITIONS_F) is one of the most critical technical components in the HCM data model. It connects workforce structures, assignments, approvals, and reporting.
From real project experience:
Most reporting issues come from incorrect joins
Most integration failures come from wrong IDs
Most functional issues come from misunderstanding synchronization
If you master this table:
✔ You can build powerful reports
✔ You can debug production issues quickly
✔ You can design better integrations
FAQs
1. Can multiple employees share one position?
Yes, based on MAX_PERSONS value.
2. Is position mandatory in Fusion HCM?
No, depends on business model (Position vs Job model).
3. How to track position history?
Using effective start and end dates.
For more detailed reference, you can explore Oracle’s official documentation: