Academy of Profit Center
Hall 4 of 9 · Hall of Logic
Academy of Profit Center — Your Journey
Hall of Logic
Hall 4 of 9 · Academy of Profit Center · EPCM Study Tour

The engine room of allocation

Five rule sets. Eighteen rules. One precise execution order. Dimensions gave the model its axes. Models gave it a context. Rule sets give it its logic — the step-by-step instructions that move NovaPrism's $134M from Enterprise Support into every corner of the three operating divisions.

Conceptual Technical Interactive Lab Exam: 1Z0-1082-25
📐
Conceptual

What a rule set is — and why the sequence matters

A rule set is a named, ordered container of rules. The container has an execution mode (Serial or Parallel) and a sequence number. The sequence number is not cosmetic — it is the execution order contract.

In EPCM, a rule set is the fundamental unit of allocation logic. Each rule set contains one or more rules — specific instructions that move money between PCM_Balance members across dimension intersections. When a model runs, it executes all assigned rule sets in ascending sequence order, respecting the execution mode of each.

The reason NovaPrism cannot collapse its five rule sets into one is dependency. The IT Allocation (seq:40) depends on the IT Cost Pool Formation (seq:10) having already staged the pool total into an intermediate member. If they ran in a single rule set without sequence enforcement, seq:40 might read a zero or stale IT pool value — producing a wrong allocation silently. The sequence number is the mechanism that prevents this.

⚙️
The design principle: Every rule set should do exactly one coherent business thing. Seq:10 forms the IT pool. Seq:20 allocates facilities. Seq:30 allocates Finance and HR. Seq:40 allocates IT. Seq:50 pushes to engagements. Each is independently auditable, independently runnable for testing, and independently refactorable if the business logic changes. A monolithic single rule set combining all five would be impossible to debug when one pool misbehaves.
🔀
Conceptual

Serial vs Parallel execution — when order matters

Serial execution runs rules one at a time, in rule order within the set. Parallel execution runs all rules simultaneously. The choice is not a performance preference — it is determined by whether later rules in the set depend on earlier ones having written their values first.

