简介

本教程显示了在 Oracle EPM Cloud Planning 中生成的专用的计算脚本的多种方法,用于仅计算已编辑的数据,而不是整个数据输入表单。

背景信息

使用 Groovy EPM 对象模型,您可以确定数据输入网格中的哪些单元格已编辑,然后生成有针对性的 Essbase 计算,以仅计算受数据输入影响的那些成员。

在本教程中,您将使用“产品数量分析”仪表盘。顶部表单“产品体积”捕获每月期间内各种产品的体积。底部表单“产品收入”显示各种产品的收入。编辑顶层表单时,您希望仅在已编辑产品的底层表单中计算收入。

产品数量分析仪表盘

本教程分为三个部分,涵盖了计算已编辑产品的三种不同方法:

  1. 生成并执行集中计算脚本
  2. 创建执行现有计算作业的 Groovy 脚本
  3. 生成并执行集中计算脚本,然后返回到 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 中设置用户变量

首先,设置必需的用户变量以使用“产品数量分析”仪表盘。

  1. 从主页中,依次单击工具用户首选项
  2. 用户首选项
  3. 选择用户变量选项卡。
  4. 输入以下变量定义:
  5. 用户变量 成员
    报告币种 美元
    货币 美元
    实体 销售美国
    Scenario OEP_Plan
    Version OEP_Working

    选定的用户变量

  6. 单击保存。在确认消息中,单击确定,然后返回到主页。

在 Planning 中导入运行时提示的变量

接下来,将计算变量导入到 OEP_FS 多维数据集,以支持本教程后面使用的运行时提示 (run-time prompt,RTP)。

  1. 右键单击 HP4_OEP_FS_Variables.xml 的链接,然后将文件保存到本地驱动器。
  2. 从左上角,单击 “浏览器”图标 导航器并导航到规则(在“创建和管理”下),以打开 Calculation Manager。在“系统视图”中,展开 EPM 云 > HP4 。右键单击 OEP_FS ,然后选择导入
  3. 在“文件导入详细信息”下,浏览以从本地驱动器中选择 HP4_OEP_FS_Variables.xml
  4. 在“Location Details(地点详细信息)”下,进行以下选择:
    • 应用程序类型:EPM 云
    • 应用:HP4
    • 多维数据集:OEP_FS
  5. 在“导入选项”下,选择覆盖现有对象
    导入变体
  6. 单击导入。查看导入结果(它们可能表示已更新或已插入),然后单击确定
    导入成果
  7. 单击取消可关闭“导入”对话框。

为编辑的产品生成聚焦计算脚本

在此部分中,您将实施 Planning 中的 Groovy 脚本来计算已编辑产品的产品收入。

