
In block storage (BSO) Essbase, a calc script without FIX calculates the whole cube. FIX…ENDFIX limits the calculation to the members you list, which is both faster and safer.
In this article
Basic structure
FIX ("Actual", "FY25", @RELATIVE("Total Entity", 0))
CALC DIM ("Account");
ENDFIX
Everything inside runs only for Actual, FY25 and the level-0 entities. @RELATIVE(member, 0) returns all level-0 descendants.
Common patterns
Aggregate sparse dimensions
FIX ("Actual", "FY25")
AGG ("Entity", "Product");
ENDFIX
Copy actuals into the forecast
FIX ("FY25", @LIST("Jan","Feb","Mar"))
DATACOPY "Actual" TO "Forecast";
ENDFIX
Clear before reloading
FIX ("Actual", "Mar", "FY25")
CLEARDATA "Sales";
ENDFIX
Simple allocation
FIX ("Budget", "FY26", @RELATIVE("Total Entity", 0))
"Rent" = "Rent"->"Corporate" * ("Headcount" / "Headcount"->"Total Entity");
ENDFIX
The -> (cross-dimensional) operator reads a value from another member combination.
Performance rules of thumb
- FIX on sparse members where possible — it reduces the number of blocks touched.
- Avoid calculating the same block twice in one script (it causes “passes”).
- Use
SET UPDATECALC OFF;and other SET commands deliberately, and test on a copy. - Check the application log for elapsed time after each change.
⚠️ Always test calc scripts on a copy of the database — DATACOPY and CLEARDATA change data immediately.
Automate running them with MaxL.