Serial
Rules execute one at a time, in the order they are numbered within the rule set. Rule N+1 only begins after Rule N has fully completed and committed its values to the cube.
Use when
A downstream rule reads values written by an upstream rule in the same set
A pool formation step must complete before the allocation step can read the pool
The rule set depends on seq:10 having completed (enforced by the sequence number)
NovaPrism: seq:10 (IT pool formation) and seq:40 (IT allocation) — both Serial
Parallel
All rules in the set execute simultaneously. No rule can read a value written by another rule in the same parallel set — because they run at the same time.
Use when
All rules read from the same source data and write to different targets
No rule's output is an input to another rule in the same set
Performance matters — parallel sets complete in the time of the slowest single rule
NovaPrism: seq:20 (Facilities), seq:30 (Finance+HR), seq:50 (Engagements) — all Parallel
⚠️
The exam trap on Parallel: "A Parallel rule set can be used when performance is the priority, even if later rules read values from earlier rules in the same set." — FALSE. If any rule in a Parallel set reads a value that another rule in the same set writes, the read will get the pre-execution value (typically zero or last period's data), not the freshly written value. The data corruption is silent — EPCM will not error. This is the most dangerous misconfiguration in rule set design.
🔤
Conceptual

The three rule types

Every rule in EPCM is one of three types. The type determines how the rule calculates its output — not what it allocates, but the mathematical method it uses.

Allocation Rule
Allocation
Distributes a source pool to one or more target cost objects using a driver ratio. The rule reads the source pool total, reads the driver values for each target, computes each target's proportional share, and writes PCM_Allocated_In and PCM_Allocated_Out.
NovaPrism IT pool: $52M × (IS tickets 2,890 / total 4,540) = $33.09M to IS. The rule reads the pool, reads the ticket counts, writes $33.09M to IS PCM_Allocated_In and $33.09M to ES PCM_Allocated_Out.
Custom Calculation
Custom Calc
An Essbase-style calculation script that performs any arithmetic, conditional logic, or member formula. Uses a subset of Essbase calc language. No automatic PCM_Balance management — the implementer writes the PCM_Balance member targets explicitly.
NovaPrism IT pool formation (seq:10): a Custom Calc rule that reads 120+ GL accounts tagged as IT-related and sums them into the IT_Pool_Staged member, ready for the Allocation rule in seq:40 to read. Not an Allocation rule — it sets up the source.
Offset Rule
Offset
Creates a balancing contra-entry to zero out a cost centre after all its costs have been allocated out. Used to confirm that the cost centre's PCM_Output nets to zero — a balance verification, not a new allocation.
NovaPrism Enterprise Support: after all four pools allocate out, an Offset rule confirms ES's PCM_Output = PCM_Input − PCM_Allocated_Out = $134M − $134M = $0. If this rule fails to zero, the model is unbalanced and Rule Balancing (Hall 7) will flag it.
📋
Rule count in NovaPrism's model: Seq:10 has 3 rules (1 Custom Calc per IT sub-pool group + 1 aggregation). Seq:20 has 3 rules (1 Allocation per receiving division). Seq:30 has 4 rules (2 Finance Allocation + 2 HR Allocation). Seq:40 has 2 rules (1 IT Allocation + 1 Offset to zero ES IT sub-pool). Seq:50 has 6 rules (1 Engagement Contribution rule per Division × 3 divisions + 3 customer-level detail rules). Total: 18 rules across 5 rule sets — from constants.js.
⚙️
Technical

NovaPrism's 5 rule sets — full technical specification

Each rule set below is exactly as defined in constants.js. Click any rule set to expand its full rule list, execution notes, and the specific PCM_Balance members it reads from and writes to.

💡
Why the sequence gap between 10 and 20? NovaPrism's sequence numbers jump by 10 (10, 20, 30, 40, 50), not 1. This is a governance convention, not a product requirement. The gap allows new rule sets to be inserted between existing ones without renumbering everything. If a future audit requires a separate Tax Gross-Up rule set between IT formation and Facilities, it can be numbered 15 — without touching the existing 20, 30, 40, or 50 numbering. Always leave room between sequence numbers.
📊
Technical

Execution sequence diagram

How the five rule sets flow in time. Serial rule sets must complete before dependent serial rule sets begin. Parallel rule sets run concurrently with no dependencies between their rules.

NovaPrism M01 Execution Timeline
Serial
Parallel
T+1 T+2 T+3 T+4 seq:10 seq:20 seq:30 seq:40 seq:50 IT Pool Formation Facilities Alloc Finance+HR Alloc IT Allocation depends on Engagement Contrib

Seq:10 and seq:40 are Serial — seq:40 cannot start until seq:10 has committed the IT pool total. Seq:20 and seq:30 run in Parallel immediately after seq:10 — they share no data with each other. Seq:50 runs Parallel after all other pools have completed, ensuring fully-loaded costs are available at the Entity level before being pushed to engagement codes.

🔧
Technical

Calculation threads and the calcThreads setting

Parallel rule sets only deliver their performance benefit if EPCM has enough threads available to run them simultaneously. NovaPrism's application is configured for 5 calculation threads — a deliberate design decision.

The calcThreads property (set to 5 in NovaPrism's application, per constants.js) tells EPCM how many rules it can execute concurrently at any moment during a model run. For NovaPrism's parallel rule sets, this means seq:20 and seq:30 can each run their 3 and 4 rules respectively — all simultaneously, up to the thread limit — while the platform queues any excess.

In practice: seq:20 has 3 parallel rules (one per division), and seq:30 has 4 parallel rules (Finance × 3 divisions + HR weighted). With 5 threads, 5 of these 7 rules start immediately; the remaining 2 start as threads free. The net effect is that seq:20+seq:30 together complete in approximately the time of the 2 slowest rules, not the sum of all 7.

calcThreads settingEffect on NovaPrism's parallel rule setsRisk
1 (minimum)All rules run sequentially regardless of rule set type — parallel sets lose their performance advantage entirelySlowest
3Most parallel rules in seq:20+seq:30 queue; 2 divisions always wait. Seq:50's 6 engagement rules run 3 at a timeSuboptimal
5 (NovaPrism default)Seq:20+seq:30 complete in ≈2× single-rule time. Seq:50's 6 rules complete in 2 batches. Good throughput vs resource balanceBalanced
10+Minimal further gain for NovaPrism's 18-rule model — most threads idle. Could compete with other EPM processes on shared infrastructureDiminishing returns
⚠️
The exam answer on calcThreads: The exam will test that you know the maximum calcThreads is application-level, not rule-set-level. You set it once on the application, not per rule set or per model. NovaPrism's value of 5 is stored in NP.app.calcThreads in constants.js. The default if not set is typically 1 — meaning parallel rule sets would run sequentially unless you explicitly configure threads.
▶️
Interactive

Rule Set Execution Simulator

Step through NovaPrism's M01 model execution one rule set at a time. Watch the $134M allocate in sequence — see which steps depend on which, and what happens at each stage.

M01 — Actuals Allocation Process · NovaPrism_EPCM_PROD Actual / Working / FY24 Q1

Simulation ready. Press Step Forward to begin.

🔬
Lab Scenario

Build NovaPrism's rule set configuration

The Models Pavilion has the four models approved and configured. Now you must design the rule sets that those models will execute. Nothing runs until the rule sets are defined.

Mission Brief — Rule Set Design Document
Situation: NovaPrism's Oracle implementation partner is ready to build rule sets in the EPCM UI. Before any rule is created, you must produce a design document that specifies: (1) exactly which rule sets are needed, (2) the sequence number and execution mode for each, (3) the rules within each rule set and their types, and (4) the dependency chain that justifies the serial execution choices. This document is the source of truth — if it is wrong, the model will produce incorrect allocations silently.
Define all five rule sets with sequence numbers and execution modes. For each: seq number, name, mode (Serial/Parallel), rule count, and a one-sentence justification of why that execution mode is correct. Use NP.rulesets from constants.js as your source. Pay special attention to why seq:10 and seq:40 must both be Serial.
Map the dependency chain. Draw or describe the dependency graph: which rule sets can start immediately, which must wait for others, and why. The answer must explain the specific PCM_Balance member that seq:40 reads from, which seq:10 must have written first — and what value seq:40 would read if seq:10 had not yet run.
Specify the rule types for each rule in seq:10 (IT Cost Pool Formation). Seq:10 contains 3 rules. For each rule: state the rule type (Allocation / Custom Calc / Offset), what it reads from (source PCM_Balance member and dimension intersection), and what it writes to. The IT pool must be correctly staged before seq:40 can allocate it — describe the exact staging mechanism.
Specify the Allocation rule for seq:40 IT Allocation. Write the full rule specification: source pool member, driver dimension and members (DS: 1,240 tickets, IS: 2,890, CL: 410, total 4,540), target dimension intersections, and the exact dollar amounts each division receives ($14.19M DS, $33.09M IS, $4.70M CL from the $52M pool). Verify that the amounts sum correctly to the pool total within rounding tolerance.
Write the governance brief on calcThreads. Why is NovaPrism's calcThreads set to 5? What would happen to the model run time if it were set to 1? What would happen if it were set to 20? What is the practical ceiling given NovaPrism's 18-rule model structure? Include a recommendation for whether 5 is the right value or whether it should be reviewed.
0 of 5 tasks completed
🎓
Dean's hint on task 3: Seq:10 uses a Custom Calculation rule (not an Allocation rule) to form the IT pool. This is because the pool formation step is not allocating costs — it is aggregating 120+ GL account members tagged as IT-related into a single stageable total. An Allocation rule requires a pre-defined source pool and a driver — the pool formation step creates the source pool. The Custom Calc rule writes the aggregate to IT_Pool_Staged at PCM_Input. Seq:40's Allocation rule then reads IT_Pool_Staged at PCM_Input as its source. If seq:10 hasn't run, IT_Pool_Staged is zero — and seq:40 allocates nothing, silently.
📝
Exam Alignment · 1Z0-1082-25

What Hall of Logic covers on the exam

Hall 4 maps to the fourth syllabus topic: Managing Rule Sets and Rules. This is the highest-weighted topic on the exam — expect 8–10 questions across the 50-question paper.

📝 Syllabus — Managing Rule Sets and Rules
Sub-bullet 1: Describe rule sets. Know execution modes (Serial vs Parallel), the sequence number contract, and when each mode is appropriate.

Sub-bullet 2: Describe rules. Know all three rule types (Allocation, Custom Calculation, Offset). Know which PCM_Balance members each type reads from and writes to.

Sub-bullet 3: Manage rule sets and rules. Know how to add, sequence, and configure rules in the EPCM UI. Know the calcThreads application setting and its effect on parallel execution. Know what happens when a Serial rule set has a dependency on a prior Serial rule set.

Sub-bullet 4: Calculate models. Know the phases of model calculation (Clear → execute rule sets in sequence → balance check). Know that Logical Clear is the default.
⚠️ The four most-tested traps in this section
Trap 1: "A Parallel rule set is always faster than Serial."
FALSE when calcThreads = 1 (rules queue anyway). Only faster when threads are available AND rules have no intra-set dependencies.

Trap 2: "In a Parallel rule set, later rules can read values written by earlier rules."
FALSE. Parallel rules run simultaneously — no rule can read another's freshly written value. Use Serial when intra-set read/write dependencies exist.

Trap 3: "An Allocation rule can be used to form a cost pool from GL account members."
FALSE. Pool formation from multiple GL accounts requires a Custom Calculation rule. An Allocation rule requires a pre-existing source pool total. Use Custom Calc for aggregation; use Allocation for distributing the aggregated total.

Trap 4: "calcThreads is set per rule set, not per application."
FALSE. calcThreads is an application-level property. It applies to all models and all rule sets in the application. You cannot set different thread counts per rule set.
0/5
Hall 4 Exam Score
ConceptExam answerImplementation reality
Serial vs Parallel rule setsSerial = sequential execution (later rules see earlier writes). Parallel = simultaneous (no intra-set read dependencies allowed)Most real models mix both — pool formation serial, allocation parallel, pool-of-pools serial again
Three rule typesAllocation (driver-based distribution), Custom Calculation (Essbase calc script), Offset (zero-out balancing entry)Allocation rules do the heavy lifting. Custom Calc handles aggregation, staging, and complex logic. Offset is the final audit step
calcThreadsApplication-level property. Controls max concurrent rule execution. Default = 1 if not setMost production EPCM implementations use 5–8 threads. More threads = more database server resource consumption
Sequence number gapsNot required by the product — but best practice to leave gaps (10, 20, 30...) for future insertionsEvery serious implementation uses gaps. It saves a painful renumbering exercise when business logic changes require a new intermediate step
Dependency enforcementEnforced by sequence number — EPCM runs rulesets in ascending sequence order, never out of orderNo additional configuration needed — the sequence number IS the dependency contract. seq:40 simply has a higher number than seq:10
⚙️ From rule sets to production pipeline — the automation question
Hall 4 covers what runs (rule sets, rule types, sequence order). The next question every practitioner asks is how do I trigger this reliably at 2am on Day 1 of close?

EPM Automate: epmautomate calculateModel "NovaPrism_EPCM_PROD" "M01" — runs all 5 rule sets in ascending sequence order from a scheduled shell script. Git-managed, DevOps-friendly, no browser required.

Groovy: A Calculation Manager business rule calls the EPCM REST API to trigger calculateModel — the only way to include the model calculation inside a Pipeline job step (Pipeline cannot call native rule sets directly).

Hybrid: Groovy validates pool totals before the run, calls epmAutomate("calculateModel",...) inline, then writes a completion status flag back to the cube for Rule Balancing visibility.

For the full debate — 8 rounds, side-by-side pipelines, and a 14-scenario decision matrix — see the EPM Automate vs Groovy reference page.