优化你的模型

优化你的模型

你是一个喜欢调整你的模型以便你可以节省微秒加载时间的模型建造专家吗?也许你被分配的任务是采用一个表现不佳的模型,并让它恢复到原来的速度。或者你正在寻找一种方法,将你的模型构建技能提升到一个新的水平。

我们为您提供了一些令人兴奋的消息!我们已经查看了您可以优化模型性能并创建核对表的主要方法。它构建了我们在平面中提​​供的内容,并进一步迈出一步。清单可帮助您确定可能影响性能的问题,解释为什么,并包含您可以采取的操作以修复它们。

使用检查表:

  • •建立新型号时,以确保您正在遵循最佳实践。作为每个Sprint审查的一部分,通过清单添加。
  • •在对模型进行年度审查时,随着某些CUE可能需要的。使用清单来帮助完成审查。
  • •当您的模型遇到性能问题时。检查表中的一些项目可以很容易地纠正,其他项目可能需要一些时间。
  • •在教练或指导新模型建设者时。鼓励他们使用清单从一开始就灌输好模型建筑习惯。

如何使用清单:

清单包括问题。单击>以显示更多信息。每个问题主题包括有关何时以及为什么这可能是问题的更多详细信息,如何纠正它,以及链接到提供更多信息的文章和短节课。

1 .列表

列表是否使用Time作为密钥的一部分?

什么时候是一个问题?

当为要导入到列表的项创建唯一值时,这在事务性列表中最常见。


为什么这是个问题?

从列表创建的角度思考这一点,您真的想为每个日期创建一个新的列表项,或者您想创建一个列表项一次吗?如果您将时间包含作为密钥的一部分,则您的列表将不必要地大。

如何正确的:

日期是数据,不应该是代码的一部分。删除列表之外的日期并使用时间引用。

更多信息:

平面1.05-11

签出事务部分数据集线器最佳实践

该列表是否使用属性的组合作为代码?

什么时候是一个问题?

总是这样。

为什么这是个问题?

这种做法对系统造成负担,使您没有代码,这使得在将数据导入到列表时更难映射数据。

如何正确的:

例外:如果源中没有代码,则必须使用属性的组合。这很罕见,应该永远是最后的手段。与IT部门一起使用源系统创建唯一代码。

更多信息:

Planual 1.05 -04

名单上有密码吗?

什么时候是一个问题?

所有的列表都应该有一个代码。

为什么这是个问题?

代码使加载和使用列表更加有效,所以最好的做法是包含代码,特别是对于有编号的列表。

如何正确的:

检查源代码系统的可用性以创建源代码,因为这通常是可能的。如果没有,可以使用anplan创建代码。

更多信息:

为属性创建代码

字符串连接

列表是否使用属性?

这是个问题当属性不符合以下使用情况时:

  • 编号列表的显示名称
  • 使用编号列表创建操作
  • 出口标签
  • 促进向不同仪表板的导航(经典仪表板)
  • 创建驱动程序和依赖列表

为什么这是个问题?

列表属性与行项相同,但具有许多限制。列表属性在加载时添加到列表的总体大小。使用行项在模块中编写比写入的正常是使用列表属性来编写公式更容易编写公式。控制属性摘要没有一种简单的方法。最好保持简单。当可能时,将这些作为线项而不是属性。这将计算保持在模块的一个位置。

如何正确的:

包含属性的系统模块允许您将数据存储在其他模型构建器可以使用的中心位置。可以说明列表中可以说,但将它们保留在模块中提供更简单的公式写入和控制它们如何总结的能力。要创建系统模块,请先创建包含属性的新列表。然后,创建一个模块,其中包含应应用该属性的列表。使用列表格式格式化行项并选择属性列表。

更多信息:

Planual 1.05 -03

较大列表上是否存在子集?

什么时候是一个问题?

当大型列表包括子集时,这是一个问题。

为什么这是个问题?

包含子集的大型列表可能会导致性能问题。它们添加了聚合,并增加了模型的总体规模。

