简介
本教程显示了在 Oracle EPM Cloud Planning 中生成的专用的计算脚本的多种方法,用于仅计算已编辑的数据,而不是整个数据输入表单。
背景信息
使用 Groovy EPM 对象模型,您可以确定数据输入网格中的哪些单元格已编辑,然后生成有针对性的 Essbase 计算,以仅计算受数据输入影响的那些成员。
在本教程中,您将使用“产品数量分析”仪表盘。顶部表单“产品体积”捕获每月期间内各种产品的体积。底部表单“产品收入”显示各种产品的收入。编辑顶层表单时,您希望仅在已编辑产品的底层表单中计算收入。

本教程分为三个部分,涵盖了计算已编辑产品的三种不同方法:
- 生成并执行集中计算脚本
- 创建执行现有计算作业的 Groovy 脚本
- 生成并执行集中计算脚本,然后返回到 Groovy 脚本进行进一步评估
先决条件
Cloud EPM 实操教程可能需要您将快照导入 Cloud EPM Enterprise Service 实例。在导入教程快照之前,必须请求另一个 Cloud EPM Enterprise Service 实例或删除当前应用程序和业务流程。教程快照不会通过现有应用程序或业务流程导入,也不会自动替换或恢复您当前使用的应用程序或业务流程。
在开始本教程之前,您必须:
- 具有服务管理员对 Cloud EPM Enterprise Service 实例的访问权限。
- 将此快照上载并导入到 Planning 实例中。如果您以前上载了其他 Groovy 教程的快照,则可以继续使用相同的快照。
注意:
如果导入快照时遇到迁移错误,请重新运行迁移(不包括 HSS-Shared Services 组件),以及核心组件中的“安全性”和“用户首选项”对象。有关上载和导入快照的更多信息,请参阅 Administering Migration for Oracle Enterprise Performance Management Cloud 文档。提示:
本教程所需的脚本作为每个部分中的文本文件链接。设置 Planning 环境
在 Planning 中设置用户变量
首先,设置必需的用户变量以使用“产品数量分析”仪表盘。
- 从主页中,依次单击工具和用户首选项。
- 选择用户变量选项卡。
- 输入以下变量定义:
- 单击保存。在确认消息中,单击确定,然后返回到主页。

| 用户变量 | 成员 |
|---|---|
| 报告币种 | 美元 |
| 货币 | 美元 |
| 实体 | 销售美国 |
| Scenario | OEP_Plan |
| Version | OEP_Working |
在 Planning 中导入运行时提示的变量
接下来,将计算变量导入到 OEP_FS 多维数据集,以支持本教程后面使用的运行时提示 (run-time prompt,RTP)。
- 右键单击 HP4_OEP_FS_Variables.xml 的链接,然后将文件保存到本地驱动器。
- 从左上角,单击
导航器并导航到规则(在“创建和管理”下),以打开 Calculation Manager。在“系统视图”中,展开 EPM 云 > HP4 。右键单击 OEP_FS ,然后选择导入。 - 在“文件导入详细信息”下,浏览以从本地驱动器中选择 HP4_OEP_FS_Variables.xml 。
- 在“Location Details(地点详细信息)”下,进行以下选择:
- 应用程序类型:EPM 云
- 应用:HP4
- 多维数据集:OEP_FS
- 在“导入选项”下,选择覆盖现有对象。

- 单击导入。查看导入结果(它们可能表示已更新或已插入),然后单击确定。

