Author: Evan Groetch is a Certified Master Anaplanner and Business Intelligence Manager at Fresenius Medical Care.
Seeing that your list import has failed due to the index hitting its maximum value can be a frustrating experience. Cursory research on Anapedia will show you there is a “Reset” button at the bottom of the Configure tab of each list. “Great!” However, you are soon dismayed to see that the button is grayed out and won’t be clickable until all the list members have been deleted.
“How can I delete the members of this list? Doing so will wipe out all the associated planning data!”
This article will outline the process used by the Fresenius Medical Care Center of Excellence (CoE) team to navigate this problem without permanently impacting planning data.
Why does list index need to be reset?
The maximum value of a list index is 999,999,999. In most cases, the number of list members is nowhere near this amount. The reason the index is so much higher than the number of list members is that the index only increases when list members are added. It is not reduced when list members are deleted. For this reason, lists that are routinely cleared and repopulated are liable to require an index reset at some point.
How do I perform the list index reset and preserve any associated planning data?
Note: the following instructions assume ALM is established (Development/Standard model with sync relationship to Production/Deployed model).
Before doing anything else, block out a timeframe during which you will perform the process. Send any necessary communications to end-users to notify them of some brief model downtime. This step is to avoid any conflicts with users planning in the model while completing this sensitive process.
In the Development model:
- ‘Copy & Archive’ the model to create a backup before making any changes.
- Create a dummy list and populate it with all the list members of the original list requiring the index reset.
- Create an import action to populate Name and Code (plus any list subsets and properties) in the dummy list with values from the original list. Ensure you rename this import action so you can recognize and use it later in this process.
- Ensure the dummy list is set as a Production list (this setting can be found on the ‘Configure’ tab.
- Identify any module(s) that are both dimensioned by the original list and contain input line items. Any module containing only formula-based line items can be omitted from this step.
- Create the copy module(s) and modify the ‘Applies To’ so that all dimensions match the original modules, except for the original list, which should be replaced with the dummy list.
- Populate the copy module(s) via import action from the original module(s). The only difference between the source and target should be the dummy list vs. original list, and this mapping can be done automatically based on code within the import mapping settings.
- Ensure you rename this import action so you can recognize and use it later in this process.
- Create a new SYS module with the original list as a dimension.
- Include in this module a Boolean named “Delete?” and set the formula to TRUE. You can use this in a future step to create an action that deletes all the list members.
- Under Actions, click the ‘New Action’ dropdown and select ‘Delete from list using Selection’. Title this action appropriately and set it to Delete the original list members using the Boolean line item you just created in the previous step.
- Do not yet run this new Delete action.
- Create a new SYS module with the dummy list as a dimension.
- Include in this module a Boolean named “Delete?” and set the formula to TRUE. You can use this in a future step to create an action that deletes all the list members.
- Under Actions, click the ‘New Action’ dropdown and select ‘Delete from list using Selection’. Title this action appropriately and set it to Delete the dummy list members using the Boolean line item you just created in the previous step.
- Do not yet run this new Delete action.
- Now that you have your data preserved in copy module(s), perform data validation. Ensure your copy module(s) tie exactly to the original module(s).
- Now we’re ready to reset the index.
Note: if the list that requires the index reset is not set up as a ‘Production’ list, you need to sync the above changes to the Production module before completing the following steps in the Development model. Otherwise, you run the risk of deleting the data in the Production module without having the structures in place to restore it afterwards. If this is the case, skip to step 8.- Run the ‘Delete’ action you created in step 4b
- Open the original list and go to the ‘Configure’ tab. Click the ‘Reset’ button (it should no longer be grayed out).
- Confirm the list index has been reset to 0.
- Now, we need to restore our original list and module(s).
- Create import action from the dummy list to the original list. Be sure to include all list properties and subsets in the import, as these will have been cleared when the list members were deleted.
- Create import action(s) to load data from the copy module(s) created in step 3a back to the original modules.
- Perform data validation to ensure data matches exactly between the copy and original modules.
- Create a revision tag.
In the Prod model:
- Copy and archive the model to keep a backup before making any changes.
- Compare & Sync the revision tag from the Development model you created in Step 9.
- You should have everything you need now to perform the list index reset and restore planning data.
- Run the import to populate the dummy list
- Run the import(s) to populate the copy module(s)
- Validate data between original and copy modules
- Run the delete action to delete the original list members
- Perform the list index reset in the original list
- Run the import to re-populate the original list (using the dummy list as the source)
- Run the import to re-populate the original module(s) (using the copy module(s) as the source)
- Run the delete action to delete the dummy list members
How to build index reset into routine model administration
The model now has all the required structures in place to handle index resets in the future. By running the delete action to clear the dummy list at the end of the process, we can ensure no additional workspace is wasted on the copy module(s). Now, the next time a reset is required, we can run through the various actions outlined in Step 12 above for a streamlined process. This process should always be bookended with model ‘Copy and archive’ as well as communications to model owners and relevant end users. This process can be completed at regular intervals (i.e. Annual Model Administration to update Model Calendar) or on an as-needed basis.
Questions? Leave a comment!