如何正确的:

创建一个单独的列表而不是一个子集。

更多信息:

平面1.06-02

子集列表是否遵循正确的命名约定?

什么时候是一个问题?

命名约定应用于所有子集列表。

为什么这是个问题?

不使用命名约定的子集列表可能导致混淆。如果没有正确的命名约定,就很难确定子集属于哪个列表。在创建模块期间使用子集时,这一点变得更加重要。

如何正确的:

在为子集开发命名约定时,请使用以下准则:

  • 表示列表是较大列表的子集的前缀。
  • 定义子集的列表的名称。
  • 结肠后跟子集的简要描述。

更多信息:

平面1.06-01.

Anapedia:命名约定

在不需要的情况下,该列表是否包含顶级?

什么时候是一个问题?

当您在列表中有不必要的顶级时,不需要汇总。示例包括事务列表,货币列表或您使用的任何其他列表,用于指示您不需要查看顶级或摘要。

为什么这是个问题?

当列表中有一个不必要的顶级时,引擎会运行计算和重新计算,这可能会导致性能下降。当摘要设置保持打开时,就会发生这种情况。值的任何更改都将导致在顶层对摘要进行重新计算。

如何正确的:

从列表中删除所有父级。

更多信息:

Planual 1.05 -05

Planual 1.05 -06

Planual 1.05 -07

理解顶级

顶级项目和父层次结构

第2步 - 模块

模块中使用的尺寸是什么?这些都是必要的吗?

什么时候是一个问题?

当您有不必要的维度时就会出现这个问题——这意味着模块中的逻辑或数据不适用于该维度。

为什么这是个问题?

模块中的不必要的尺寸可能导致从必须执行不必要的计算和增加模型大小的公式的性能不佳。它还可以通过使它们使用不必要的上下文选择器来阻碍最终用户体验,这可能导致混淆或导致额外难以达到所需视图。

如何正确的:

删除不必要的尺寸。这可能导致您的公式变得无效,从而导致错误。如果是这种情况,请将格式设置为无数据,删除维度,更新公式,然后重置格式。如果使用当前行项作为映射或变量,则可能必须修改下游行项。

更多信息:

模型大小和维度

关于稀疏的真相:第一部分

模块中使用了什么时间维度?可以使用“时间范围”吗?

什么时候是一个问题?

这是模型中模块的时间要求与模型日历不同的问题。这可能意味着年份的要求在模型日历之外,或者在模型日历中不需要所有的年份。包含不必要的时间摘要设置也是一个问题。

为什么这是个问题?

模型很快就变得非常庞大。

如何正确的:

确定需求并建立一个适当的时间范围来解释这一点。记住:调整当前财政年度时,时间范围不会动态更新。一定要在年终的时候更新你的时间范围。

更多信息:

时间范围介绍

尺寸是否整齐?

什么时候是一个问题?

这是所有模型中的问题。在模型构建期间,列表是按添加方式组织的。

为什么这是个问题?

通过研究,我们发现,不按顺序排列的尺寸会使发动机工作更加困难。

如何正确的:

在模块窗格(模型设置>模块)中查找“应用到”列中不按顺序的列表。单击要重新排序的“应用到”行,然后单击省略号。在Select Lists对话框中,单击OK。在“确认”对话框中,单击“确定”。

更多信息:

维度顺序

如果有任何已保存的视图,它们是否使用正确的过滤?

什么时候是一个问题?

保存视图使用每个选项卡的多个过滤器时,这是一个问题。

为什么这是个问题?

选项卡上的多个过滤器可能导致性能问题。数据被读取第一个过滤器,然后读取那些结果的结果,然后读取下一个过滤器等。

如何正确的:

过滤器应该使用布尔值设置,并且每个维度只有一个行项过滤。如果需要,可以将过滤行项合并为一行项。请确保使用Notes部分来标识在筛选器中使用了该行项。

更多信息:

过滤最佳实践

如果有保存的视图,是必要的视图中的所有行项目?

