Over Feeding in TM1 – What is it and How to Avoid it
Do you have a large TM1 model that is consuming excess memory? Is performance suffering because of the size of the model? If so, you might have a situation where some feeders are not written as efficiently as they could be, creating a situation where we have “overfeeding”. Correcting over feeding can lead to significant improvement in memory consumption and performance.
What are Feeders?
Feeding is the process in TM1 where cells that are going to be calculated by Rule are made active. What does that mean? If we have a rule that says, for example, [‘Average Selling Price’] = [‘Revenue’] \ [‘Units’]; and we have Skipcheck enabled, then we need to enable the Average Selling Price element so that it can calculate. We do this by having a “feeder” feed a single byte of data through to it prior to the calculation being performed, which “enables”, or switches on, that calculation. The feeder we would use for this could be [‘Units’] => [‘Average Selling Price’]; in other words where we have units sold, then enable the calculation at Average Selling Price. Feeders are part of the TM1 sparse calculation engine – what essentially gives TM1 the extraordinary speed that it is known for.
What is Over Feeding?
Overfeeding occurs when our feeders are enabling too many cells in a cube. So, using the example from above where the feeder is “Units => Average Selling Price”, lets assume that we have a version dimension as well with Actual, Budget, Forecast and Prior Forecast. We know that Actual is the only versions where we want to calculate Average Selling Price (as for Budget and Forecast we enter it and then calculate Revenue as a function of Units and Average Selling Price, and Prior Forecast is a static version of Forecast from when we last created a snapshot). In this case we would then rework the Rules to be [‘Actual’,’Average Selling Price’] = [‘Revenue’] \ [‘Units’]; and thus limit the calculation to only work for the Actual version.
We could then leave the Feeder exactly as it was and it will work. However, it will overfeed all the other versions as well as Actual.
Feeder Corrections to Avoid Overfeeding
Using our modified rule from above of [‘Actual’,’Average Selling Price’] = [‘Revenue’] \ [‘Units’]; we can limit our feeders to only what we actually need fed. We would edit the feeder to [‘Actual’,’Units’]=>[‘Average Selling Price’]; This inclusion of the version on the left means that this feeder is now limited to that version only and we have avoided over feeding.