- 单击取消可关闭“导入”对话框。
为编辑的产品生成聚焦计算脚本
在此部分中,您将实施 Planning 中的 Groovy 脚本来计算已编辑产品的产品收入。
创建 Groovy 脚本
- 在 Calculation Manager 中,在 OEP_FS 计划类型中创建名为 Groovy Calculate Product Revenue 的规则。
- 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本。
- 复制此脚本并将其粘贴到编辑器中:
- 在工具栏上,单击
(保存)以保存脚本,然后单击
(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。将 Calculation Manager 窗口保持打开状态。


// Capture the edited periods and products Set<String> editedMembers = []operation.grid.dataCellIterator({DataCell cell -> cell.edited}, MemberNameType.ESSBASE_NAME).each { DataCell cell -> editedMembers << cell.periodName << cell.getMemberName("Product")
} if(editedMembers.size() == 0){
println("No edited cells found!") return; } // Generate the calc script to calculate revenue for the products whose volume was edited String calcScript = """ Fix(${cscParams(operation.grid.pov, editedMembers)}) "OFS_Calculated" ( "OFS_Product Revenue" = "OFS_Volume" * "OFS_Avg Selling Price"; ) EndFix;"""
println("The following calc script was executed by $operation.user.fullName: \n $calcScript")
return calcScript.toString()
![]()
定义集以捕获唯一编辑的成员。
捕获编辑的成员。
检查是否编辑了任何成员。如果未编辑任何内容,则不需要进一步处理,因此请从脚本返回。
通过固定 POV 成员和已编辑成员,生成计算脚本来计算已编辑单元格的产品收入。
注意:
cscParams() API 是一个实用程序,它返回一个字符串值,其中每个指定的项都平展、引用和用逗号分隔。此方法返回的字符串可以作为参数插入到 Essbase 计算脚本命令中。
输出一条消息,指示执行规则的用户和生成的计算脚本。
返回计算脚本,然后将执行该脚本。
将规则添加到 Planning 表单
在此部分中,您将将 Groovy 脚本规则添加到“产品体积”表单,以便在保存后运行。
- 选择“计划”窗口,然后从左上角单击
浏览器并定位至表单(在“创建和管理”下)。选择 Product Volume 表单。 - 编辑该表单。添加 Groovy Calculate Product Revenue 规则并将其设置为 Run After Save(保存后运行)。保存表单并关闭“Form Manager(表单管理器)”窗口。

测试聚焦计算规则
在此部分中,您将通过编辑“产品体积分析”仪表盘中的数据来测试 Groovy 规则。
- 从主页中,单击仪表板。打开产品体积分析仪表盘。
- 对于 Envoy Standard Notebook ,编辑 January 的产品卷。对于 Ultra Notebook 13 in ,编辑 March 的产品卷。保存表单(而非仪表盘)。
- 单击 OK(确定)关闭信息消息。更改将反映在产品收入表单中。
- 关闭仪表盘。导航到作业(在“应用程序”下),然后选择 Groovy Calculate Product Revenue 作业。
- 已完成作业的日志消息标识执行规则的用户和生成的计算脚本。查看作业详细信息后,关闭窗口并返回主页。



使用 Groovy 脚本执行计算作业
在此部分中,您将创建两个 Groovy 脚本:一个用于计算表单中已编辑成员的产品收入,另一个用于执行运行第一个计算的计算作业。第二个脚本附加到表单并在保存数据时执行,第一个脚本使用 RTP 捕获从第二个脚本传递给它的编辑成员。将计算卸载到另一个规则调用的独立规则中,可以高效地维护、测试和重用代码。
使用运行时提示为集中计算创建 Groovy 脚本
- 选择“计算管理器”窗口,并在 OEP_FS 计划类型中创建名为 Groovy Calculate Product Revenue RTPs 的规则。
- 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本。
- 复制此脚本并将其粘贴到编辑器中:
- 在工具栏上,单击
(保存)以保存脚本。 - 单击
(Validate and Deploy)。对于“编辑的成员”RTP,输入值 Accessories以进行验证,然后单击确定。 - 出现提示时,单击 OK 。

