Calculation Commands
Calculation Commands
Syntax AGG (dimList); dimList Name of a single dimension or a comma-delimited list of dimensions.
Description The AGG command is used for a limited set of high-speed consolidations. Although AGG is faster than any of the CALC commands when calculating sparse dimensions, it cannot calculate formulas; it can only perform aggregations based on the database structure. The AGG command aggregates a list of sparse dimensions. The aggregation is based on the hierarchical relationship defined in the database outline. If a member has a customized calculation defined in the outline, the formula is ignored and the result does not match the relationship defined by the database outline. If you want to aggregate a dimension that contains formulas: Calculate any members that are "leaf" members (that is, level 0). Aggregate the dimension, using the AGG command. Calculate all other members with formulas that have not been calculated yet. Notes AGG only works with sparse dimensions. When a dimension contains fewer than six consolidation levels, AGG is typically faster than CALC. Conversely, the CALC command is usually faster on dimensions with six or more levels. AGG follows the rules for any defined FIX command. Example AGG(Market); AGG(Product,Market,Scenario);
ARRAY Declares one-dimensional array variables. Syntax ARRAY arrayVariableName [dimName] = { constList}; arrayVariableName dimName Comma-delimited list of one or more array variable names. Dimension whose size determines the size of the array variable. You must surround the dimName with brackets [ ] when using the ARRAY command. Optional list of data values used to initialize the array variable(s). If no initialization is performed, then the array variables are set to #MISSING. The order of the values corresponds to the order of the members in the dimension used to define the array.
constList
Description This command declares one-dimensional array variables. Typically, arrays are used to temporarily store variables as part of a member formula. The variables are contained within the calc script and cease to exist after the calculation script ends. The size of the array variable is determined by the corresponding dimension (e.g., if dimension Period has 12 members, ARRAY Discount[Period] has 12 members). More than one array can be created at the same time. To do so, simply separate the different array declarations with commas within the ARRAY command, as shown in the example that follows. You can calculate data for an array directly as part of a member formula. As the member formula is processed, each value in the array is assigned as its member is evaluated in the calculation. Note Do not use quotation marks (") in variables; for example: ARRAY "discount" The use of quotation marks in variables will cause an error. Example ARRAY discount[Scenario]; yields an array of 4 entries, with the values 1 through 4 entered in those four entries. ARRAY discount[Scenario] = {1, 2, 3, 4}; ARRAY discount[Scenario], tmpProduct[Product];
yields two arrays, one of 4 members (corresponding to the dimension Scenario, and called discount) and one of 9 members (corresponding to dimension Product, and called tmpProduct). CALC ALL Calculates and aggregates the entire database based on the database outline. Syntax CALC ALL [EXCEPT DIM (dimList) | MBR (mbrList)]; EXCEPT DIM dimList MBR mbrList Defines an exception list of dimensions or members that are to be excluded from the calculation. Single-dimension specification. Optional comma-delimited list of dimensions. Single-member specification. Optional comma-delimited list of members, member set functions, or range functions.
Description This command calculates and aggregates the entire database based on the database outline. The order in which dimensions are processed depends on the definitions of the various dimension in the database outline. Refer to the Database Administrator's Guide for more information. Example CALC ALL; CALC ALL EXCEPT DIM(Product); CALC AVERAGE Calculates all members tagged in the database outline as time balance Average or Average Non-Missing. All other member calculations are ignored during this process. Syntax CALC AVERAGE;
Notes
This command calculates the members based on the dimension tagged as accounts only; it does not do a Time Series calculation on the dimension tagged as time. Example CALC AVERAGE; CALC DIM Calculates the formulas and aggregations associated with each member of all the specified dimensions. Syntax CALC DIM (dimList); dimList Dimension or comma-delimited list of dimensions to be calculated.
Description This command calculates the formulas and aggregations associated with each member of all of the specified dimensions. The order in which dimensions are calculated depends on whether they are dense or sparse. All of the dense dimensions are calculated first, in the order that the dense dimensions appear in dimList. The sparse dimensions are then calculated in a similar order. Example CALC DIM(Accounts); CALC DIM(Dense1,Sparse1,Sparse2,Dense2); In the above example, the calculation order would be: Dense1, Dense2, Sparse1, Sparse2. If your dimensions need to be calculated in a particular order, use separate CALC DIM commands, as in: CALC DIM(Dense1); CALC DIM(Sparse1); CALC DIM(Sparse2); CALC DIM(Dense2);
CALC FIRST Calculates all members tagged in the database outline as time balance First.
Syntax CALC FIRST; Description This command calculates all members tagged in the database outline as time balance First. All other member calculations are ignored during this process. When this command is used, it calculates all members tagged with First. Notes This command calculates the members based on the dimension tagged as Accounts only; it does not do a Time Series calculation on the dimension tagged as Time. Example CALC FIRST; CALC LAST Calculates all members tagged in the database outline as time balance Last. Syntax CALC LAST; Description This command calculates all members tagged in the database outline as time balance Last. All other member calculations are ignored during this process. When this command is used, it calculates all members tagged with Last. Notes This command calculates the members based on the dimension tagged as Accounts only; it does not do a Time Series calculation on the dimension tagged as Time. Example CALC LAST;
CALC TWOPASS Calculates all members tagged in the database outline as two-pass. These members must be on a dimension tagged as accounts. Syntax
CALC TWOPASS; Description This command calculates all members tagged in the database outline as two-pass. These members must be on a dimension tagged as accounts. The database outline member formula is applied at each consolidated level of the database. All other member calculations are ignored during this process. Example CALC TWOPASS; CCONV Calculates currency conversions. This command is available only if your company has purchased the Currency Conversion option. Syntax CCONV currExchMbr | TOLOCALRATE curType; currExchMbr TOLOCALRATE curType Currency name containing the required exchange rate. This is a member from the currency database. Converts a converted currency back to the original, local rate. Currency type. This is a member from the CurType dimension in the currency database.
Description You convert data values from a local to a common, converted currency using the CCONV currExchMbr command. For example, you might convert data from a variety of European currencies into US$. You can then convert the data values back to the original, local currency using the CCONV TOLOCALRATE curType command. You can convert all or part of your main database using the rates defined in your currency database. You can keep both the local and converted values in your main database, or you can overwrite the local values with the converted values. If you want to overwrite local values with converted values: You do not need to create a CURPARTITION dimension in your main database. Use the CCONV command in a calculation script to convert all the data in your database. Note: You cannot use the FIX command if the CCTRACK setting is set to TRUE (the default) in the essbase.cfg file and you are not using a CURPARTITION dimension. If you want to keep both local and converted values:
In your main database, you need to define the members that store the local and converted values. You do this by creating a CURPARTITION dimension. The CURPARTITION dimension has two partitions, one for local values and one for converted values. To convert data, complete the following steps: Use the DATACOPY command to copy data from the local to the converted partition. Use the FIX command to calculate only the converted partition and use the CCONV command to convert the data. Use the CALC command to recalculate your database. To convert currencies, you need to create a currency database and define specific dimensions in your main database. For more information, see the Database Administrator's Guide. Notes The CCTRACK setting in the essbase.cfg file must be set to TRUE (the default) to enable the CCONV TOLOCALRATE command. Example CCONV YEN; converts all the data values from local currency values (for example, Swiss Francs and US$) to Japanese Yen using the YEN exchange rate from the currency database. CCONV TOLOCALRATE "Act xchg"; converts all the data values back to the local currencies using the Act xchg currency type from the currency database. CCONV Actual->US$; converts all the data values from local currencies to US$ using the Actual, US$ exchange rate from the currency database. FIX (Act) CCONV TOLOCALRATE "Act xchg"; ENDFIX converts the data in the Act currency partition back to the local currencies using the Act xchg currency type from the currency database. DATACOPY Act TO Actual;
FIX (Actual) CCONV "Act xchg"->US$; ENDFIX CALC ALL; copies Actual data values from the local currency partition to the converted currency partition. Fixes on the Actual data (in the converted partition) and converts it using the Act xchg, US$ rate from the currency database. Recalculates the database. CLEARCCTRACK Clears the internal exchange rate tables created by the CCTRACK setting. Syntax CLEARCCTRACK; Description Use this command after a data load, to reset the exchange rate tables before rerunning a currency conversion. You can use this command inside a FIX statement to clear the exchange rates for a currency partition. Example CLEARDATA Actual; FIX(Actual) CLEARCCTRACK; ENDFIX Clears the Actual data, fixes on the Actual data (in the converted partition) and clears the internal exchange rate tables for the Actual data. CLEARDATA Clears data values from the database and sets them to #MISSING. Syntax CLEARDATA mbrName; mbrName Any valid single member name or member combination, or a function that returns
a single member or member combination. Description The CLEARDATA command clears a well-defined section of a database's cells and changes the values of those cells to #MISSING values. This command is useful when you need to clear existing data values before loading new values into a database. CLEARDATA can only clear a section of a database. It cannot clear the entire database. To clear the entire database, Use the following MaxL statement: alter database <dbs-name> reset; or Use Administration Services. See Administration Services Online Help. CLEARDATA does not clear blocks, even if all data values in a block are #MISSING. Use CLEARBLOCK if you wish to clear blocks from the database, which can improve performance. Notes CLEARDATA does not work if placed in an IF statement. Example CLEARDATA Budget; clears all Budget data. CLEARDATA Budget->Colas; clears only Budget data for the Colas product family.
DATACOPY Copies a range of data cells to another range within the database. Syntax DATACOPY mbrName1 TO mbrName2; mbrName1 and mbrName2 Description Any valid single member name or member combination.
The DATACOPY command copies data values from one subset of the database to another. This command is useful when you must maintain an original set of data values and perform changes on the copied data set. DATACOPY is commonly used as part of the currency conversion process. DATACOPY is also useful when you need to define multiple iterations of plan data. To reduce typing, if any dimension(s) represented by the members in mbrName1 are not represented in mbrName2, then by default the same member or members from mbrName1 are assumed to exist in mbrName2 to complete the range. The reverse is not true. Any dimension explicitly represented in mbrName2 MUST be represented by another member of the same dimension in mbrName1. The ranges specified by both mbrName1 and mbrName2 must be of the same size. The same dimensions represented by the members that make up mbrName1 must also be present in mbrName2. Notes The size of the copied dimensions must be equal to the destination (TO) size. DATACOPY follows the rules for any defined FIX command. To prevent creation of #MISSING blocks, add the entry SET COPYMISSINGBLOCK OFF to the essbase.cfg configuration file. Example DATACOPY Plan TO Revised_Plan; ELSE The ELSE command designates a conditional action to be performed in an IF statement. All actions placed after the ELSE in an IF statement are performed only if the test in the IF statement generates a value of FALSE. Syntax ELSE statement ; [ ...statement; ] ENDIF; statement Those operations that are to be performed in the event that the IF test including the ELSE command produces a FALSE, or 0, result.
Notes The ELSE command can only be used in conjunction with an IF command. You do not need to end ELSE statements with ENDIF statements. Only IF statements should be ended with ENDIF statements.
10
Example The following example is based on the Sample Basic database. This calculation script tests to see if the current member in the Market dimension is a descendant of West or East. If so, Analytic Services multiplies the value for Marketing by 1.5. If the current member is not a descendant of West or East, Analytic Services multiplies the value for Marketing by 1.1. Marketing (IF (@ISMBR(@DESCENDANTS(West)) OR (@ISMBR(@DESCENDANTS(East))) Marketing = Marketing * 1.5; ELSE Marketing = Marketing * 1.1; ENDIF; ELSEIF Designates a conditional test and conditions that are performed if the preceding IF test generates a value of FALSE. For this reason, multiple ELSEIF commands are allowed following a single IF. Syntax ELSEIF( condition ) statement ; [ ...statement ; ] ELSEIF | ELSE | ENDIF condition statement Formula or function that returns a Boolean value of TRUE (a nonzero value) or FALSE (a zero value). Those operations that are to be performed in the event that the IF test (including the ELSE command) produces a FALSE, or 0, result.
Notes The ELSEIF command must be used in conjunction with an IF command. You do not need to end ELSEIF statements with ENDIF statements. Only IF statements should be ended with ENDIF statements. For example: IF (condition)
11
statement; IF (condition) statement; ELSEIF (condition) statement; ENDIF; statement; ENDIF; Example The following example is based on the Sample Basic database. This calculation script tests to see if the current member in the Market dimension is a descendant of West or East. If so, Analytic Services multiplies the value for Marketing by 1.5. The calculation script then tests to see if the current member is a descendant of South. If so, Analytic Services multiplies the value for Marketing by .9. If the current member is not a descendant of West, East, or South, Analytic Services multiplies the value for Marketing by 1.1. IF (@ISMBR(@DESCENDANTS(West)) OR @ISMBR(@DESCENDANTS(East)) ) Marketing = Marketing * 1.5; ELSEIF(@ISMBR(@DESCENDANTS(South)) ) Marketing = Marketing * .9; ELSE Marketing = Marketing * 1.1; ENDIF; ENDIF
12
Marks the end of an IF command sequence. The ENDIF command can be used only in conjunction with IF or IF ... ELSEIF statements. Syntax ENDIF; Notes You must supply an ENDIF statement for every IF statement in your formula or calculation script. If you do not supply the required ENDIF statements, your formula or calculation script does not verify. If you are using an IF statement nested within another IF statement, end each IF with an ENDIF. For example: "Opening Inventory" (IF (@ISMBR(Budget)) IF (@ISMBR(Jan)) "Opening Inventory" = Jan; ELSE "Opening Inventory" = @PRIOR("Ending Inventory"); ENDIF; ENDIF;) You do not need to end ELSE or ELSEIF statements with ENDIF statements. Although ending ENDIF statements with a semicolon is not required, it is good practice to follow each ENDIF statement in your formula or calculation script with a semicolon. IF, ELSE, ELSEIF, and ENDIF must all be used within a database outline formula, or must be associated with a member in the database outline when used in a calculation script. For more information, see the Database Administrator's Guide. Example The following example is based on the Sample Basic database. This calculation script tests to see if the current member in the Market dimension is a descendant of West or East. If so, Analytic Services multiplies the value for Marketing by 1.5. The calculation script then tests to see if the current member is a descendant of South. If so, Analytic Services multiplies the value for Marketing by .9. If the current member is not a descendant of West, East, or South, Analytic Services multiplies the value for Marketing by 1.1.
13
IF (@ISMBR(@DESCENDANTS(West)) OR @ISMBR(@DESCENDANTS(East)) ) Marketing = Marketing * 1.5; ELSEIF(@ISMBR(@DESCENDANTS(South)) ) Marketing = Marketing * .9; ELSE Marketing = Marketing * 1.1; ENDIF; FIX...ENDFIX The FIX...ENDFIX command block restricts database calculations to a subset of the database. All commands nested between the FIX and ENDFIX statements are restricted to the specified database subset.
Syntax FIX (fixMbrs) COMMANDS ; ENDFIX fixMbrs A member name or list of members from any number of database dimensions. fixMbrs can also contain: AND/OR operators. Use the AND operator when all conditions must be met. Use the OR operator when one condition of several must be met. Member set functions, which are used to build member lists based on other members. COMMANDS The commands you want to be executed for the duration of the FIX.
14
Description The FIX command is a block command that allows you to define a fixed range of dimensions or members to which the associated commands are restricted. The FIX command is often used to calculate a subset of the database. This is useful because it allows you to calculate separate portions of the database using different formulas, if necessary. It also allows you to calculate the sub-section much faster than you would otherwise. The ENDFIX command ends a FIX command block. As shown in the example, you call ENDFIX after all of the commands in the FIX command block have been called, and before the next element of the calculation script. Notes FIX commands can be nested within other FIX command blocks. FIX statements can only be used in calculation scripts, not in outline member formulas. Use an IF command instead of a FIX statement in member formulas. For example: Jan ( IF (Sales) Actual=5; ENDIF; ) AND/OR operators have the same precedence; Analytic Services evaluates them from left to right. Use parentheses to group the expressions. For example: A OR B AND C is the same as ((A OR B) AND C). However, if you use (A OR (B AND C)), Analytic Services evaluates the sub-expression in parentheses (B AND C) before the whole expression, producing a different result. Inside FIX statements, the AND operator represents the intersection of two sets; the OR operator represents the union of two sets. In formulas, these operators are Boolean operators. Using the AND or OR operators on members that are from different dimensions, returns: AND: An empty set. The FIX statement is ignored and the calculation continues with a warning message. OR: The union of two members sets. FIX (Jan OR Market) is identical to FIX (Jan, Market).
15
NOT operators are not supported in FIX statements. Use the @REMOVE function with FIX statements. You do not need to follow ENDFIX with a semicolon. You can specify attributes in FIX statements using the @ATTRIBUTE and @WITHATTR functions; for example FIX(@ATTRIBUTE(Can)). You must use these functions; FIX(Can) is not supported. You cannot use a FIX statement on a dimension if it is a subset of a dimension that you calculate within the FIX statement. For example you could not use Market "New Mkt" in a FIX statement if you calculate all of Market within the FIX statement. Dynamic calc members are ignored in a FIX statement. If the only member in a FIX statement is a dynamic calc member, an error message is displayed stating that the FIX statement cannot contain a dynamic calc member. If the FIX command is issued from a calculation script and produces an empty set, that part of the calculation is ignored, and the calculation continues to the next statement. The application log entry for the calculation shows that the FIX statement evaluated to an empty set (Calculating [...] with fixed members []). For example, using Sample Basic, assume this statement is in a calculation script:
.. FIX (@children(january)) CALC DIM (Accounts, Product, Market) ENDFIX Since @children(january) is empty, the FIX is ignored, and the calculation operates on the entire database after issuing a warning. Similarly, if a region defining a partition or a security filter evaluates to an empty set, Analytic Services issues a warning and behaves as if the region definition or security filter did not exist. Calculator function @RANGE and the cross-dimensional operator (->) cannot be used inside a FIX/ENDFIX statement. Example FIX (Budget) CALC DIM (Year, Measures, Product, Market); ENDFIX
16
CALC DIM (Product, Market); ENDFIX The following example fixes on the children of East and the members on the Market dimension that have a UDA (User-Defined Attribute) of New Mkt. FIX (@CHILDREN(East) OR @UDA(Market, "New Mkt")) The following example fixes on the children of East that have a UDA (User-Defined Attribute)of New Mkt and the members on the Market dimension that have a UDA of Big Mkt. FIX((@CHILDREN(East) AND @UDA(Market, "New Mkt")) OR @UDA(Market,"Big Mkt")) IF Performs conditional tests within a formula. Using the IF statement, you can define a Boolean test, as well as formulas to be calculated if the test returns either a TRUE or FALSE value. Syntax IF( condition ) statement ; [ ...statement ; ] [ ELSEIF...statement | ELSE...statement] ENDIF; condition statement Formula or function that returns a Boolean value of TRUE (a nonzero value) or FALSE (a zero value). Operations to be performed depending on the results of the test.
Notes The IF statement block can also use the ELSE and ELSEIF statements as part of its decision syntax. For information about using ENDIF statements and semicolons with IF, ELSE, and ELSEIF statements, see ENDIF. In calculation scripts, IF statements must be placed within parentheses and associated with a specific database member. They must also be closed with ENDIF statements. For more information, see the Database Administrator's Guide. You can specify attributes in IF statements using the @ATTRIBUTE and @WITHATTR functions; for example IF (@ISMBR(@ATTRIBUTE(Can))) .... You must use these functions; IF(@ISMBR(Can)) is not supported.
17
Example IF( @ISMBR(@DESCENDANTS(Europe)) OR @ISMBR(@DESCENDANTS(Asia)) ) Taxes = "Gross Margin" * "Foreign Tax Rate"; ELSE Taxes = "Gross Margin" * "Domestic Tax Rate"; ENDIF; This test checks to see if the current cell includes a member that is a descendant of either the Europe or Asia members. If it does, the formula calculates the taxes for the member based on the foreign tax rate. If the current cell does not include a member from one of those groups, then the domestic tax rate is used for the tax calculation. The next three commands are included here for convenience. These commands can be used only with the IF command. LOOP...ENDLOOP The LOOP...ENDLOOP command block specifies the number of times to iterate calculations. All commands between the LOOP and ENDLOOP statements are performed the number of times that you specify.
Syntax LOOP (integer, [break]) COMMANDS ; ENDLOOP integer break The integer constant that indicates the number of times to execute the commands contained in the loop block. Optional parameter used to break the iterative process of a loop. break must be the name of a temporary variable (VAR). Setting the value of the variable to 1 during the execution of the loop causes the loop to break at the beginning of its next iteration. Those commands that you want to be executed for the duration of the LOOP.
COMMANDS
18
Description LOOP is a block command that defines a block of commands for repeated execution. As with the FIX command, you can nest LOOP statements if necessary. The ENDLOOP command ends a LOOP command block. It terminates the LOOP block and occurs after the commands in the LOOP block, but before any other commands. Example In this example, the LOOP command finds a solution for Profit and Commission. This operation is done as a loop because Profit and Commission are interdependent: Profit is needed to evaluate Commission, and Commission is needed to calculate Profit. This example thus provides a model for solving simultaneous formulas. FIX("New York",Camera,Actual,Mar) LOOP(30) Commission = Profit * .15; Profit = Margin - "Total Expenses" - Commission; ENDLOOP; ENDFIX
VAR Declares a temporary variable that contains a single value. Syntax VAR varName [= value] ; varName value Name of the temporary variable. Optional parameter that declares the data value.
You can also use a single VAR command to declare multiple variables by supplying a comma-delimited list of variable names. Notes
19
The name of the variable cannot duplicate a database member name. If a value is not declared, it is set to #MISSING. VAR commands can only be assigned values within a member calculation or when VAR is declared. Example VAR Target = 1200; VAR Break1, Break2, Break3;
20