可使用 Essbase 计算跟踪深入了解成员公式处理,从而帮助您调试和优化块存储计算脚本。启用 CALCTRACE 以进行上下文相关的 Smart View 计算跟踪,或使用 SET TRACE 命令选择要跟踪的数据交叉点。
对多维数据集成功执行计算脚本后,使用计算跟踪可以访问有关计算的日志记录信息。
跟踪计算不会更改有关计算行为的任何方面。如果在 Smart View 中启用了计算,并且管理员为连接的服务器启用了计算跟踪,则在计算运行后,Smart View 会显示包含详细信息的弹出式对话框。计算跟踪信息可以从弹出式对话框粘贴到文本编辑器中。也可以在 calc_trace.txt
中找到相同信息,该文件位于 Essbase 的数据库文件目录中。
计算结果不符合预期时,计算跟踪信息可以帮助您调试计算脚本执行。
启用了方案管理的应用程序不支持计算跟踪。
要启用计算跟踪,管理员必须首先启用 CALCTRACE 应用程序配置参数。为应用程序启用计算跟踪后,可以采用两种方法来利用它:
将计算脚本中包含的计算的整个范围,但在计算期间将仅跟踪突出显示的数据单元格上下文。
如果突出显示的数据单元格在计算期间没有修改,则您会看到一条消息,指出单元格未修改。
SET TRACE mbrList
(用以针对一个成员列表启用计算跟踪)和 SET TRACE OFF
(用以禁用计算跟踪,直至在脚本中遇到新的 SET TRACE),可以跟踪计算脚本的各个部分。要使用 SET TRACE 命令,必须在 Smart View 外部使用多维数据集设计器、CLI calc 命令、Essbase Web 界面中的运行计算作业或 MaxL(执行计算语句)执行计算脚本。在 Sample Basic 上运行以下计算脚本。该脚本包含 SET TRACE 命令,用于请求要为数据交叉点(单元格)记录的详细信息,该数据交叉点(单元格)表示在 California 市场中,SKU 编号为 100-10 的产品的 1 月销售预算。
SET TRACEID "id042" SET TRACE ("100-10", "California", "Jan", "Sales", "Budget"); FIX("California", "Budget") "Sales" ( "100-10" = @MEMBER(@CONCATENATE(@NAME(@PARENT("Product")), "-20")) / 10; ); ENDFIX;
注:
另外建议使用 SET TRACEID 命令以防止覆盖计算跟踪文件。Sample Basic 具有两个稀疏维:Product 和 Market。成员公式位于度量成员 Sales 上,这是一个密集维。FIX 语句的成员列表只包含一个稀疏维 California,它属于 Market 维。
FIX 范围内现有块的数目可确定所跟踪单元格的计算次数。在本例中,计算将循环处理 California 的所有现有稀疏成员组合。这些组合中的每一项都表示一个块。
计算完成后,会在 calc_trace_id042.txt
中记录和显示以下跟踪信息:
Tracing cell: [100-10][California][Jan][Sales][Budget] (Cell update count: 1) Previous value: 840.00 Dependent values: [100-20][California][Jan][Sales][Budget] = 140.00 New value: [100-10][California][Jan][Sales][Budget] = 14.00 Computed in lines: [91 - 93] using: "Sales"( "100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10; ) Tracing cell: [100-10][California][Jan][Sales][Budget] (Cell update count: 2) Block from FIX scope: [100-30][California] Actual block used in calculation: [100-10][California] Previous value: 14.00 Dependent values: [100-20][California][Jan][Sales][Budget] = 140.00 New value: [100-10][California][Jan][Sales][Budget] = 14.00 Computed in lines: [91 - 93] using: "Sales"( "100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10; ) Tracing cell: [100-10][California][Jan][Sales][Budget] (Cell update count: 3) Block from FIX scope: [200-10][California] Actual block used in calculation: [100-10][California] Previous value: 14.00 Dependent values: [200-20][California][Jan][Sales][Budget] = 520.00 New value: [100-10][California][Jan][Sales][Budget] = 52.00 Computed in lines: [91 - 93] using: "Sales"( "100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10; ) [...calc iterations 4-7 are omitted from example...] Tracing cell: [100-10][California][Jan][Sales][Budget] (Cell update count: 8) Block from FIX scope: [400-30][California] Actual block used in calculation: [100-10][California] Previous value: 9.00 Dependent values: [400-20][California][Jan][Sales][Budget] = 90.00 New value: [100-10][California][Jan][Sales][Budget] = 9.00 Computed in lines: [91 - 93] using: "Sales"( "100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10; )
计算跟踪日志可针对所跟踪单元格提供有关计算工作方式的以下洞察:
跟踪的单元格计算了多次,并且单元格值每次都由新值覆盖(报告的单元格更新计数停止在 8)。
该单元格的值在计算前是 840.00。
对于每次计算,会显示相关值和新值。相关值来自 FIX 语句中的成员公式。
在所有计算完成后,跟踪的单元格的最终值为 9,但它表示产品 "400-20"->California
的值除以 10。
计算脚本的第 91-93 行包含有关 Sales 的成员公式,这些行负责生成更新值。
对于循环处理的每个块,将使用以下公式计算 Sales:
"100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10
该公式左侧包含一个稀疏成员,可导致实际计算块与初始 FIX 块不相同。例如,当循环处理 "California"->"100-20" 进行计算时,实际在 "California"->"100-10" 处完成计算。
仅当 FIX 语句中的块与成员公式中表示的块有区别时,才会显示标题为 Block from FIX scope
和 Actual block used in calculation
的跟踪日志条目。对于存在重复计算的原因,这些日志条目可以提供线索,帮助您调试计算脚本。