/*RTPS: {editedMembers}*/
String calcScript = """Fix($rtps.editedMembers)
"OFS_Calculated"
(
"OFS_Product Revenue" = "OFS_Volume" * "OFS_Avg Selling Price";
)
ENDFIX"""
println("The following calc script was executed by $operation.user.fullName: \n $calcScript")
return calcScript
定义运行时提示以接受第一行上的已编辑成员。
生成计算脚本,通过固定已编辑成员来计算已编辑单元格的产品收入。
输出一条消息,指示执行规则的用户和生成的计算脚本。
返回计算脚本,然后将执行该脚本。
注意:
在此步骤中,规则不会执行;但是,您必须输入有效的成员,验证过程才能成功。创建 Groovy 规则以执行计算作业
现在,您创建了第二个 Groovy 规则,该规则执行将变量传递给并运行 Groovy Calculate Product Revenue RTP 规则的计算作业。
- 在 Calculation Manager 中,在 OEP_FS 计划类型中创建名为 Groovy Calculate Product Revenue by Calling Execute Job 的规则。
- 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本。
- 复制此脚本并将其粘贴到编辑器中:
- 在工具栏上,单击
(保存)以保存脚本,然后单击
(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。将 Calculation Manager 窗口保持打开状态。


// Capture the edited periods and products Set<String> editedMembers = []operation.grid.dataCellIterator({DataCell cell -> cell.edited}, MemberNameType.ESSBASE_NAME).each { DataCell cell -> editedMembers << cell.periodName << cell.getMemberName("Product")
} if(editedMembers.size() == 0){
println("No edited cells found!") return; } // Execute the job that calculates the product revenues JobFactory jf = operation.application.jobFactory
List<DataGrid.HeaderCell> povMemberCells = operation.grid.pov.findAll{ DataGrid.HeaderCell it -> it.dimName != "Plan Element" }
Job job = executeJob(jf.job("Groovy Calculate Product Revenue RTPs", "Rules", ["editedMembers" : cscParams(povMemberCells, editedMembers)]))
![]()
定义集以捕获唯一编辑的成员。
捕获编辑的成员。
检查是否已编辑任何成员。如果未编辑任何内容,则不需要进一步处理,因此请从脚本返回。
找工作工厂。
获取除“计划要素”以外的维的 POV 成员标题单元格列表,因为该脚本具有“计划要素”维成员上的成员块。
通过将 POV 和编辑的成员作为 editedMembers 运行时提示的值传递来执行 Groovy Calculate Product Revenue RTPs 规则。
将规则添加到 Planning 表单
在此部分中,您将将 Groovy 脚本规则添加到“产品体积”表单,以便在保存后运行。
- 选择“计划”窗口,然后从左上角单击
浏览器并定位至表单(在“创建和管理”下)。选择 Product Volume 表单。 - 编辑该表单。从所选规则中删除 Groovy Calculate Product Revenue 规则。添加 Groovy Calculate Product Revenue by Calling Execute Job 规则并将其设置为 Run After Save(保存后运行)。保存表单并关闭“Form Manager(表单管理器)”窗口。


测试 Groovy 规则以调用计算作业
在此部分中,您将通过编辑“产品体积分析”仪表盘中的数据来测试 Groovy 规则。
- 从主页中,单击仪表板。打开产品体积分析仪表盘。
- 对于 Envoy Standard Notebook ,编辑 January 的产品卷。对于 Ultra Notebook 13 in ,编辑 March 的产品卷。保存表单(而非仪表盘)。
- 单击确定以关闭信息消息。更改将反映在产品收入表单中。
- 关闭仪表盘。导航到作业(在“应用程序”下),然后选择通过调用执行作业来计算产品收入作业。
- 在作业详细信息中, Groovy Calculate Product Revenue RTPs 规则将列为子作业。单击子作业。
- 在子作业详细信息中,您可以看到传递给脚本的成员列表,以显示“已编辑的成员”提示。已完成作业的日志消息标识执行规则的用户和生成的计算脚本。查看作业详细信息后,关闭窗口并返回主页。





