UNDEFVALS

在多维数据集的规则中放置 UNDEFVALS 会将多维数据集的缺省值从零更改为 特殊未定义 值。 与其他规则函数一样,UNDEFVALS 也仅应用于与显示该函数的规则关联的多维数据集。

此函数仅在规则中有效。 在 TurboIntegrator 进程中使用此函数会引起错误。

使用 UNDEFVALS 将对数据在多维数据集内的存储方式以及检索方式产生影响。

  • 数据存储

    对于未在规则中指定 UNDEFVALS 的多维数据集而言,缺省值为零。 如果尝试在此多维数据集的单元格中存储零,那么该存储请求将被忽略,因为这是冗余的缺省值存储尝试,会不必要地耗用内存空间。 与此类似,如果单元格已经包含值,但又删除了该值,那么该单元格中不会存储任何内容。

    但是,如果此多维数据集在规则中定义了 UNDEFVALS,那么缺省值将是未定义的特殊值。 现在,在此多维数据集的单元格中存储零时,将实际地存储该值,就像存储任何其他非零值一样。

    特殊的未定义值只是运行时值,是从单元格值的请求返回的。 此类值绝不会存储在内存的实际单元格中,也绝不会写入磁盘。 将 UNDEFVALS 包含在多维数据集的规则中,不会对内存使用量或磁盘存储空间产生影响,但实际将零作为值包含在内的单元格除外。 UNDEFVALS 包含在多维数据集的规则中时,该多维数据集内的零值将耗用内存空间,并且将写入磁盘,就像其他任何数据值一样。 如果未指定 UNDEFVALS,那么零值单元格不会存储在内存中,也不会写入磁盘。

  • 数据检索

    对于未在规则中指定 UNDEFVALS 的多维数据集而言,缺省值为零。 检索单元格时,如果在多维数据集中当前没有为该值存储任何值,那么将返回零(作为缺省值)。 这意味着应用程序无法判断单元格是否实际存在并将零包含为单元格值,也无法判断单元格是否不存在(正如稀疏数据也可能是这种情况)。

    但是,如果此多维数据集在规则中定义了 UNDEFVALS,那么缺省值将是未定义的特殊值。 在这种情况下,检索不存在的单元格时,检索到的值将是这个特殊的未定义值。 这可用于区分不存在的单元格(返回特殊的未定义值)与存在但其值为零的单元格(返回零)。 编写为针对 Planning Analytics运行的任何客户机 (可能迂到设置了 UNDEFVALS 的多维数据集) 必须准备好处理此 特殊未定义 的单元格值,而不是零。 客户机可以检测从 Planning Analytics 返回的值是否是具有 TM1ValIsUndefined API 函数的此 特殊未定义 值。 有关 TM1ValIsUndefined API 函数的详细信息,请参阅 TM1 API 文档。

    注:特殊未定义 值不是 UNDEF () TurboIntegrator 函数返回的值。 UNDEF() 返回的值是一个未定义的值,用于尝试除零或者计算非法数字的对数之类的情况。

在 TurboIntegrator 中,对于正常的算术运算(+、-、*、/、\ 和 ^)和正常的算术比较(<、>、>=、<=、= 和 <>),特殊的未定义值均被视为零。 为此,以下代码不起作用:

NoCellVal = UndefinedCellValue( 'cube-name' );
If ( vv = NoCellVal );

在此比较中,NoCellVal(即 UNDEFVALS 多维数据集的特殊的未定义值)被视为零。 这意味着比较实际为 If ( vv = 0 )

在 TurboIntegrator 中,必须使用 IsUndefinedCellValue 来测试单元格值是否为 special undefined 值。 例如:
 vv = CellGetN( 'cube-name', elements-list);
if ( IsUndefinedCellValue( vv, 'cube-name' ) = 1 ); 
#the cells does not exist 
cell_does_not_exist = 1;
else; 
#cell exists 
cell_does_not_exist = 0;
Endif;

语法

UNDEFVALS

参数

无。