创建 Groovy 脚本

  1. 在 Calculation Manager 中,在 OEP_FS 计划类型中创建名为 Groovy Calculate Product Revenue 的规则。
  2. 新建对象
  3. 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本
  4. 规则编辑器选项
  5. 复制此脚本并将其粘贴到编辑器中:
  6. // 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 计算脚本命令中。

    输出一条消息,指示执行规则的用户和生成的计算脚本。

    返回计算脚本,然后将执行该脚本。

  7. 在工具栏上,单击 保存(保存)以保存脚本,然后单击 ValidateAndDeploy(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。将 Calculation Manager 窗口保持打开状态。

将规则添加到 Planning 表单

在此部分中,您将将 Groovy 脚本规则添加到“产品体积”表单,以便在保存后运行。

  1. 选择“计划”窗口,然后从左上角单击 “浏览器”图标 浏览器并定位至表单(在“创建和管理”下)。选择 Product Volume 表单。
  2. 表单管理器
  3. 编辑该表单。添加 Groovy Calculate Product Revenue 规则并将其设置为 Run After Save(保存后运行)。保存表单并关闭“Form Manager(表单管理器)”窗口。
  4. 保存后运行

测试聚焦计算规则

在此部分中,您将通过编辑“产品体积分析”仪表盘中的数据来测试 Groovy 规则。

  1. 从主页中,单击仪表板。打开产品体积分析仪表盘。
  2. 产品数量分析仪表盘
  3. 对于 Envoy Standard Notebook ,编辑 January 的产品卷。对于 Ultra Notebook 13 in ,编辑 March 的产品卷。保存表单(而非仪表盘)。
  4. 保存“Product Volume(产品体积)”表单。
  5. 单击 OK(确定)关闭信息消息。更改将反映在产品收入表单中。
  6. 更改将反映在“产品收入”表单中。
  7. 关闭仪表盘。导航到作业(在“应用程序”下),然后选择 Groovy Calculate Product Revenue 作业。
  8. 作业控制台中显示的作业。
  9. 已完成作业的日志消息标识执行规则的用户和生成的计算脚本。查看作业详细信息后,关闭窗口并返回主页。
  10. 作业的日志消息。

使用 Groovy 脚本执行计算作业

在此部分中,您将创建两个 Groovy 脚本:一个用于计算表单中已编辑成员的产品收入,另一个用于执行运行第一个计算的计算作业。第二个脚本附加到表单并在保存数据时执行,第一个脚本使用 RTP 捕获从第二个脚本传递给它的编辑成员。将计算卸载到另一个规则调用的独立规则中,可以高效地维护、测试和重用代码。

使用运行时提示为集中计算创建 Groovy 脚本

  1. 选择“计算管理器”窗口,并在 OEP_FS 计划类型中创建名为 Groovy Calculate Product Revenue RTPs 的规则。
  2. 新建对象
  3. 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本
  4. 规则编辑器选项
  5. 复制此脚本并将其粘贴到编辑器中:
  6. /*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 
    

    定义运行时提示以接受第一行上的已编辑成员。

    生成计算脚本,通过固定已编辑成员来计算已编辑单元格的产品收入。

    输出一条消息,指示执行规则的用户和生成的计算脚本。

    返回计算脚本,然后将执行该脚本。

  7. 在工具栏上,单击 保存(保存)以保存脚本。
  8. 单击 验证和部署 (Validate and Deploy)。对于“编辑的成员”RTP,输入值 Accessories 以进行验证,然后单击确定
  9. 注意:

    在此步骤中,规则不会执行;但是,您必须输入有效的成员,验证过程才能成功。
  10. 出现提示时,单击 OK

创建 Groovy 规则以执行计算作业

现在,您创建了第二个 Groovy 规则,该规则执行将变量传递给并运行 Groovy Calculate Product Revenue RTP 规则的计算作业。

  1. 在 Calculation Manager 中,在 OEP_FS 计划类型中创建名为 Groovy Calculate Product Revenue by Calling Execute Job 的规则。
  2. 新建对象
  3. 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本
  4. 规则编辑器选项
  5. 复制此脚本并将其粘贴到编辑器中:
  6. // 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 规则。

  7. 在工具栏上,单击 保存(保存)以保存脚本,然后单击 ValidateAndDeploy(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。将 Calculation Manager 窗口保持打开状态。

将规则添加到 Planning 表单

在此部分中,您将将 Groovy 脚本规则添加到“产品体积”表单,以便在保存后运行。

  1. 选择“计划”窗口,然后从左上角单击 “浏览器”图标 浏览器并定位至表单(在“创建和管理”下)。选择 Product Volume 表单。
  2. 表单管理器
  3. 编辑该表单。从所选规则中删除 Groovy Calculate Product Revenue 规则。添加 Groovy Calculate Product Revenue by Calling Execute Job 规则并将其设置为 Run After Save(保存后运行)。保存表单并关闭“Form Manager(表单管理器)”窗口。
  4. 将执行作业规则添加到“产品数量”表单

测试 Groovy 规则以调用计算作业

在此部分中,您将通过编辑“产品体积分析”仪表盘中的数据来测试 Groovy 规则。

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

通过进一步的 Groovy 处理为编辑的数据生成内嵌计算脚本

EPM 对象模型提供了一种内联执行计算脚本的方法,然后返回到 Groovy 脚本进行进一步评估。在本节中,您将通过实施 Groovy 脚本来浏览此计算脚本和 Groovy 集成,以计算已编辑产品的产品收入并计算已计算的单元格数。

创建 Groovy 脚本

  1. 选择“计算管理器”窗口,并在 OEP_FS 计划类型中创建名为 Groovy 执行计算脚本的规则。
  2. 新建对象
  3. 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本
  4. 规则编辑器选项
  5. 复制此脚本并将其粘贴到编辑器中:
  6. // 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 多维数据集。

    对多维数据集执行计算脚本。

    输出一条消息,指示执行规则的用户和生成的计算脚本。

    打印计算脚本返回的单元格总数。

  7. 在工具栏上,单击 保存(保存)以保存脚本,然后单击 ValidateAndDeploy(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。关闭 Calculation Manager。

将规则添加到 Planning 表单

在此部分中,您将将 Groovy 脚本规则添加到“产品体积”表单,以便在保存后运行。

  1. 从左上角,单击 “浏览器”图标 导航器并导航到表单(在“创建和管理”下)。选择 Product Volume 表单。
  2. 表单管理器
  3. 编辑该表单。从所选业务规则中删除通过调用执行作业来计算产品收入规则。添加 Groovy Execute Calc Script(Groovy 执行计算脚本)规则并将其设置为 Run After Save(保存后运行)。保存表单并关闭“Form Manager(表单管理器)”窗口。
  4. 保存后运行

测试 Groovy 规则以执行计算脚本

在此部分中,您将通过编辑“产品体积分析”仪表盘中的数据来测试 Groovy 规则。

  1. 从主页中,单击仪表板。打开 Product Volume Analysis 仪表盘。
  2. 产品数量分析仪表盘
  3. 对于 Envoy Standard Notebook ,编辑 January 的产品卷。对于 Ultra Notebook 13 in ,编辑 March 的产品卷。保存表单(而非仪表盘)。
  4. 保存“Product Volume(产品体积)”表单。
  5. 单击确定以关闭信息消息。更改将反映在产品收入表单中。
  6. 更改将反映在“产品收入”表单中。
  7. 关闭仪表盘。导航到作业,然后选择 Groovy Execute Calc Script 作业。
  8. 作业控制台中显示的作业。
  9. 已完成作业的日志消息标识执行规则的用户和生成的计算脚本,以及计算的单元格计数。
  10. 作业的日志消息。

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 Oracle University 查看可用的培训资源。

有关产品文档,请访问 Oracle 帮助中心