通过进一步的 Groovy 处理为编辑的数据生成内嵌计算脚本
EPM 对象模型提供了一种内联执行计算脚本的方法,然后返回到 Groovy 脚本进行进一步评估。在本节中,您将通过实施 Groovy 脚本来浏览此计算脚本和 Groovy 集成,以计算已编辑产品的产品收入并计算已计算的单元格数。
创建 Groovy 脚本
- 选择“计算管理器”窗口,并在 OEP_FS 计划类型中创建名为 Groovy 执行计算脚本的规则。
- 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本。
- 复制此脚本并将其粘贴到编辑器中:
- 在工具栏上,单击
(保存)以保存脚本,然后单击
(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。关闭 Calculation Manager。


// Capture the edited periods and products Set<String> editedMembers = []operation.grid.dataCellIterator({DataCell cell -> cell.edited}, MemberNameType.ESSBASE_NAME).each { DataCell cell -> editedMembers << cell.periodName << cell.getMemberName("Product")
} if(editedMembers.size() == 0){
println("No edited cells found!") return; } // Generate the calc script to calculate revenue for the products whose volumes were edited and to count and return the number of cells calculated String calcScript = """ VAR numCellsCalculated = 0; Fix(${cscParams(operation.grid.pov, editedMembers)})
"OFS_Calculated" ( "OFS_Product Revenue" = "OFS_Volume" * "OFS_Avg Selling Price"; numCellsCalculated = numCellsCalculated + 1; ) EndFix; Fix(${cscParams(operation.grid.pov, editedMembers)}) "OFS_Calculated" ( @RETURN(@HspNumToString(numCellsCalculated), ERROR); ) EndFix; """ Cube cube = operation.application.getCube("OEP_FS")
try { cube.executeCalcScript(calcScript)
} catch(CalcScriptException e) { println("The following calc script was executed by $operation.user.fullName: \n $calcScript")
println("Total number of cells calculated: $e.atReturnMessage")
}
定义集以捕获唯一编辑的成员。
捕获编辑的成员。
检查是否编辑了任何成员。如果未编辑任何内容,则不需要进一步处理,因此请从脚本返回。
通过固定 POV 成员和已编辑成员,生成计算脚本来计算已编辑单元格的产品收入。计算脚本还返回通过 @RETURN 命令计算的单元数。
获取 OEP_FS 多维数据集。
对多维数据集执行计算脚本。
输出一条消息,指示执行规则的用户和生成的计算脚本。
打印计算脚本返回的单元格总数。
将规则添加到 Planning 表单
在此部分中,您将将 Groovy 脚本规则添加到“产品体积”表单,以便在保存后运行。
- 从左上角,单击
导航器并导航到表单(在“创建和管理”下)。选择 Product Volume 表单。 - 编辑该表单。从所选业务规则中删除通过调用执行作业来计算产品收入规则。添加 Groovy Execute Calc Script(Groovy 执行计算脚本)规则并将其设置为 Run After Save(保存后运行)。保存表单并关闭“Form Manager(表单管理器)”窗口。


测试 Groovy 规则以执行计算脚本
在此部分中,您将通过编辑“产品体积分析”仪表盘中的数据来测试 Groovy 规则。
- 从主页中,单击仪表板。打开 Product Volume Analysis 仪表盘。
- 对于 Envoy Standard Notebook ,编辑 January 的产品卷。对于 Ultra Notebook 13 in ,编辑 March 的产品卷。保存表单(而非仪表盘)。
- 单击确定以关闭信息消息。更改将反映在产品收入表单中。
- 关闭仪表盘。导航到作业,然后选择 Groovy Execute Calc Script 作业。
- 已完成作业的日志消息标识执行规则的用户和生成的计算脚本,以及计算的单元格计数。





相关链接
更多学习资源
通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 Oracle University 查看可用的培训资源。
有关产品文档,请访问 Oracle 帮助中心。