什么时候是一个问题?

当视图包括不需要的线项时,这是一个问题。

为什么这是个问题?

额外的行项会影响性能,因为视图必须呈现额外的行项。例如,如果需要3个行项,但是定义了25个行项,那么性能将受到影响。

如何正确的:

删除不需要的线项。在所需列上使用Show,而不是隐藏在非所需列上,因此未添加新的行项目到已保存的视图。

默认视图是否清洁?

什么时候是一个问题?

这是默认视图具有应用,隐藏列表或行项的过滤器,或包括条件格式或排序时的问题。

为什么这是个问题?

模块的默认视图应始终为任何模型构建器修改的空白画布。期望是没有隐藏或修改的。

如何正确的:

可以在模块工具栏中看到排序,过滤和条件格式化,可以轻松识别和更改。要查看隐藏的列表或行项,请使用所有行或显示所有列以修复此功能。请记住,您可能在页面选择器中有隐藏的列表或行项目。如有必要,请使用枢轴查看以解决此问题。

更多信息:

平面2.04-03

步骤3 - 线项

哪个行项目不需要摘要?

什么时候是一个问题?

创建新行项目时,默认情况下添加摘要方法。许多行项目不需要摘要计算。

为什么这是个问题?

运行不必要的计算可以增加打开模型所需的时间。

如何正确的:

创建新行项目时,使其成为关闭总结的习惯。如果需要摘要,则重新开始摘要。

更多信息:

平面2.03-01.

是否过度使用文本格式的行项?

什么时候是一个问题?

ANAPLAN针对数字和布尔值进行了优化。

为什么这是个问题?

文本使用比大多数其他模型组件更多的内存,并且不执行和其他数据类型。文本限制功能和影响模型大小。

如何正确的:

当可能时,将文本数据转换为另一个数据类型。查看Anapedia文章和此处引入的课程获取更多信息。

更多信息:

平面2.03-02

数据类型转换

培训:转换数据格式

模块中有超过50个线项吗?

什么时候是一个问题?

当任何模块包含超过50个线项时。

为什么这是个问题?

它违反了最佳实践,即在模块中不包括超过50个线项。

如何正确的:

将模块分解为单独的模块,特别是如果任何行项目使用辅助视图。

有过度的附属视图吗?

什么时候是一个问题?

应避免为计算中使用的数据避免附属视图。

以下是可以使用辅助视图的情况(请注意,它们都与数据显示的方式有关):

  • 显示最终用户分析,过滤或排序的属性。
  • 显示维度的可选层次结构。
  • 显示其他计算不需要的数值,如比率。
  • 筛选报告或为导出提供属性。

为什么这是个问题?

在模型中很难定位和审计附属视图。如果将带有附属视图的行项发布到经典仪表板,则无法编辑数据。

如何正确的:

考虑添加包含子公司尺寸的新模块。查看子公司视图课程。

更多信息:

附属视角

是否有作为标题的线条项目,其中格式未设置为没有数据?

什么时候是一个问题?

不遵守此约定的线项。

为什么这是个问题?

使用行项作为没有设置为无数据的标题导致不必要的计算。

如何正确的:

更改格式以避免不必要的计算。有关如何使用数据格式的更多信息,请参阅清除数据的文章,了解如何使用数据格式如何在ANAPLAN中清除数据。

更多信息:

平面2.03-03

如何清除ANAPLAN中的数据

步骤4 -公式

是否存在可以放在系统模块而不是计算模块中的行项?

什么时候是一个问题?

寻找导致数据不变的函数(例如,行项的父元素)。将这些函数放在一个系统模块中意味着计算只运行一次,并且可以被多个模块中的多个行项引用。查找:PARENT(PARENT(PARENT(line item))),文本字段连接,以及时间函数,如START(), CURRENTPERIODSTART(), CURRENTPERIODEND()等。

为什么这是个问题?

重复的计算可以减缓性能。当这些类型的函数作为较长公式的一部分包含时,如果它们包含在多行项中和多个列表成员中,请考虑它们可以运行的次数。对于计算运行一次性的性能更好,并使用多次引用。

