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.

Note: The DATACOPY calculation command also creates blocks on demand.


Parameter Description
mbrName 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: [“200-20”]
  • Combination of sparse members: [“100-10″->”New York”]
  • Member function returning mbrName or mbrList: @ANCESTORS(“New York”)


  • @CREATEBLOCK 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 @CREATEBLOCK 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 @CREATEBLOCK in a member formula, your formula should look like this: @CREATEBLOCK (…).
  • @CREATEBLOCK 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");

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 Member =.

/* 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).