-
1.07-03 Turn summaries off on Collect() line items
By default, you should turn summaries off on line items using the Collect() function. By having summaries turned on, the system is aggregating data that is not usually needed. Related to Rule: 2.01-10 Calculation Modules 2.03-01 Turn Summary options off by default
-
2.02-21 Don't use TIMESUM with Time
TIMESUM formulas should not be used in a line item that applies to Time, the formula will be duplicated for each time period. If the TIMESUM does use time periods then consider using MOVINGSUM instead. https://www.youtube.com/watch?v=PvimWuX5jVw
-
Model Optimization Checklist
As your Anaplan platform grows and continues to expand beyond your initial use case, it remains just as important as it did on day one to make sure your models are built to perform and according to best practice. Check out the model optimization checklist to begin evaluating your models today!
-
5.04-11 Use zip files for faster imports
Anaplan will accept a zip file format as an import source. For large files, this will greatly improve the import speed
-
2.01-20 Use Appropriate Dimensions for modules
When creating a module, consider the scope of the calculation and only include the dimensions that are needed. If the formula doesn't return the value required, or errors, don't keep adding dimensions until it does; it is better to review the calculation itself. Check other modules; you may already have a calculation…
-
2.01-19 Put Time and Versions list first in the dimension order
If you are using lists instead of native timescale or native versions, ensure these lists are placed as the first two lists in the dimension order. This mirrors the native time and version settings which will improve performance when mapping between native time/versions and standard lists Best Practice Article: Dimension…
-
2.01-18 Avoid copying large modules
Copying large modules, especially those with filters and many views, can take some time and block the model whilst doing so. For large modules, it is likely to be quicker to re-create the module Related to rule: 2.04-03: Keep the default view clean
-
1.02-05 Try and avoid a high number of native Versions
Versions have built-in functionality that is not available for normal lists. However, a large number of Versions (e.g. 10+), can have performance implications due to the block structure. Review the need for high number of Versions, and if the native functionality is not critical or needed, consider using a normal list to…
-
4.01-03 Create Output modules when using Custom Views
When staging line items are not needed to be viewed by the page builder, create an output module to be used for generating the Custom View Related to Rule: 2.01-04 Use the D.I.S.C.O. Methodology for Module Design
-
1.01-07 Time Ranges
Use Time Ranges to optimize the modules where the default model calendar is not appropriate. Consider the dimensionality for the data and set up the Time Range accordingly. Best Practices article: Time Range Application
-
1.01-05 Exclude timescale subtotals by default
Turn the "include" settings off by default and only include these if absolutely necessary. These additional settings (Quarter totals, Year to date, Year to go etc.) will be included in all modules with the model calendar as the time dimension. Thus they will perform calculations on these subtotals. Consider if you really…
-
1.06-03 Avoid single item subsets
If possible, try and avoid single item subsets, if there is a top level in the list, a single item subset will always have two members. Consider using a Boolean flag in a SYS module or a LOOKUP line item against the desired item (to avoid using SELECT)
-
1.05-11 Do not embed Numeric values or Dates within the Code of a list
Dates and values are "data" and should not be part of a code. Adding these elements to the code will in most cases, vastly increase the size of the list and consequently increase the mode size and reduce performance Best Practices article: Data Hubs Purpose and Peak Performance
-
1.05-07 Avoid Top Level for large flat lists
The calculation for a top level on a large list cannot be split so as the list grows, the calculation becomes increasingly inefficient. Consider if you really need the total. If you need to have the totals, look to add intermediate parent “totals” to make the calculations more efficient, of use SUM to aggregate for…
-
1.05-06 Only use Top Level for ultimate parent
Only use Top level for lists that will need sums so not Currency codes, or True/False (Indicators), or children in composite lists Best Practices article: Top Level Item and Parent Hierarchy
-
1.02-01 Use "Current" in Version settings
Utilising the Current (and Actual) check box within the Version Settings allows the use of CURRENTVERSION() and ACTUALVERSION() in calculations, in SELECT statements and ISCURRENTVERSION and ISACTUALVERSION() for Boolean checks. Current version also acts like a top level for Versions; if you have a source module with…
-
1.01-04 Consider All Periods
Consider the use of All Periods. This is effectively the Top Level for time and whilst increasing the model cell count very slightly it does allow for flexibility in modelling. This is especially useful if you need to reference the same calculation many times
-
2.04-03 Keep the Default View clean
Keep the default view as is, no hiding line items, filtering, or conditional formatting
-
2.02-19 Don't daisy chain data
Always refer back to the ultimate source if possible, to avoid creating more dependencies than necessary. This allows more parallel calculations to be run increasing efficiency and speeding up calculations Best Practices article: Best Practices for Module Design
-
2.02-17 Put the most common condition first
For formula efficiency, put the conditional with the most common occurrence first in the formula
-
2.02-15 FINDITEM on blanks
Doing a FINDITEM() on blank values is inefficient as the function has to traverse the entire list before it returns a blank. If the majority of the values are not blank, then check for BLANK first: * IF ISNOTBLANK(Line Item) THEN FINDITEM(List, line item) ELSE BLANK If the majority are NOT blank: * If ISNOTBLANK(Line Item)…
-
2.02-05 Create "joins" in smallest hierarchy
If a text string join is needed, create the joins in the smaller lists first to minimize the size of the text strings Related to Rule: 2.02-04 Text Strings Best Practice article: Formula Optimisation in Anaplan
-
2.02-04 Text Strings
Treat text strings with caution. Try and avoid multiple joins and split common joins to separate line items. Make use of IF ISBLANK() when joining text, if the strings are empty set to BLANK. Related to Rule: 2.02-05 Create "joins" in smallest hierarchy 2.03-02 Try not to use TEXT as a format, or limit it as much as…
-
2.02-03 No Repeated expressions
If the expression is repeated in the formula (or other modules), put it on a separate line item. “Calculate once, reference many times”
-
2.01-14 Avoid using Select Levels and filters together
Don't use Select levels combined with filters on the same hierarchy. It is a double filter and inefficient because both will be kicked off. Use one or the other. Setting a Boolean line item in a System module with 'none' as the summary option will often achieve the same result
-
2.01-13 Separate Transaction data from Attribute/Property data
Keep the non-time-based data in a separate module from static attributes Best Practice article: Data Hubs Purpose and Peak Performance
-
2.01-11 Keep the Dimension Order consistent
Ensure the dimension order is consistent among modules. Calculations are faster if the common dimensions are in the same order as the Applies To. The size of the list is not as critical as the order Best Practices article: Dimension Order
-
1.07-02 Line Item subsets for Version Formula
Use Line Item subsets to create different numeric formulae for each version to avoid multiple Ifs Best Practice article: Line Item Subsets Demystified Decreasing the Length of Your Formulas Variance Analysis With Native Versions Made Easy
-
1.05-12 Use formulas to derive properties of the list
Based off the code of the list it should be possible to derive the attributes; Calculating the values is more efficient than storing text fields Best Practices article: Data Hubs Purpose and Peak Performance
-
1.05-10 Never delete list and reload the list as a daily occurrence
Clearing and reloading a list increases the structural changes within a model and will increase the likelihood of a of model save, thus increasing the import time. It also removes pre-allocated memory block designed to increase efficiency. Use a unique key to update to values rather than delete and re-load. Also consider…