Creates a block or blocks for a sparse member name or a sparse member combination, and sets dense values in the newly created block to #MISSING.
Sometimes, new blocks are not desired; for example, when they contain no other values. In large databases, creation and processing of unneeded blocks can increase processing time and storage requirements.
This advanced-level function can help you use bottom-up calculation to achieve faster performance. It is useful for generating empty target blocks that can then be traversed during bottom-up processing, and populated with data at that time. It is most useful in those situations where blocks are not automatically created by the calculator; for example, during processing of a dense formula where the target blocks are from a different, sparse dimension.
Whereas the allocation functions (@ALLOCATE and @MDALLOCATE) also create the necessary target blocks, those functions are intended specifically for allocating values. The purpose of @CREATEBLOCK is only to enable rapid block creation, without reading or writing data.
This function is not supported in outline member formulas.
The DATACOPY calculation command also creates blocks on demand.
Any single, sparse member name or a sparse member combination or a function that returns a single member, member list, or member combination. For example:
Single member name:
Combination of sparse members:
Member function returning mbrName or mbrList:
This function does nothing if the block for the specified member combination already exists.
mbrName|mbrList can be explicitly stated or can be returned by a function.
If mbrName is a cross-dimensional member (such as "100-10"->"New York"), this function creates a block for the combination specified.
When you use this function in a calculation script, use it within a FIX statement; for example, FIX on the member for which blocks should be created. Although FIX is not required, using it may improve calculation performance.
If you use this function in a member formula, your formula should look like this:
This function does not return a value; rather, it creates the required blocks in the database with a #MISSING value.
On sparse dimension members, a formula is executed in top-down mode, creating all possible blocks. However, if the dimension member is dense, it is executed as bottom-up, creating new blocks only based on the existing ones. Therefore, @CREATEBLOCK will not create dense blocks on an empty database.
For more discussion of top-down and bottom-up processing, see @CALCMODE.
The following calculation script example uses the Sample.Basic database, but assumes that only the 100-10 and New York block is loaded. The member formula for Sales is @CREATEBLOCK("100").
/* Calling @CREATEBLOCK inside member formula (Sales) */ FIX("100-10", "New York") "Sales" ( @CREATEBLOCK ("100"); ) ENDFIX
The script creates all possible sparse blocks matching the FIX…ENDFIX statement. In this case, only the block "100"->"New York" is created.
In the following calculation script example, @CREATEBLOCK is not used in any member formula, so it must be assigned in the script using mbrName =.
/* Calling @CREATEBLOCK outside member formula */ Budget = @CREATEBLOCK ("100");
The existing value for Budget member in the current processing block is unchanged, because @CREATEBLOCK does not return a value (see first Note).