Chapter 5 [ 165 ] Your Default Calc can be executed manually by selecting it from the available choices on the screen that is displayed when you choose Execute calculation… from the list of choices that appear after right-clicking on your database name in EAS. You can also programmatically execute your Default Calc using the appropriate command in your MaxL script or API call. Calc All The Calc All database calculation function can be executed in two different ways but will perform the same function. You can code the Calc All function in a database calculation script that is either executed manually or through a program. You can also set Calc All to be your database's default calculation string. The Calc All command tells the Essbase to calculate the database according to the consolidations (parent-child rollups) and Store Data tagged member formulas that are set up in the database outline and members' properties. There are occasions when you will create an Essbase database outline that is fairly simple and straight forward with regard to parent-child relationships. This database is more than likely used for presentation and reporting purposes only and the users' access is typically Read Only. With this type of arrangement, the only calculation that needs to be performed is usually after a data load or database/outline restructure. The Calc All command is perfect for this type of scenario. When you initiate a Calc All function, Essbase attempts to determine the best order of calculation for the database, so you must be careful to verify the results of a Calc All. If your database requires complex or unusual calculations, you would be better served using a specically written calculation script. This material is copyright and is licensed for the sole use by Paul Corcorran on 5th July 2009 8601 ave. p #1, , lubbock, , 79423 Download at Boykma.Com Calculating your Essbase Cube [ 166 ] Very Important! Since this is your rst calculation function that you are learning about, we should give you this tip right now. The correct syntax for all calculation functional statements, in both scripts and formulas, is to end the statement with a semi-colon (;). Some statements are not required to end with a semi-colon, like conditional statements (if, else, endif), but all actionable statements are. Calculate/Aggregate dimension With an understanding of the Calc All function, we can now be comfortable describing the two very useful and related database calculation script functions. Where the Calc All function is used to calculate the entire database based on the outline (consolidations and stored member formulas), the CALC DIM and AGG functions are used to perform almost the same function with dimension level precision. The CALC DIM function performs exactly like the Calc All function in that it will execute calculations based on the database outline and Store Data tagged member formulas, with one huge difference. In calculating, functionality is constrained to only the database dimensions you list with this function. The following is an example of how you would code a CALC DIM statement to calculate only the Calendar Periods dimension. To CALC DIM one dimension: CALC DIM("Calendar Periods"); To CALC DIM more than one dimension in one command: CALC DIM("Calendar Periods","Model Year","Market"); To make sure a specic order is followed: CALC DIM("Market"); CALC DIM("Model Year"); CALC DIM("Calendar Periods"); The parameter section of this function can contain a comma separated list if you wish to calculate more than one dimension. If you need to ensure a specic order of calculation for the dimensions, it is best to code individual CALC DIM statements containing only one dimension name in the order you need them to be calculated for each dimension. This material is copyright and is licensed for the sole use by Paul Corcorran on 5th July 2009 8601 ave. p #1, , lubbock, , 79423 Download at Boykma.Com Chapter 5 [ 167 ] Essbase Calc commands and functions As discussed earlier, database calculations are very important features in the Essbase world. For some situations, you may need to write complicated calculation scripts, in other situations, they will be fairly simple. In order for you to become procient in writing calculation scripts you need to have an understanding of some of the predened commands and functions that can be used in an Essbase database calculation script. Let's discuss some of the more commonly used commands and functions in detail. Data declarations When you are writing some of the more complex calculation scripts, you will nd it necessary to manipulate the data while calculating. For manipulating the data, you need to create variables. In an Essbase calc, you can create temporary variables or global variables (also called substitution variables, which are discussed in greater detail later in this chapter). The temporary variables are only available when the calculation script is running and they do not exist after the calculation script has completed. In order to use these variables in a calculation script, you need to declare them. It is always best to declare all of the variables you will be using at the top of the calculation script. There are two types of temporary variables that can be used in an Essbase database calculation scripts: • VAR: A variable containing only one value • ARRAY: A one dimensional array declaration The allowable naming convention for the VAR and ARRAY variables are similar to one another, you can use alpha characters "a through z", numbers "0 through 9", and special characters "$ (dollar sign), # (pound sign), and _ (underscore)". Remember, you cannot use the & (ampersand) as this is reserved for the substitution variables. Example: VAR cRevenue; or VAR cRevenue = 10,000; ARRAY arrCust["TOTAL CUSTOMER"]; This material is copyright and is licensed for the sole use by Paul Corcorran on 5th July 2009 8601 ave. p #1, , lubbock, , 79423 Download at Boykma.Com Calculating your Essbase Cube [ 168 ] The array size would be the total number of members in this dimension. Control ow Control functions control the ow of the data being calculated. As you will see, some functions help select the data while some help restrict the selected data. All in all, they are used to help you calculate your data quickly and efciently. FIX/ENDFIX When we talked earlier about Essbase database calculation control, we meant the FIX/ ENDFIX command. These are the control gate keepers of the database calculation script. The FIX/ENDFIX commands are for use only in an Essbase database calculation script. When you code a member formula, the formula only applies to the member in which it is coded, hence, there is no need for FIX/ENDFIX commands. Using Essbase's full complement of calculation functions and commands, for precise calculation purposes, it hardly matters what your outline looks like, or how it is laid out. In terms of dimension order, Sparse or Dense settings, whether or not you have an Accounts or Time dimension, or pretty much any other way you have your database set upto t your own needs, the calculation script can be coded to do exactly as you wish. With the FIX/ENDFIX command, you can zero in with razor sharp precision on only the data values you wish to calculate. When you employ a FIX/ENDFIX command you are telling Essbase to select a subset of data from the database for calculating. In this way, you will not calculate too much data at any given time. You also will not calculate data that you do not intend to (the denition of Stomp-on). What you will realize by using the FIX/ENDFIX command, besides the benets described above, is keeping your database calculation scripts running at peak performance. The FIX command selects data from the database by blocks. Due to this fact, and also because you want to ensure the highest possible performance while executing calculation scripts, it is recommended that wherever possible, you FIX only on members that are in Sparse Dimension. When you FIX on a Dense Dimension, Essbase needs to pull all of the data blocks affected by the FIX statement into the system's memory, thus potentially affecting performance. This is because dense members have a greater potential to populate across more blocks. This material is copyright and is licensed for the sole use by Paul Corcorran on 5th July 2009 8601 ave. p #1, , lubbock, , 79423 Download at Boykma.Com Chapter 5 [ 169 ] Of course, you can x on any database member(s) you wish, and sometimes you will have no choice. However, if calculation script performance becomes an issue, this is one of the rst places to look to make improvements. For example: FIX(Sparse Dimension) IF(Dense Dimension) Any Calculation Function; ENDIF ENDFIX There is one caveat to this. Essbase will only FIX on members in blocks that have been previously created. You can solve this by using the CREATEBLOCKONEQ command in your calculation script. This command will create the necessary missing blocks for your sparse members. When you use the FIX/ENDFIX command, you are basically turning on, and then off, the data ltering that you incorporated using the FIX/ENDFIX command in the rst place. In a typical calculation script, you may have many separate instances of FIX/ENDFIX commands that enclose a wide variety of calculation functions. The FIX/ENDFIX commands can also be nested inside one another, much like nested IF/ENDIF statements. For every FIX statement, there must be a matching ENDFIX. There is one critical thing you must know about nesting FIX/ENDFIX commands. Never x on one level of a dimension, then x again on a different level of that same dimension in a nested FIX command. Always attempt to FIX to the specic level you intend to for a dimension in one FIX command. The reason for this is because even though the next FIX command is nested within the rst FIX command it will still pull the entire dimension into the calc pool for ltering. In the example of a bad implementation below, the rst FIX command will select all members from the Calendar Periods dimension. The second FIX command will select all of the zero level members from the Calendar Periods dimension. This will actually result in all members of the Calendar Periods dimension being calculated. Do not do this: FIX("Calendar Periods") FIX(@LEVMBRS("Calendar Periods",0)) Any Calculation Function; ENDFIX ENDFIX This material is copyright and is licensed for the sole use by Paul Corcorran on 5th July 2009 8601 ave. p #1, , lubbock, , 79423 Download at Boykma.Com . licensed for the sole use by Paul Corcorran on 5th July 20 09 8601 ave. p #1, , lubbock, , 794 23 Download at Boykma.Com Calculating your Essbase Cube [ 166 ] Very Important! Since this is your rst. licensed for the sole use by Paul Corcorran on 5th July 20 09 8601 ave. p #1, , lubbock, , 794 23 Download at Boykma.Com Chapter 5 [ 167 ] Essbase Calc commands and functions As discussed earlier,. licensed for the sole use by Paul Corcorran on 5th July 20 09 8601 ave. p #1, , lubbock, , 794 23 Download at Boykma.Com Calculating your Essbase Cube [ 168 ] The array size would be the total number