任何Anaplan模型的基本元素之一是层次列表。在创建层次结构时,有两个基本选择:平衡或不平衡。在这篇文章中,我们将看看平衡和不平衡层次结构之间的差异,它们在Anaplan中表现不同的领域,以及在特定情况下选择使用哪个层次结构时需要考虑的一些问题。

定义

  • 不平衡(也称为不规则)层次结构是指叶子级别(最低细节级别)在整个层次结构中没有统一数量的祖先。一个常见的例子是GL帐目表。

  • 平衡的层次结构是指所有的叶级别在整个层次结构中具有相同数量的祖先,并且通常,给定级别上的所有成员都具有与之相关的类似概念。一个常见的例子是组织结构。

水平view.png

在上述示例中,科目层次结构中的最低层级(总账科目)同时存在于第4级和第5级,使其成为一个不平衡的层次结构,而在组织层次结构中,最低层级(成本中心)统一存在于第3级,因此是一个平衡的层次结构。

不同的设置

在Anaplan中,不平衡的层次结构通常被设置为单个列表。这个配置被称为父子层次结构。列表成员与其父成员的关系是通过列表中的parent属性配置的,其中父成员是同一列表的另一个成员。account setup.png

平衡层次结构是使用两个或多个单独的列表设置的,它们的关系是使用“常规列表”设置中的“父层次结构”属性定义的。此配置称为复合层次结构。列表成员与其父级的关系是通过列表中的父级属性配置的,父级是其父级列表中的成员。复合setup.png

行为上的差异

anplan只在列表的叶级保存数据。当网格呈现请求数据或运行导出操作时,计算父级。父-子列表只有一个叶级,而在复合列表层次结构中,每个单独的列表都有自己的叶级,尽管上层列表的叶级可能是计算值。由于这种区别,在Anaplan中这些层次结构的行为方式存在差异。

父级输入

数据输入(输入或导入)只能发生在列表的叶级。在父子层次结构中,只有一个叶级别,因此只能输入一个点数据。因为每个单独的列表在复合层次结构中都有一个叶级,所以可以使用模块中所需的输入列表在层次结构的任何级别输入数据。

父母inputs.png

Lookup() vs. Select()行为

安纳普兰酒店查询()选择()func这两个选项都用于从模型中的另一个成员返回特定成员的值,但方式不同。Lookup()将时间段或列表格式的行项目作为其映射参数,而Select()将时间段或列表的单个成员作为源数据的位置。另一个主要区别是Lookup()只能从叶级别获取存储的值,而Select()可以访问层次结构的任何级别。由于此差异,Select()将适用于任一类型的层次结构,但Lookup()仅适用于复合层次结构。

因为Select()是对列表成员的硬编码引用,所以不认为使用它是最佳实践。如果Select()用于虚拟top成员以外的任何列表成员,则列表不能设置为生产数据。指的是平面的第2.02-14节了解有关正确使用Select()函数的更多详细信息。


不平衡等级不平衡等级


平衡等级平衡等级

启用/禁用特定级别

在父子列表中,只有两个级别:summary(所有父级别)和detail(所有叶成员),因此不能有选择地启用/禁用特定父级别。然而,这可以通过使用过滤来实现。在复合层次结构中,成员存在于不同的级别(列表)中,它们可以单独显示或抑制。

水平selection.png

名单成员

在不平衡的层次结构中,只需要源系统中存在的实际成员。在一个平衡的层次结构中,每个级别的所有成员必须存在于同一个列表中,所以如果一些成员没有特定的级别,那么平衡成员(即虚拟成员)必须创建为缺少成员的列表中的占位符

虚拟级别.png

在本例中,“消除CC”用于部门中的所有BU,因此它没有真实的BU,但为了允许在模块中与其他CC一起输入此CC中的数据,需要创建一个虚拟BU,将其“推”到与其他CC相同的级别。

如果不需要与其他成本中心在同一个输入模块中,则可以在BU级别上存在Elimination CC,并通过使用一个模块中的Business Unit L2列表仍然有数据输入。

功能差异摘要

功能 不平衡等级 平衡等级
父级的数据输入 不可能的。 可以在层次结构中任何列表的叶成员处进行输入。
Select()函数 将从层次结构中的任何成员返回一个值。它将限制将列表设置为生产数据或清除Select()函数中引用的列表成员的能力。 将从层次结构中的任何成员返回一个值。它将限制将列表设置为生产数据的能力或者清除Select()函数中引用的列表成员。
查找()函数 将只能从层次结构中的叶成员返回值。这是可以解决的映射模块但需要额外的设置和维护。

将能够返回层次结构的所有级别的值,因为每个列表都有一个包含输入值或派生值的叶级别。

选择器和模块中的级别

在父-子列表中,只有两个级别:摘要(所有父级别)和细节(所有叶成员),因此不能选择性地启用/禁用特定的父级别。这可以通过过滤来实现。

由于成员存在于不同的级别(列表)中,因此可以单独显示或抑制它们。
名单成员 该列表将只包含实际业务结构中存在的实际成员。这使导航和报告更清晰、更简单。 如果实际业务结构在整个层次结构中没有完全平衡,则必须添加虚拟成员以提供适当的平衡。这会增加列表的大小,从而影响内存使用和性能。此外,根据必须添加的虚拟成员的数量,导航和报告可能会比较麻烦。

结论和注意事项

没有一个选择在所有情况下都是正确的。需要根据用例单独评估不同的模型和不同的列表,以决定使用哪种结构是正确的。一般情况下,帐户的图表应保持为不平衡的层次结构,任何其他层次结构都应该是平衡的,但需要考虑的一些因素是:

  • 在层次结构的父级是否有输入的要求?如果是,则需要复合层次结构。
  • 是否需要在层次结构中动态地从不同的父成员处获取行项目参考值?如果是这样,Lookup()是正确的选择,它需要一个复合层次结构。
  • 需要引用父级值的计算是否受到限制,或者是层次结构中虚拟顶级成员引用的唯一父级。因此,Select()函数是一个合理的选项,允许使用任何一种层次结构。在这两种层次结构中,对实际列表成员的引用都不是最佳做法。
  • 实际的层次结构数据是否极度不平衡?如果是,那么应该评估创建虚拟平衡成员对维护和性能的影响。此外,还要考虑在导航层次结构时对用户体验的影响。

为给定的用例选择正确的层次结构类型对于构建高效的模型和良好的用户体验非常重要。一般来说,帐户图应该作为不平衡的层次结构来保存,而其他类型的层次结构应该是平衡的,但是仔细评估用例和对设计的影响是很重要的。

本文中的内容尚未针对所有的Anaplan实现进行评估,可能不适合您的具体情况。
在应用本文中的任何想法或步骤之前,请咨询您的内部管理员。
版本历史
最近更新:
‎01-13-2021上午9:32
更新人:
关于作者
标签(1)