
Contract revenue forecasting becomes difficult when finance teams manage everything in spreadsheets.
At first, the spreadsheet may look simple. There are contract rows, unit volumes, unit prices, FX rates, revenue types, and some revenue recognition logic. But once the business needs quarterly forecasting, multi-period revenue recognition, currency conversion, and reporting by planning dimensions, the spreadsheet becomes hard to maintain.
This is where Workday Adaptive Planning can help.
At EPM Logic, we help finance teams move contract revenue forecasting from Excel into Workday Adaptive Planning. The goal is not just to recreate a spreadsheet. The goal is to build a model that FP&A teams can validate, explain, and use during planning cycles.
This blog explains a generic solution pattern for building a contract revenue forecasting model in Workday Adaptive Planning using a modeled sheet and a cube sheet.
No client-specific names, contract numbers, or sensitive data are used here. The example uses generic dimensions and sample numbers only.
What This Solution Solves
Many finance teams have revenue forecast logic sitting in Excel.
The spreadsheet usually handles:
Contract-level detail
Unit volumes by quarter
Unit price
Billing amount
Revenue recognition timing
FX conversion
Revenue summary by business view
This works when there are only a few rows. But as the process grows, common problems appear.
Finance users may not know which version of the spreadsheet is final. Revenue timing formulas may be hard to audit. Manual pivots may be needed for every review. Source data may come from Workday or another system, but the forecast logic still sits outside the planning model.
A Workday Adaptive Planning solution can move this process into a controlled planning model.
The model can:
Store contract-line detail
Calculate billing by quarter
Calculate recognized revenue by quarter
Convert local currency to USD
Summarize output by business dimensions
Support future integration from Workday or another source system
High-Level Design
A good design separates detail calculation from summary reporting.
For this solution pattern, we use two main layers.
1. Contract Revenue Detail Modeled Sheet
The modeled sheet stores the contract-line detail.
Each row represents a contract line or revenue line.
The modeled sheet holds the row-level assumptions and performs the calculations.
Example fields include:
Contract reference
Contract line
Revenue type
Business segment
Customer segment
Region
Currency
FX rate
Spread quarters
Unit price
Units by quarter
The modeled sheet is the calculation engine.
2. Revenue Forecast Summary Cube Sheet
The cube sheet summarizes the modeled sheet output.
It allows users to review values by:
Planning level
Time
Revenue type
Business segment
Customer segment
Region
Account
The cube sheet is the reporting layer. It is not where the contract rows are maintained.
Why a Modeled Sheet Is Needed
Contract revenue forecasting is usually row-based.
Each contract line can have its own assumptions.
One contract line may recognize revenue immediately. Another may recognize revenue over 40 quarters. Another may have a different unit price, FX rate, or revenue type.
This makes a modeled sheet a better fit than a standard sheet or cube-only design.
The modeled sheet lets finance users keep contract-line details visible while still calculating quarterly values.
Example Planning Dimensions
For a public-safe design, use generic dimension names.
Typical dimensions may include:
Revenue Type
Business Segment
Customer Segment
Region
Planning Level
Time
These dimensions let finance teams summarize revenue in different ways.
For example, a user can review recognized revenue by revenue type, then filter by region or customer segment.
Source Data Required
The source data can come from Excel during a POC. In production, it can come from Workday or another system.
Typical source fields include:
Contract reference
Contract line
Revenue type
Business segment
Customer segment
Region
Currency
FX rate
Spread quarters
Unit price
Quarterly units
The model should avoid loading final calculated revenue unless there is a specific reason. It is usually better to load the source drivers and let Adaptive calculate the output.
Key Modeled Sheet Accounts
The modeled sheet contains input accounts and calculated accounts.
Units
Units is the main volume input.
It is a timespan account because units change by quarter.
Example:
| Period | Units |
|---|---|
| Period 1 | 5,000 |
| Period 2 | 10,000 |
| Period 3 | 15,000 |
| Period 4 | 20,000 |
Billing Amount
Billing Amount is calculated from Units and Unit Price.
Formula:
Units × Unit Price
Example:
| Period | Units | Unit Price | Billing Amount |
|---|---|---|---|
| Period 1 | 5,000 | 28.00 | 140,000 |
| Period 2 | 10,000 | 28.00 | 280,000 |
| Period 3 | 15,000 | 28.00 | 420,000 |
| Period 4 | 20,000 | 28.00 | 560,000 |
This gives the billing value in local currency.
Billing Amount USD
Billing Amount USD converts billing into USD or reporting currency.
Formula:
Billing Amount × FX Rate
Example:
Billing Amount = 140,000
FX Rate = 1.16
Billing Amount USD:
140,000 × 1.16 = 162,400
Recognized Revenue
Recognized Revenue is the amount of revenue recognized in each period.
This is not always the same as Billing Amount.
For immediate revenue, recognized revenue equals billing in the same period.
For spread revenue, recognized revenue is spread over future periods.
Recognized Revenue USD
Recognized Revenue USD converts recognized revenue into USD or reporting currency.
Formula:
Recognized Revenue × FX Rate
Revenue Recognition Logic
The most important part of the model is revenue timing.
A contract revenue model may need multiple recognition methods.
Immediate Recognition
For some revenue types, billing and revenue happen in the same period.
Example:
| Period | Billing Amount | Recognized Revenue |
|---|---|---|
| Period 1 | 140,000 | 140,000 |
| Period 2 | 280,000 | 280,000 |
| Period 3 | 420,000 | 420,000 |
This is common where the revenue is recognized immediately.
Multi-Period Recognition
For some revenue types, billing is recognized over multiple future periods.
Example:
Billing Amount = 140,000
Recognition period = 40 quarters
Revenue recognized per quarter:
140,000 / 40 = 3,500
So the billing amount is large, but recognized revenue is smaller each quarter because it is spread over time.
Delayed Recognition Example
Some models need revenue recognition to begin after the billing period.
Example:
| Period | Billing Amount | Recognized Revenue |
|---|---|---|
| Period 1 | 140,000 | 0 |
| Period 2 | 280,000 | 3,500 |
| Period 3 | 420,000 | 10,500 |
| Period 4 | 560,000 | 21,000 |
| Period 5 | 700,000 | 35,000 |
The logic is:
Period 2 revenue:
Period 1 Billing / 40140,000 / 40 = 3,500
Period 3 revenue:
(Period 1 Billing + Period 2 Billing) / 40(140,000 + 280,000) / 40 = 10,500
Period 4 revenue:
(Period 1 Billing + Period 2 Billing + Period 3 Billing) / 40= 21,000
This is a common place where Excel logic must be carefully translated into Adaptive.
Why Billing and Revenue Are Different
Billing and recognized revenue answer different questions.
Billing shows the contract amount generated by units and price.
Recognized revenue shows the portion of that billing that is recognized in a period based on revenue timing rules.
For immediate revenue, billing and revenue may be the same.
For long-term revenue recognition, billing and revenue are usually different.
This distinction is important for FP&A because leadership may ask both:
How much contract value is expected?
How much revenue is recognized in each quarter?
The model should support both views.
Building the Modeled Sheet
In Workday Adaptive Planning, the modeled sheet should hold the contract-level detail.
A clean modeled sheet may include these columns:
Contract Reference
Contract Line
Revenue Type
Business Segment
Customer Segment
Region
Currency
FX Rate
Spread Quarters
Unit Price
Units
Then the modeled accounts calculate:
Billing Amount
Billing Amount USD
Recognized Revenue
Recognized Revenue USD
For the POC, finance users can manually load a small Excel sample.
For production, the same structure can be loaded from Workday or another source.
Handling Spread Logic in Adaptive
There are two ways to handle revenue recognition logic.
Option 1: Spread Account
A spread account can work when the source account and timing pattern fit Adaptive’s spread setup.
For example:
Immediate recognition:
1=1
Straight-line 40-quarter recognition:
1:40=1/40
This works when revenue starts in the same period as the source.
Option 2: Calculated Revenue Account
A calculated account may be better when the timing logic is more specific.
For example, if revenue starts one period after billing, a calculated account can use prior-period billing.
Generic logic:
If Spread Quarters = 1: Recognized Revenue = Billing AmountIf Spread Quarters = 40: Recognized Revenue = prior 40 periods of Billing Amount / 40
This helps match Excel logic when revenue recognition starts after the billing period.
Validating the Modeled Sheet
Always validate the modeled sheet before building the cube.
This is one of the most important implementation lessons.
Start with one sample row.
Check:
Units
Unit Price
Billing Amount
FX Rate
Billing Amount USD
Recognized Revenue
Recognized Revenue USD
For immediate revenue rows, confirm:
Recognized Revenue = Billing Amount
For spread revenue rows, confirm:
Recognized Revenue follows the expected timing
Do this by comparing the modeled sheet output against the source Excel file period by period.
Example Validation Scenario
Here is a generic validation example.
Assumptions:
Revenue Type = Service Revenue
Business Segment = Segment A
Customer Segment = Segment B
Region = Region A
Unit Price = 28.00
FX Rate = 1.16
Spread Quarters = 40
| Period | Units | Billing Amount | Recognized Revenue | Recognized Revenue USD |
|---|---|---|---|---|
| Period 1 | 5,000 | 140,000 | 0 | 0 |
| Period 2 | 10,000 | 280,000 | 3,500 | 4,060 |
| Period 3 | 15,000 | 420,000 | 10,500 | 12,180 |
| Period 4 | 20,000 | 560,000 | 21,000 | 24,360 |
| Period 5 | 25,000 | 700,000 | 35,000 | 40,600 |
This confirms:
Billing uses Units × Unit Price.
Revenue recognition is delayed and spread over time.
USD values use the FX rate.
Building the Cube Summary
Once the modeled sheet is correct, build the cube sheet.
The cube sheet gives finance users a summary view.
Typical cube dimensions:
Revenue Type
Business Segment
Customer Segment
Region
Planning Level
Time
Typical cube accounts:
Units
Billing Amount
Billing Amount USD
Recognized Revenue
Recognized Revenue USD
The cube should not replace the modeled sheet. It should summarize the modeled sheet output.
Why Cube Formulas May Need a Driver
In some Adaptive builds, cube calculated accounts do not return values unless there is a valid cube intersection.
A standard cube account can be used as a calculation driver.
This driver is not a business measure. It simply tells Adaptive which cube intersections should calculate.
The cube calculated accounts then pull from the modeled sheet using account references with matching dimension context.
Generic formula pattern:
If Calculation Driver = 0, return 0, else pull modeled sheet value
For example:
If driver is active, pull Units from the modeled sheet for the same time, level, revenue type, business segment, customer segment, and region.
Why Dimension Modifiers Matter
Modeled sheet rows are stored with dimensions.
The cube summarizes by those same dimensions.
If the cube formula does not include dimension context, Adaptive may not know which modeled sheet rows belong to the selected cube intersection.
A cube formula may need modifiers like:
Time = this
Level = this
Revenue Type = this
Business Segment = this
Customer Segment = this
Region = this
This tells Adaptive:
Pull the modeled sheet value for the same cube intersection.
Cube Validation Example
After the cube is built, select one dimension combination and compare the cube output to the modeled sheet.
Example filter:
Revenue Type = Service Revenue
Business Segment = Segment A
Customer Segment = Segment B
Region = Region A
Planning Level = Business Unit A
Expected cube output:
| Period | Units | Billing Amount | Billing Amount USD | Recognized Revenue | Recognized Revenue USD |
|---|---|---|---|---|---|
| Period 1 | 5,000 | 140,000 | 162,400 | 0 | 0 |
| Period 2 | 10,000 | 280,000 | 324,800 | 3,500 | 4,060 |
| Period 3 | 15,000 | 420,000 | 487,200 | 10,500 | 12,180 |
| Period 4 | 20,000 | 560,000 | 649,600 | 21,000 | 24,360 |
| Period 5 | 25,000 | 700,000 | 812,000 | 35,000 | 40,600 |
If the cube matches the modeled sheet, the reporting layer is working.
Common Issues in This Type of Build
A contract revenue model can get stuck in several places.
The Modeled Sheet Calculates, but the Cube Shows Blank
This usually means the cube formula does not have the right calculation driver or dimension context.
Check:
Is the cube at the same time stratum?
Is the planning level correct?
Are the dimension values mapped correctly?
Does the cube formula include the right modifiers?
Is there a valid calculation driver at that intersection?
Revenue Amount Is Right but in the Wrong Period
This usually means the spread timing is wrong.
A common issue is revenue starting in the billing period when the Excel expects it to start one period later.
Fix this by reviewing whether the account should use a spread account or a calculated account using prior-period billing.
Link Accounts Do Not Work
Sometimes link accounts may not work because of account type, time stratum, sheet setup, or source account limitations.
In that case, calculated cube accounts with a calculation driver may be a better POC approach.
PPU or Unit Price Changes Over Time
If unit price changes across future periods, a static row-level number may not be enough.
Production options include:
Make unit price time-based
Split contract lines by price effective period
Load price by period from source system
For a POC, a static unit price may be acceptable if the goal is to prove the model pattern.
Test Accounts Create Confusion
POCs often create temporary accounts while testing.
Before a demo, hide or remove test accounts.
The final user-facing accounts should be simple:
Units
Billing Amount
Billing Amount USD
Recognized Revenue
Recognized Revenue USD
Production Design Considerations
A POC proves the model concept. Production needs more controls.
Production work usually includes:
Workday data source design
Data load rules
Dimension mapping
Missing value handling
Duplicate row checks
Revenue type governance
FX rate governance
Security setup
Version strategy
Reconciliation reports
Exception reports
Documentation for finance users
Workday Integration Readiness
For production, the contract revenue detail can be loaded from Workday or another source.
The source load should bring in the drivers:
Contract reference
Contract line
Revenue type
Business segment
Customer segment
Region
Currency
FX rate
Unit price
Spread quarters
Units by period
Adaptive should calculate the output:
Billing Amount
Billing Amount USD
Recognized Revenue
Recognized Revenue USD
This keeps the model easier to audit because source inputs and calculated outputs are separated.
Our Service Approach
At EPM Logic, we help finance teams build this type of solution in Workday Adaptive Planning.
Our approach includes:
Reviewing the current Excel model
Identifying source drivers and calculated outputs
Designing the modeled sheet
Designing the cube summary
Configuring revenue recognition logic
Building billing and FX calculations
Validating against source Excel
Fixing timing and dimension issues
Preparing for Workday data load
Cleaning up test accounts
Documenting the model for finance users
We focus on making the model practical for FP&A users.
The model should not be a black box. Finance users should be able to open a contract line, see the assumptions, understand the calculations, and validate the summary output.
Who This Service Is For
This service is useful for finance teams that:
Use Workday Adaptive Planning
Forecast contract revenue
Use Excel for revenue calculations today
Need revenue recognition by period
Need reporting by business dimensions
Have source data in Workday or another system
Want to reduce manual spreadsheet work
Need a planning model that can scale beyond a sample file
Final Thoughts
Contract revenue forecasting is a good use case for Workday Adaptive Planning when the model is designed correctly.
The modeled sheet should hold the contract-line detail and calculate billing and revenue. The cube sheet should summarize the output by planning dimensions.
The most important rule is simple:
Validate the modeled sheet first. Then validate the cube.
If the modeled sheet is wrong, the cube will only summarize wrong values. If the cube is blank, check the calculation driver, time stratum, level, and dimension modifiers.
A well-built contract revenue forecasting model gives FP&A teams a cleaner way to manage billing, revenue recognition, currency conversion, and summary reporting.
For teams moving from Excel to Workday Adaptive Planning, this type of solution can make the revenue forecast easier to explain, easier to review, and easier to support during planning cycles.
Leave a Reply