The logic that cannot leave
Years of definitions accumulate as calculated fields: tenure bands, bonus eligibility, the real termination flag. Workday computes them at report runtime and stores none of them. Then the extraction project starts, and the logic stays home.
◆ What a calculated field islogic at runtime, not data at rest.
A calculated field is a formula defined inside the tenant: take hire date, compare it to today, sort the result into bands. When a report runs, the value is computed, displayed, and discarded. Nothing is stored. Over years, hundreds of these accumulate, and together they quietly become the company’s definitions of tenure, eligibility, and status.
That works until the data needs to leave. The extraction paths that read objects and fields find no calculated values there to read, because there is nothing at rest to find. The logic exists only in the moment a report runs.
◆ Which paths carry the logicthe report path does, the query paths mostly do not.
| Path out | Calculated fields? | The consequence |
|---|---|---|
| Report extraction | Yes, the computed values ride along in the output. | The values arrive without their formulas. You have answers you cannot explain, at report caps covered on the extraction pattern. |
| Query language | Mostly not. It reads data-source fields; most report calculated fields are not exposed. | The scalable path arrives without the definitions. Practitioners hit this exactly when they move off reports for scale. |
| Web services | No. Objects and stored fields only. | Same stranding, object by object. |
| Zero-copy share | Stored data, as tables. Runtime report logic is not a table. | Even the future pipe carries data, not definitions. See Data Cloud. |
The trap has a shape: the paths that scale do not carry the logic, and the path that carries the logic does not scale. Teams discover it mid-migration, when the new pipeline lands rows that no longer match the reports everyone trusts, because the trusted numbers were computed by fields the pipeline never saw.
◆ The rebuildonce, as tested code you own.
The durable answer is to treat calculated fields as a specification and rebuild them once in the warehouse, as versioned, tested transformations. The formula that lived in a tenant screen becomes code in your repository, with a test proving it matches the tenant on the same rows.
-- a tenant tenure-band field, rebuilt as owned logic
SELECT worker_id,
CASE
WHEN months_between(current_date, hire_date) < 12 THEN 'Under 1 year'
WHEN months_between(current_date, hire_date) < 60 THEN '1 to 5 years'
ELSE 'Over 5 years'
END AS tenure_band
FROM dim_worker
WHERE is_current
Rebuilt logic upgrades on the way over. It gains history, because the model computes the band as of any snapshot date, which the runtime field never could. It gains a test. And it gains an audience, because a definition in code can be read, reviewed, and reused by every report downstream, instead of living in one report’s configuration.
- calculated field
- A formula defined in the tenant, computed at report runtime, never stored.
- data source
- The population a report or query reads. Stored fields live here; most computed ones do not.
- query language
- Workday’s structured query path over its data sources. Scales well, carries little logic.
- web services
- The object-by-object programmatic path. Stored fields only.
- runtime
- The moment a report executes. Where calculated values briefly exist.
- versioned
- Kept in source control, with history and review.
- specification
- A definition treated as the requirement code must match.
- snapshot date
- The as-of date a model computes against. Runtime fields know only today.