Professional Documents
Culture Documents
CLEARDATA Budget;
Budget = Actual * 1.1;
CALC ALL;
Why Use a Calc Script?
• Define calc order
• Calculate a subset of data
• Clear or copy data
• Calculate formulas not in outline
• Perform multiple-pass calculations
• Create and use temporary variables
Calc Script Editor
• Choice of the Essbase XTD Analytic
Services Calc Script Editor or another text
editor
• If you use another editor:
–Save file with .csc extension
–Easier to perform some functions
• Find/Replace
• See more lines of the script
• Printing options
• Can “mix and match”
Calc Script Editor
• Has a number of functions built in
• Command buttons simplify entries
• Validation function to detect errors
• Color-coding to show types of entries
• Auto-complete and auto-argument insert
10
Simplest Calc Script
• Default calc script
• Aggregates dimensions in outline
• Calculates formulas in outline
• Performs time balancing
• Uses intelligent calculation
CALC ALL;
Calc Script Syntax
• End each function/command with a
semicolon
• Enclose member names with spaces in
“double quotes”
• Start comments with /*
• End comments with */
• Not case-sensitive
/* Increase Opening Inventory */
“Opening Inventory” =
“Opening Inventory” * 1.1;
SIMPLE CALCULATIONS
Calculating Single Members
• To calculate a member based on the
aggregation or formula in the outline:
Variance;
or
CALCULATION STRATEGIES
Calculation Commands
• Limited number of true calculation
commands
– Not functions – they are in another chapter
– Not “Set” statements – they are covered
under optimization
Agg
• Syntax
– AGG(Dimname, Dimname,…);
• Summary
– Aggregates dimension(s) according to the
outline operators
– Member formulas are ignored
– Very fast
• Fewer than 6 levels
Calc All
• Syntax
– Calc All;
• Summary
– Calculates all dimensions in the database
– Uses default calculation order
– This is typically the default calc
– Very efficient
– Can add “Except” to remove
dimensions/members
Calc Dim
• Syntax
– Calc Dim(DimName, DimName,…)
• Summary
– Calculates the dimensions that are listed
– All dense dimensions are calculated first in the order
they appear
– Sparse dimensions are calculated last - also in the
order they appear
– If you need a different order, use multiple Calc Dim
commands
– Includes member formulas
ClearBlock
• Syntax
– ClearBlock ALL | UPPER | NONINPUT |
DYNAMIC
• Summary
– Designed to clear blocks by removing index
entries
– Within a FIX block, may only clear a portion of
a block
– Options for which types of block to clear
ClearData
• Syntax
– ClearData MemberName;
• Summary
– Designed to set a member value to #Missing
– Works within a fix
ClearBlock vs. ClearData
• ClearBlock is designed to clear an entire
block
– At least a large portion of the block
• No Member name, just block type
• ClearData is designed to clear a member
– Usually before it is recalculated
• In many cases either one will work
DataCopy
• Syntax
– DataCopy MemberName TO MemberName;
• Summary
– Copies data from one member to another
– All intersections are included
– Great for copying versions
– Will create blocks if they do not exist
If/Else/ElseIf/EndIf
• Syntax
– IF (condition) ElseIf/Else EndIf;
• Summary
– Condition must be if parenthesis
– In a calc script, associate with a member
name
– Does really matter which member name
– Each If must end with EndIf
– Most effective on dense members
Fix/EndFix
• Synatx
– Fix(MemberNames, Functions Etc.) ENDFIX
• Summary
– Used to focus or limit a calculation
– Most effective on sparse members
– Used extensively
Exclude/EndExclude
• Synatx
– Exclude(MemberNames, Functions Etc.)
EndExclude
• Summary
– Used to do everything except a few members
on a calculation
– Most effective on sparse members
– New in 9.3
38
Loop/EndLoop
• Syntax
– Loop (integer, break) EndLoop;
• Summary
– Causes a block of code to be repeatedly
executed
– The integer determines the number of times
the loop runs
– The break value allows early exit
– Although it is a loop, its not a true
“programming loop”
Using Commands
• Need to combine commands with
functions
• Execute in the order they are written
• None by itself is that useful
• Used together, they provide a powerful
tool set to apply business rules to the
database
Not Commands But…
• A member name by itself
–Calculates the member formula if present
–Calculates outline rollup if there is no formula
• Example
– East;
–Multiple members can be listed
–Member set functions can also be used
• Example
– @IDESCENDANTS(“2003”);
Assignment Statements
• Assign a value to a member
• Example
–Budget = 0;
–Budget = Budget * 0.95;
• There are other math operators
–More later
• Every command ends with a semicolon (;)
–Okay, there are exceptions but most do
More on Member Names
• All the members are calculated at once if
possible
• To force multiple passes of the database,
group the member names in parenthesis
– One pass for each group in parenthesis
– Not usually what you want, so use with
caution
Function Categories
• Conditional • Allocation
• Boolean • Forecasting
• Relationship • Statistical
• Calculation Operators • Date and Time
• Mathematical • Miscellaneous
• Member Set • Custom Defined
• Range and Financial
Calculation Operators
• Nothing too exciting
• +-*/%
• Use parenthesis to control order of
operations
Conditional
• Typically used within an “If” command
• >, >=, <, <=, <>, !=
• Can combine with And, Or and Not
Boolean
• More traditional functions
– @ISACCTYPE @ISISIBLING
@ISANCEST @ISLEV
@ISCHILD @ISMBR
@ISDESC @ISPARENT
@ISGEN
@ISSAMEGEN
@ISIANCEST
@ISSAMELEV
@ISICHILD
@ISIDESC @ISSIBLING
@ISIPARENT @ISUDA
ADVANCED TOPICS
Using Functions
• Frequently, functions are nested or used
as parameters for another function
• Functions are prefixed with “@”
• Parameters are separated by commas
• Used in many places
– Right of “=“
– FIX statements
– IFs etc.
Focusing Calculations
• Two most common methods
– Fix
– If
• Other methods:
– CrossDim operator
– MemberSet functions
– Relationship functions
– Variables
FIX
• FIX limits the members that are processed
• Most effective when used on members of
sparse dimensions
• Only blocks that meet the Fix criteria are
processed
– Remaining blocks are simply skipped
• Typical uses
– Only calculate one scenario
– Limit calc to current year
More on FIX
• FIX works properly on dense members
• May result in all blocks being processed
• All statements between the FIX and
ENDFIX are executed as a block
• FIX statements can be nested
• Multiple members from the same
dimension are treated as “or”
– In other words, all members will be processed
What You Cannot Do With FIX
• You cannot assign values to a member
that is included in the FIX statement
– Actually, values cannot be assigned to any
member from a dimension in the FIX
statement
– Example
Fix(Sales)
Sales = 100;
ENDFIX
– Would result in an error
FIX On
• Members from one or more dimensions
• Can list specific member names
• Can include member set functions
• Can include AND and OR
– Use AND to get the intersection of two or
more functions
– Caution on empty sets
IF Statements
• Conditional processing is often needed to
process business rules
• Can include complex conditions
– And, Or, Not, etc.
What You Can Check For
• Most common are
– Members
• Specific members
• MemberSet comparisons
• Use boolean functions
– Values
• >, < = etc.
• Use #Missing for test
• True is treated as 1 and false is 0
Syntax for IF
• Place condition in parenthesis
• Associate with a member
– Doesn‟t matter which member
– MemberName (
• If (condition)
– Statements
• EndIf )
– Not required for member formulas
More on IF
• Can have ElseIf (condition)
• Can Have Else
• Can have both
• Still terminate with single EndIf
– Be sure to include ;
• All ElseIF/Else conditions have to remain
within parenthesis for the member
association
To If or FIX
• Generally, If works best on dense dimension
members
– Particularly when ElseIF or Else are included
• Block is only brought into memory once and all related
conditions are processed
• Fix would bring block in multiple times
• Conversely, FIX works best on sparse dimension
members
• Old saying “Fix on Sparse, If on dense”
– If you‟re dense, fix on sparse?
• There are always exceptions
Other Method to Focus Calculations
• “Cross Dim” operator
– Allows reference to specific cells
– Frequently in another block
– Technique for complex allocations
• Relationship functions
– Can be used to get a value from another part of the
database
• Example is @ParentVal(…)
• MemberSet functions
– Return member names
– Can be used to calculate those members or in a Fix/If
Loops
• Can use the Loop/EndLoop to repeatedly
execute calc commands
• Not designed to increment variables and
reference different members
• Used to solve goal seeking problems
Why Create Blocks
• Often need blocks that do not exist
– Typically when performing allocations
• Actually, one of the most challenging aspects of writing
calc scripts
– If a block does not exist, not processed by a calc script
• Except outline calculations
– Frequent cause of calculation problems
• Example
IF (Budget > 100)
Actual = 50;
ENDIF
– Assumes Scenario is sparse
Ways to Create Blocks
• There are basically four methods to create
blocks:
– Load data
– Calculate the database
– Use the DataCopy command
– Place a sparse member on the left side of an
assignment statement
• Must not set equal to a constant
• SET CREATEBLOCKONEQ ON|OFF;
– SET CREATENONMISSINGBLK ON|OFF;
Organizing Calc Scripts
• Most calc scripts have common parts or
sections
– Housekeeping
– Initial Calculation
– Mainline Rollup
– Back Calc
Housekeeping
• The calculation environment is established
– Intelligent calculation is turned on/off
– Other Set commands are issue
• Variables are declared
• Comments describing the purpose of the
calc script are entered
– Use /* and */ for comments
Key Set Commands
• Set AggMissg ON | OFF
– Controls if #Missing values are aggregated
– If all children and #Missing, parent is et to #Missing
– @NEXTSIBLING(mbrName)
– Returns the next sibling for the input member. If the
input member is the right most member then return “”.
This is equivalent of calling @SHIFTSIBLING with 1
as the value for optional argument N.
Environment Variables in Calc Scripts –
11x
• Helpful in export calc scripts
• Use environment variables
• $ is used to indicate environment variables