I wanted to share something that could easily catch out the unwary and have unexpected consequences. Let's say you have two line-items (say listFormattedLineItem1 & listFormattedLineItem2) formatted on the same list (formatList) and you compare them in a formula as part of an IF THEN ELSE - e.g. IF listFormattedLineItem1 = listFormattedLineItem2
ELSE BLANK and all of the cells of both line-items are populated, then everything is fine. Let's just suppose however that you have a data management process and it works like this Delete all of the items of formatList using a Delete From List using Selection action where the selection is TRUE Import new items for formatList Import values into listFormattedLineItem1 Import values into listFormattedLineItem2 At the end of this process everything should be fine. However each step in the process is a transaction and the platform recalculates the model after each step. After step 1 there are no items in formatList and so all the values are cleared from all line-items that are formatted on that list. All the cells become BLANK. As the title indicates, in Anaplan BLANK = BLANK evaluates to TRUE, and so in the formula now all the cells are calculating the expensive_value. The disadvantages of this could be that the values take to much time to calculate, or that the resulting values take up too much space if they are TEXT. In the first case the process would take too long and in the second it might fail with OutOfMemory. The solution is simple. Just put a BLANK check in the formula. IF ISNOTBLANK(listFormattedLineItem1) AND listFormattedLineItem1 = listFormattedLineItem2
ELSE BLANK In fact I would recommend the BLANK check in any case to make the behaviour of the formula clear in all cases.
... View more
We would need to know some more about what all of you want NOW() for. The only reason mentioned here is to display the current time to a user in the user interface. If that is all that is needed it would be better to have a specific UI widget for that. The dashboard only communicates with the data in the model when a user interacts with it, so if it were a cell in a grid showing the result of a NOW function then it would only update when the user interacted. I suspect that there are other reasons for having a NOW function, and knowing what they are will help in the design. One question that immediately springs to mind is at what granularity should a NOW function change the results it returns. Should it be seconds, minutes, hours? Another is timezone. All Anaplan models run on machines where the clock is set to UTC (Standard time in London). However some models are for users in a different timezone (e.g. Pacific) and some are for users spread across multiple timezones. What would people need? Any variation in this respect would have to be specified in parameters to the function. This is not like Excel where it is on a particular user's machine where the timezone is picked up from the user's operating system. The granularity is also significant when considering recalculation. When your dashboard reads from the Anaplan model, the server applies any cell updates and then recalculates those cells of the model that have changed as a result. For a model in which there is little data-entry this recalculation will be insignificant and performance will be good. If a NOW function was ticking over every second then the model would need to be updated on every interaction. The performance impact of this would need to be considered. We are currently working on the TODAY function which has a number of similar questions. However the granularity of change of TODAY is much less and so the performance impact will be minimal. Looking forward to your feedback.
... View more
So there is one main problem with a calculation function that produces different values every time that it is used. In order to calculate efficiently Anaplan will choose to re-calculate particular cells or not according to strategies that are not in control of the customer. This means that your values will change at times that you have no control over, including every time the model is loaded. What would seem to make a lot more sense would be an action, where the admin would choose a data-entry line-item and when (and only when) the action is run it would fill the line-item with random numbers (according to other parameters entered when the action is created and edited). What do people think? Would this serve the purpose as well as a function?
... View more