对潜在块启用计算
在密集维中的密集成员上使用公式时,如果结果值来自密集维且操作数或操作数来自稀疏维,则 Essbase 不会自动创建所需的块。
在以下示例中,假定您要根据现有实际数据创建预算销售和费用数据。Sales and Expenses 是密集度量维中的成员;Budget 和 Actual 是稀疏方案维中的成员。
FIX(Budget)
(Sales = Sales -> Actual * 1.1;
Expenses = Expenses -> Actual * .95;)
ENDFIX“销售和费用”是方程式的结果,是密集维成员;操作数“实际”位于稀疏维中。由于 Essbase 仅对现有数据块执行密集成员公式,因此计算脚本不会创建所需的数据块,并且不会为尚不存在的块计算预算数据值。
您可以使用以下技术解决问题:
使用 DATACOPY 复制现有块
可以使用 Essbase 块存储计算脚本中的 DATACOPY 命令为每个现有块创建块,然后对新块执行计算。
例如:
DATACOPY Sales -> Actual TO Sales -> Budget;
DATACOPY Expenses -> Actual TO Expenses -> Budget;
FIX(Budget)
(Sales = Sales -> Actual * 1.1;
Expenses = Expenses -> Actual * .95;)
ENDFIXEssbase 创建的块包含存在的每个对应实际块的预算值。完成 DATACOPY 命令后,脚本的其余部分将更改这些值。
在以下情况下,使用 DATACOPY 效果良好:
-
现有块中的值与 DATACOPY 创建的对应值之间存在数学关系。
例如,在前面的示例中,可以根据现有“实际”值计算“预算”值。
注意:
DATACOPY 将在源块的所有单元格中创建具有相同值的新块。如果公式仅对块的一部分执行,则这些复制的单元格将保留在计算结束时,可能导致不需要的值。
-
复制的块均不只包含 #MISSING 值。
如果存在 #MISSING 值,则写入仅包含 #MISSING 值的块。不必要的 #MISSING 块需要 Essbase 资源和处理时间。
另请参见
使用 SET CREATENONMISSINGBLK 计算所有潜在块
在 Essbase 块存储计算脚本中使用 SET CREATENONMISSINGBLK 命令来限制在密集维或稀疏维上计算时不需要的值。
如果您担心不需要的值,可以使用 SET CREATENONMISSINGBLK ON 计算命令(计算内存中所有潜在块,然后仅存储包含数据值的计算块),而不是 DATACOPY。在计算密集维或稀疏维的值时,SET CREATENONMISSINGBLK 计算命令非常有用。
以下示例从现有实际数据创建预算销售和费用数据。Sales and Expenses 是密集度量维中的成员;Budget 和 Actual 是稀疏方案维中的成员。
FIX(Budget)
SET CREATENONMISSINGBLK ON
(Sales = Sales -> Actual * 1.1;
Expenses = Expenses -> Actual * .95;)
ENDFIX注意:
如果为稀疏维设置了 SET CREATEBLOCKONEQ ON,则 SET CREATENONMISSINGBLK ON 将临时覆盖 SET CREATEBLOCKONEQ ON,直到遇到 SET CREATENONMISSINGBLK OFF 命令或完成计算脚本。
使用 SET CREATENONMISSINGBLK 命令的优点是,在密集成员上应用时,仅保存受成员公式影响的数据单元格。缺点是内存中可能出现过多的潜在块,这可能会影响计算性能。使用此命令时,最好通过使用 FIX 来限制要计算的块的范围来限制潜在块的数量。