2.02-11 Avoid using TEXTLIST()
TEXTLIST() requires a lot of memory for calculations and should be avoided if possible, using two dimensional modules and Boolean flags with ANY is a good alternative. Other alternatives are using FIRSTNONBLANK as well as LASTNONBLANK. Questions on this topic? See 2.02-11 Avoid using TEXTLIST() in our Planual forum.
2.02-12 No Hardcoding to List members
Avoid direct references to list item. E.g. IF ITEM(list)=list.xx. Instead, attempt to use a SYS module with a line item having a boolean format as this makes the formula more dynamic (multiple members can use the same logic). Questions on this topic? See 2.02-12 No Hardcoding to List members in our Planual forum.
2.02-13 Only use POST for its specific purpose
Don't use POST for simple data offsets. OFFSET, LAG or MOVINGSUM are more efficient Questions on this topic? See 2.02-13 Only use POST for its specific purpose in our Planual forum.
2.02-14 Avoid using SELECT
Avoid hard coding using SELECT if possible. Use a constants module and use LOOKUP instead Exceptions: 2.02-14a Versions: It is OK to use SELECT for versions 2.02-14b For top level items on non-composite lists: In Non-Composite lists, it is not possible to use LOOKUP to return the value, so it is OK to reference the Top…
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-16 Use conditionals to stop unnecessary calculations
In multiple conditional statements, try and include a conditional to prevent further referencing in the formula if the condition is satisfied Questions on this topic? See 2.02-16 Use conditionals to stop unnecessary calculations in our Planual forum.
2.02-17 Put the most common condition first
For formula efficiency, put the conditional with the most common occurrence first in the formula Questions on this topic? See 2.02-17 Put the most common condition first in our Planual forum.
2.02-18 Break up formulas
The engine works more efficiently when calculations are broken up into separate line items. So, break up formula expressions where possible. This is especially true for calculations that are referenced many times and/or calculations that don't change that often Best Practice articles: Formula Structure for Performance…
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 Questions on this topic? See 2.02-19 Don't daisy chain data…
2.02-20 Don't use RANK formulas with large lists
RANK is a calculation intensive formula that cannot multi thread. Used in conjunction with large lists it can lead to poorly performing calculations. The same applies to RANKCUMULATE Exceptions to this are when the formula also applies to Time. Questions on this topic? See 2.02-20 Don't use RANK formulas with large lists…