如何正确的:

找到可以移动到系统模块的函数。创建系统模块,将函数添加为行项,然后更改原始计算以引用系统模块中的行项。

更多信息:

Planual 2.02 -18

平面2.02-03

平面2.01-04

创建系统模块

构建时间系统模块

减少计算以获得更好的性能

有没有组合文本字符串的公式?

什么时候是一个问题?

在Anaplan中不可避免地使用文本字符串,因此必须确保以最有效的方式进行连接,以最大限度地减少对性能的影响。一定要阅读公式优化的文章。你可以在下面的更多信息部分找到链接。

为什么这是个问题?

组合文本字符串需要很多内存并影响性能。

如何正确的:

创建只包含所需维度的系统模块。例如,如果您希望创建一个由项目代码和公司代码组成的代码,那么您将创建三个系统模块。一个保存项目数据,另一个保存公司数据,第三个保存两者的组合。

更多信息:

公式优化

字符串连接

是否有任何菊花链的公式?

什么时候是一个问题?
雏菊链公式一直是个问题。菊花链发生在模块a中有一个行项在模块B中被引用,然后在模块C中被引用,以此类推。

黛西chain.png
这创建了必须计算长依赖链的情况。相反,每个模块应直接引用数据。模块A中的线项直接在模块B中引用,也在模块C中直接引用。

推荐app.png.

为什么这是个问题?

菊花链式要求发动机更加努力。每当计算中使用的一个数据点发生变化时,必须重新计算整个序列。

如何正确的:

分解这些公式。将需要在系统模块中多次引用的零件,创建单个真理源。

更多信息:

Planual 2.02 -19

本文解释了菊花链

是否有长期公式,如复杂,如果否则陈述?

什么时候是一个问题?

如果您无法解释一个句子中公式的目的,则公式太长。

为什么这是个问题?

长式公式,如复杂,如果其他陈述,很难理解,审计和维护。复杂的公式使用有价值的处理时间,并要求发动机更加努力地工作。

如何正确的:

如果是否则陈述并首先放置最常见的条件,请简化复杂。将公式分解为多个线项。如果您的公式包括10多个,如果然后计算,请考虑使用查找。在某些情况下,您还可以考虑使用行项子集。

更多信息:

Planual 2.02 -17

Planual 2.02 -18

性能公式结构

思考你的公式

线项子集发霉了

用线项子集操纵数据

减少公式的长度

是否过度使用了FINDITEM函数?

什么时候是一个问题?

FINDITEM函数需要引擎提供很多东西,因为它试图在列表中找到一个项目,并且它对与该行项目相关的每个单元格都这样做。当列表包含空值时尤其如此。过度使用取决于您的模型和运行它的列表。

为什么这是个问题?

使用FindItem过度使发动机更加努力地工作。

如何正确的:

在运行FindItem之前检查空值的数据。因此,何处prod_text是列表的名称,要检查null值的公式是Isnonblank(prod_text)那么findItem(prod_text)elseball。加载数据时通常使用此功能。考虑将数据加载到数据集线器中的辐条模型,作为列表格式化的行项而不是文本。

更多信息:

Planual 2.02

有SUM和LOOKUP组合吗?

什么时候是一个问题?

将SUM和LOOKUP放在同一行项中总是一个问题,并可能导致性能问题。

为什么这是个问题?

在相同的公式中使用SUM和查找通常会导致大的公式计算,特别是如果时间是尺寸或源和目标结构非常不同。

如何正确的:

将SUM和LOOKUP拆分为不同的模块和行项。

更多信息:

平面2.02-08

查找功能

如何使用和函数

复合功能:总和,查找,选择

是否使用了TEXTLIST函数?

什么时候是一个问题?

总是一个问题。

为什么这是个问题?

使用TextList需要很多内存。

如何正确的:

