计算多维数据集中的数据子集
为了避免计算所需的数据量,请在 Essbase 数据库中计算数据的子集。可以使用成员集函数的任意组合、用于指定包含项的 FIX 语句以及用于指定排除项的 EXCLUDE 语句来指示子集。
要计算多维数据集中的数据子集,请使用以下方法之一:
-
使用成员集函数创建公式以计算成员列表。
-
使用 FIX...ENDFIX 命令按包含计算值范围。
-
使用 EXCLUDE...ENDEXCLUDE 命令通过排除来计算值范围。
注意:
启用智能计算后,在部分计算数据库后,新计算的数据块不会标记为干净。计算数据库的某个子集时,可以使用 SET CLEARUPDATESTATUS AFTER 命令确保新计算的块标记为干净。使用此命令可确保 Essbase 使用智能计算尽可能高效地重新计算数据库。
计算成员列表
Essbase 成员集计算函数可生成基于您指定的成员的成员列表。
例如, @IDESCENDANTS 函数可生成指定成员的所有后代的列表。在公式中使用成员集函数时, Essbase 将在计算公式之前生成成员列表。
在以下示例中,对成员“总费用”使用 @IDESCENDANTS 命令生成这些成员的列表 -“总费用”及其后代,即“营销”、“薪资”和“其他”:
@IDESCENDANTS("Total Expenses");另请参见
使用 FIX 命令
使用 Essbase 块存储计算脚本中的 FIX 命令定义要包括在计算中的成员。FIX 块允许您通过避免过度计算来优化性能。FIX 还允许您使用不同的公式计算立方的单独部分。
计算脚本中的 FIX 块可帮助您定义要包括在计算中的数据时段。
例如,以下 FIX 块仅计算东部(纽约、马萨诸塞州、佛罗里达州、康涅狄格州和新罕布什尔州)后代的预算值:
FIX(Budget,@DESCENDANTS(East))
CALC DIM(Year, Measures, Product);
ENDFIX以下示例修复了 UDA 为 New Mkt 的 East 子代的成员组合:
FIX(@CHILDREN(East) AND @UDA(Market,"New Mkt"))
Marketing = Marketing * 1.1;
ENDFIX以下示例使用通配符匹配 (???) 修复以字符 -10 结尾的成员名称,即成员 100-10、200-10、300-10 和 400-10:
FIX(@MATCH(Product, "???-10"))
Price = Price * 1.1;
ENDFIX仅对密集维使用 FIX 命令时, Essbase 会检索包含指定成员的必需值或值的整个块。I/O 不受影响,计算性能时间有所缩短。
对稀疏维使用 FIX 命令时, Essbase 将检索指定稀疏维成员的块。I/O 可以大大减少。
对于在密集维成员上使用的每个 FIX 命令, Essbase 会对数据库循环一次。如果可能,组合 FIX 块以提高计算性能。
例如,通过使用一个 FIX 命令,以下计算脚本将导致 Essbase 仅在数据库中循环一次,从而计算实际值和预算值:
FIX(Actual,Budget)
CALC DIM(Year, Measures);
ENDFIX相反,通过使用两个 FIX 命令,以下计算脚本会导致 Essbase 在数据库中循环两次:一次计算实际数据值,一次计算预算数据值:
FIX(Actual)
CALC DIM(Year, Measures);
ENDFIX
FIX(Budget)
CALC DIM(Year, Measures);
ENDFIX不能对在 FIX 命令中计算的维的子集执行 FIX 操作。例如,以下计算脚本将返回错误消息,因为 CALC DIM 操作会计算整个市场维,尽管上面的 FIX 修复了市场维的特定成员:
FIX(@CHILDREN(East) AND @UDA(Market,"New Mkt"))
CALC DIM(Year, Measures, Product, Market);
ENDFIXFIX 命令可以嵌套在其他 FIX 命令块中。但是,错误地使用嵌套 FIX 命令可能会导致错误的结果。例如,以下计算脚本的目的是将 1 分配给 East 的所有子代,然后将 2 分配给 New York:
FIX (@CHILDREN(EAST))
"100-10"=1;
FIX ("New York")
"100-10"=2;
ENDFIX
ENDFIX但是,嵌套的 FIX 命令会修复上面 FIX 命令指定的维子集(不允许这样做);因此,该脚本会将 2 分配给 East 的所有子代,因为该脚本的运行方式与编写方式相同:
FIX (@CHILDREN(EAST),''New York'')
"100-10"=1;
"100-10"=2;
ENDFIX请使用两个独立的 FIX 命令块,而不是使用嵌套的 FIX 命令。例如:
FIX (@CHILDREN(EAST))
"100-10"=1;
ENDFIX
FIX ("New York")
"100-10"=2;
ENDFIX不能在 FIX 成员语句中使用 VAR 计算命令定义的变量 (varName)。在执行计算之前对 FIX 成员求值,在设置 FIX 语句之后在运行时对变量求值。由于变量可以在计算执行期间更改,因此不能将该变量用作 FIX 语句的一部分。以下示例显示了在 FIX 成员语句中不正确的使用该变量:
VAR varName=1;
FIX (@relative(@memberat(@List("Product1","Product2"),varName),0))
COMMANDS;
ENDFIX另请参见
使用排除命令
使用 Essbase 块存储计算脚本中的 EXCLUDE..ENDEXCLUDE 命令块定义要从计算中排除的成员。
有时,指定计算中不包含哪些成员比定义要包括哪些成员更容易。
指定不应在 EXCLUDE … ENDEXCLUDE 命令中计算的成员可能比在 FIX … ENDFIX 命令中指定成员名称的复杂组合更简单。
另请参见