使用公式的注意事项

数据类型转换

某些函数要求数据值为某种特定的数据类型,才能正确计算。例如,执行数学计算的函数要求输入参数为整数或浮点值,而字符串处理函数要求将字符串值提供为输入。在某些情况下,数据值必须从一种数据类型转换为另一种数据类型,才能成功派生。Oracle Data Relationship Management 提供了一组函数,用于在公式内处理数据类型转换。

属性级别限制

通常,为管理粒度级别较低的数据而创建的属性定义可以引用管理粒度级别较高的数据的其他属性。

  • 本地节点 - 可以引用其他本地节点、全局节点、层次或版本属性

  • 全局节点 - 可以引用其他全局节点或版本属性

  • 层次 - 可以引用其他层次或版本属性(仅查找)

  • 版本 - 可以引用其他版本属性(仅查找)

引用其他节点的属性

派生属性或验证通常计算或检索其他节点(而非正在为其计算公式的当前节点)的属性值。Data Relationship Management 提供了多个函数,可让您访问相同版本中节点的属性值。

  • NodePropValue

  • ParentPropValue

  • HierNodePropValue

  • AncestorProp

  • DualAncestorProp

  • AscNodeProp

  • ReplacePropValue

  • ListPropValues

  • ListNodePropValues

从全局节点属性引用本地节点属性

全局节点属性不需要有层次上下文就可返回值,而本地节点属性则需要指定层次。针对全局节点计算的派生属性或验证无法使用标准 PropValue 或 NodePropValue 函数引用本地节点属性值。全局节点属性可以使用 HierNodePropValue 函数引用本地节点属性值,但必须指定特定的层次以检索该层次中特定本地节点的属性值。

嵌套函数

将函数组合到一个公式中称为嵌套函数。公式中一个函数的输出用作另一个函数的输入参数。当计算嵌套函数时,Data Relationship Management 首先执行最内层的函数,然后向外执行计算。函数可以在相同公式中显式嵌套或使用一个引用属性(该属性使用不同的公式)的公式来隐式嵌套。

将属性用作其他属性的变量

Data Relationship Management 允许您使用嵌套函数、对其他属性或节点的引用以及文字值的组合,这可能导致冗长或复杂的公式。您可以使用单独的属性定义来模块化公式逻辑,并简化获得相同结果所需的公式语法。此方法能够显著提高维护这些公式的便捷性。

另外,公式可能会在相同的属性定义内或指定节点的多个属性定义之间多次计算相同的数据或执行相同的计算。当此逻辑嵌套在更大的公式中或在属性定义中实施时,这些检查和计算会多次执行,从而可能会影响要求计算属性的运算的性能。您可以通过隔离单独的属性定义内重复的公式逻辑,最大程度地减少多余的处理。

使用递归遍历层次关系

层次较低级别的节点的业务规则可能要求计算它们上面的祖先节点的属性值。允许较低级别节点引用这些属性值的一种方法是对管理必须引用的值的属性定义启用继承。但是,在许多情况下,对属性定义使用继承并不合适。

您可以配合使用特定的层次公式函数和当前属性定义的自引用,向上递归层次的一个分支以检索或计算祖先节点的属性值。

ParentPropValue - 使用此函数可在当前层次中向上递归一个祖先节点分支。例如:If(Equals(Integer,PropValue(Core.Level),1),Label Only,ParentPropValue(Essbase.DataStorage))

HierNodePropValue - 使用此函数可在其他层次中向上递归一个祖先节点分支。例如:If(Equals(Boolean,PropValue(Custom.PlanPoint),True),Abbrev(),HierNodePropValue(Geography,HierNodePropValue(Geography,Abbrev(),Core.Parent),Custom.PlanMember))