使用二维模块和布尔标志,具有任何替代品。点击这里查看任何代替文本列表文档。使用firstnonblank和lastnonblank与任何和全部。

更多信息:

Planual 2.02 -11

Anapedia:X [任何:Y]

有没有公式使用SELECT函数,特别是时间?

什么时候是一个问题?

使用SELECT被视为硬编码而非建议。

可以使用SELECT for Version和常规时间段。

为什么这是个问题?

使用SELECT是硬编码的,不推荐使用。当对特定列表项或时间使用SELECT时,将限制更新这些列表项的能力。随着时间的推移,这是一个特别的问题,因为每年都需要做出改变。您需要找到引用SELECT函数的每个行项并进行更新。与我们推荐的解决方案相比,这些更改只能由工作空间管理员(WSA)执行,后者允许最终用户进行更改。

如何正确的:

创建一个没有维度的模块,以保持时间的假设,以及其他“选择”值或使用查找而不是选择。例如,在此模块中,创建一个称为当期年份的行项目,将其格式化为时间段并选择年份。然后,您可以使用查找公式来引用此行项目。当前年度更改时,更新该行项目中的值,它将自动更新引用它的所有公式。

更多信息:

Planual 2.02 -14

使用选择

Planual 2.02 -12

避免硬编码

任何线项都使用条件格式与摘要打开吗?

什么时候是一个问题?

这是一个问题,因为条件格式在细节级别完成,而不是父级别。

为什么这是个问题?

摘要是不必要的。

如何正确的:

关闭摘要设置。

更多信息:

平面2.03-01.

第5步 - 动作

所有必要的行动都是必要的吗?

什么时候是一个问题?

当有未被删除的未使用的操作时。

为什么这是个问题?

很难审核正在使用哪种行动。

如何正确的:

删除任何未使用的操作。

更多信息:

平面5.01-04

模型清理的最佳实践

运行时是否会导致错误导致错误?

什么时候是一个问题?

当您收到黄色感叹号时,这是一个错误。您可能还会看到警告。错误和警告都需要纠正。操作或流程应该显示所有绿色的复选标记。

为什么这是个问题?

导入将运行,但错误和警告将导致数据丢失。

如何正确的:

始终仔细阅读您的错误和警告并纠正它们。如果忽略错误或警告,则会运行丢失和/或数据的风险。请记住,在许多情况下,模型是单一的真理来源,与数据的错误将导致用户不信任模型。

更多信息:

平面5.04-04

平面5.04-07

平面5.04-09.

导入错误

检查数据源。他们是其中一些列出还是模块?

什么时候是一个问题?

所有数据源都应该是文件或模块视图,而不是列表或模块。

为什么这是个问题?

使用列表或模块作为数据源时,没有可用的过滤机制。

如何正确的:

在将数据从一个型号导入另一个型号到另一个型号的数据时,建议使用已保存的视图是建议的最佳实践,尤其是用于频繁地重复或更新的数据加载,作为操作或过程的一部分。请参阅课程过滤最佳实践和保存的视图以获取更多信息。您可能想要重命名已保存的视图源以反映已保存的视图所代表的内容。

更多信息:

平面5.04-08

过滤最佳实践

保存的导视视图

数据集线器:目的和峰值性能

检查数据源。每个数据源是否具有与之相关的动作?

什么时候是一个问题?

没有相关操作的数据来源是不必要的。

为什么这是个问题?

在没有动作的情况下拥有数据来源可能会令人困惑。最好保持整洁。

如何正确的:

删除没有关联操作的数据源。

更多信息:

平面5.03-01.

Anapedia:命名约定

第6步 - 时间

模型的主要时间尺度大于它需要的模型吗?

什么时候是一个问题?

模型日历中包含的每一年都会增加模型的大小。当用于规划目的时,很可能只需要某些数据集,留下许多空单元格。

为什么这是个问题?

不必增加时间范围可用的模型日历年。

如何正确的:

使用时间范围比当前模型日历更早或更高的数据。

更多信息:

Anapedia:时间范围

时间范围介绍