Best Of
December 2024 platform releases
Check out the latest Anaplan feature updates and enhancements in our December 2024 release notes. The information below offers supplemental information to that post.
UX
- Filter across line items (end users)
End users can now apply filters across line items to a grid in boards and worksheets. Regardless of the datatype of the line item, filtering will treat them as numeric, just like in the classic experience. Filter notations have also been improved for cases where line items are context selectors, making it easier to identify and apply filters efficiently. - Expand and collapse in cells with list pickers
List hierarchies in grid cells with list pickers can now be expanded and collapsed, streamlining navigation for users. - Row and column formatting
Page builders can now apply row and column formatting, including number formatting, to a grid in boards and worksheets. This enables page builders to make individual rows or columns stand out in UX pages and add the appropriate suffix, such as %. - Role-based page access
(We mentioned this in November's update, but added a video later in the month that many may have missed, so we're mentioning it again!) Users can now specify by role who can and cannot modify a page, allowing users to restrict critical planning pages while still giving users the flexibility to create their own pages and reports. All existing permissions will remain the same, with the addition of the enhanced capability to restrict modify access so users can no longer go into page designer.
Upcoming quarterly platform release webinar
Our next quarterly platform release webinar is scheduled for January 28 at 8am PT and registration is now open! Our expert-led session will equip you with a practical guide and live demonstrations to help you get the most out of new features and innovations.
Topics covered will include:
- Tailored access to available functions based on model engine
- User experience enhancements — see below for details
Features to be demo'd:
- Engine-specific content in Anapedia integration
- Role-based page access
- Network charts
- Axis label formatting
- Row/column formatting
- Filter across line items
- Expand/collapse in cells with list pickers
Full release notes and previous release notes can be found here.
Workflow: A comprehensive guide to streamlined planning
Author: Prasanth Kosuri is a Solution Architect and EPM Consultant at Deloitte.
Anaplan Workflow, introduced in September 2023, has revolutionized the way organizations approach planning. This powerful tool offers a range of enhancements designed to improve efficiency, accuracy, and collaboration. Anaplan Workflow allows businesses to automate their planning processes, notifying users automatically when their action is needed, bringing them to exactly the right place at exactly the right time. Workflow is designed to easily layer onto different business requirements, helping to remove the manual intervention required to run successful planning processes. Automated task handover and notifications drive efficiency, delivering data and insights more quickly. Direct, streamlined user journeys for stakeholders enable effortless user adoption, further democratizing the planning process.
Key enhancements in Anaplan Workflow
Anaplan Workflow has recently undergone significant enhancements, making it more powerful, efficient, and flexible. These improvements are designed to seamlessly integrate into both new and existing model builds, wherever processes require notifying users upon task completion, due tasks, and reminders. Here are the key enhancements:
- Automated task reminders: Ensure tasks are completed on time, preventing delays and bottlenecks by automatically notifying users when their action is needed.
- Intuitive template builder: Simplify the creation and management of Workflow templates, making it easier to design and implement workflows.
- Line item and model role-driven decision steps: Enable decision-making based on specific data points within a model and the roles of users. Configure decisions and approvals to be assigned to users based on a connected line item or a specified model role, allowing model logic to determine who should approve at each stage of the process and ensuring that everyone holding that role is notified when approval is required.
- Skippable decisions and approvals: Streamline workflows by allowing users to skip certain steps based on specific conditions. Decisions and approvals can be optionally skipped if the line item used to define the approvers is blank, adding more flexibility in handling approval steps.
- Workflow scheduling: When creating a Workflow template, builders have the option to "start immediately" or "start based on a schedule," including options for start and end dates, times of day, and workflow repetition. This allows for greater flexibility in managing workflows.
- Trigger workflows from a UX page: Workflow templates can now be linked to buttons on UX pages and made available for end users to use, allowing for greater flexibility and ensuring business continuity without delays.
- Hierarchy-based task customization: Tailor tasks to specific roles and responsibilities within the organizational hierarchy, ensuring that the right people are assigned to the right tasks.
- Clear context labels: Reduce errors by providing users with a better understanding of the data they are working with through clear context labels.
Practical use cases
- Capital expenditure (Capex) project approval: Create a workflow to guide Capex projects through a multi-step approval process, ensuring that all necessary approvals are obtained and documentation is complete.
- Promotions in trade promotion model: Implement a workflow to manage the promotion planning process, including steps for identifying eligible products, determining promotional terms, and obtaining approvals from relevant stakeholders.
- Supply chain demand planning: Develop a workflow to streamline the demand planning process, ensuring that demand forecasts are accurate and aligned with supply capabilities.
- Inventory management: Create a workflow to optimize inventory levels, automating tasks such as reorder point calculations and stock replenishment.
- Financial reporting: Automate the financial reporting process, ensuring that reports are generated accurately and on time.
Tips for building effective workflows
- Define clear objectives: Clearly articulate the goals of your workflow.
- Identify key tasks: Break down your workflow into smaller, manageable tasks.
- Leverage automation: Identify opportunities to automate repetitive tasks.
- Optimize data flow: Ensure data flows seamlessly between different modules.
- Test and iterate: Thoroughly test your workflows and make adjustments as needed.
- Provide clear instructions: Ensure users understand how to complete tasks and navigate the workflow.
- Monitor and analyze: Regularly monitor the performance of your workflows and identify areas for improvement.
Additional considerations
- Security and access control: Implement appropriate security measures to protect sensitive data and ensure that only authorized users have access to relevant workflows.
- User adoption: Develop a plan to encourage user adoption of Anaplan Workflow, providing training and support as needed.
- Integration with ADO: Consider integrating the Workflow with Anaplan Data Orchestrator to streamline data flow and improve efficiency. (Which is due for upcoming releases.)
Benefits of Workflow
The power of automation
By automating routine tasks, you can free up your team's time to focus on more strategic initiatives. This not only increases efficiency but also reduces the risk of human error.
Improved collaboration and visibility
Centralized workflows foster better communication and coordination among team members. Real-time tracking of task progress provides a clear overview of the planning process.
Enhanced data quality
Consistent workflows help ensure data accuracy and integrity, reducing the risk of errors and improving the reliability of your planning outputs.
Conclusion
Anaplan Workflow is a valuable tool for organizations seeking to streamline their planning processes, improve collaboration, and enhance data quality. By leveraging its powerful enhancements, including automated task reminders, intuitive template builder, hierarchy-based task customization, clearer context labels, line item and model role-driven decision steps, skippable decisions and approvals, workflow scheduling, and the ability to trigger workflows from a UX page, organizations can achieve even greater efficiency, accuracy, and agility in their planning efforts.
Specifically, the ability to automate task reminders and approvals ensures that projects stay on track and that the right stakeholders are involved at the right times. The intuitive template builder and hierarchy-based task customization simplify the creation and management of workflows, making it easier to tailor processes to the unique needs of the organization. Clear context labels and enhanced decision steps reduce errors and improve decision-making, while the flexibility to schedule workflows and trigger them from UX pages ensures that workflows can be seamlessly integrated into daily operations.
By adopting these enhancements, organizations can streamline their planning processes and foster a culture of collaboration and continuous improvement. The result is a more agile, responsive, and data-driven organization that is well-equipped to navigate the complexities of modern business environments.
Questions? Leave a comment!
How to roll back a production model to recover lost data
Author: Jessie Zhao is a Solution Architect and Certified Master Anaplanner at Anaplan.
Working with a model in ALM has a lot of benefits. These include building new features in a development model anytime without affecting production users, securely managing production lists by identifying structural data that needs to change in the deployment environment without risking an overwrite, and achieving model synchronization through formal revision control by leveraging the tagging of model changes. But there is one challenge — rolling back the production model to recover lost data is more complex in ALM models because of the potential compatibility issue between the development model and production model.
Recently, it happened that I needed to roll back one production model to restore lost data caused by deletion of list members from a production list. There had been three more revision tags added and a few hundred new inputs added to the production model after the deletion was run. My plan was to roll back to the history ID before the deletion happened to confirm the cause and get a copy of the lost data, and roll forward to the latest user change ID so that the few hundreds user edits between the problematic action and the latest user change wouldn’t be impacted, while I could use the copy to add back the lost data.
Steps I took (hint: don't follow these steps!):
- Change production model mode from deployed to standard offline.
- Roll production model back to the history ID before the deletion action with “unlink revision created after this restore point” flagged.
- Confirm prod model at the ID has lost data and make a copy (I know there'll be a copy revision tag added but will also be removed after Step 4).
- Roll model forward to the latest user change history ID with ““unlink revision created after this restore point” flagged.
- Add a new revision tag in Dev model and sync to Prod.
Everything looked good as the latest revision tag showed to be compatible to the DEV model initially, but it returned to an error stating that the target model was not compatible to the source model. It was hard to figure out what — except the copy model action — could cause the incompatibility.
For time’s sake, I gave up reconnecting the production model to the original DEV model and started to create a new DEV model from the latest revision tag existing in the production model. But, when I synced the revision tag after DEV model was created, it would return the same incompatibility error. It’s wasn't until I added a new revision tag in the production model first, and created DEV model from this newly created revision tag, did I successfully sync the revision tag between the new DEV and prod model.
To find out what caused the incompatibility, I recreated the issue with a test production model and a test development model and went through the same steps again.
Attempt #2
With more time to compare changes between models, I found that flagging “unlink revision created after this restore point” (revision tag 1) when rolling back and forward the model removed revision tag 2-4 from the production model, but keeping the structural changes made in revision tag 2-4 in production model, which in fact unsaved structural changes in production model. The available “add revision tag” and “revert to last revision” after rolling forward model also confirmed the idea (screenshot 1). At this point, reverting to last revision tag, meaning reverting to revision tag 1 “run delete action for account 7-9", would restore the compatibility (screenshot 2) but changes made in revision tag 2-4 as well as user inputs after the history ID associated with revision tag 1 would be erased. Given that, saving all changes by creating a new revision tag in this production model and creating a new development model would be the solution at this point.
Screenshot 1:
Screenshot 2:
Knowing what "unlink" does to the revision tag, I became curious about what would happen if I unflag “unlink revision after this restore point” when rolling back and forward model. I tested the idea and found that revision tag 2-4 will stay, but a new revision tag of copying model as well as history ID associated with it would be added. The copy model revision tag makes the prod model incompatible again and it would need to take the same solution as able to create a new development model, or use the revert feature which potentially could cause user input after revision tag 4 erased.
After the above two tests, I found that unflagging “unlink revisions created after this restore point” when rolling back the prod model to keep structural revisions while flagging the “unlink revision created after this restore point” when rolling forward the production model to eliminate copy model revision tag would be the best way to keep compatibility between the original Dev and Prod models.
The correct steps should be:
- Change production model mode from deployed to standard offline.
- Roll production model back to the history ID before the deletion action with “unlink revision created after this restore point” UN-flagged.
- Confirm prod model at the ID has lost data and make a copy.
- Roll model forward to the latest user change history ID with “unlink revision created after this restore point” flagged.
- Add a new revision tag in Dev model and sync to Prod.
Hope my experience of rolling back production model could be helpful for you when you face the same situation!
Questions? Leave a comment!
Re: ALM explained—Part 1: compatibility
@DavidSmith Can some of the images be reloaded and bigger? Even with zooming and clicking on images, text is blurry. Thank you for the post!
Setting up a process to remove inactive users
Author: Kay Kuang is a Certified Master Anaplanner and Principal Data and Insights Architect at Anaplan.
Actively managing the users list to keep the list small and to keep only users who need access to the model will make the model go a long way. The users list can have a big impact on the model's performance — especially if a model has a lot of users. Setting users who no longer need access to No Access can decrease the model size and make the model run more efficiently. (Caveat: removing a user from the users tab will remove this user from all the models in the same workspace. You want to be very careful to do that.) Besides, if inactive users or other users who no longer need access to the model remain the model, it can compromise the data security in the model. This can be a big issue if the model houses highly confidential data.
However, manually checking inactive users and setting end users to No Access can be tedious especially if there are a lot of user changes regularly. In this post, I want to share the practice of using import action/process to manage users in the model. In this way, you can set up formulas to change people’s access, which provides a lot of flexibility. Then you can set up the process in a recurring schedule to update the users list so that you don’t have to manually do the work.
Steps to take
- Think about how you plan to decide if a user doesn’t need access to the model.
You can choose to manually flag users, or you can pull data from somewhere else to support the decision. Depending on the business needs, it could be the termination date (e.g. if you want to remove a user if that user terminated for over 30 days), or cost center (e.g. only users in a certain cost center should have access to), or anything other data that you want to look at to make a decision. - Create a data module and prepare the user data set.
This step is not necessary if you plan to manually flag the users who don’t need access anymore. The employee data set must have accurate employee emails, which will be used to map employees to the users list. You can pull the data from Workday or other systems that house the data that you plan to use. One necessary step is to map the data set’s dimension to the user list. That’s why it's critical to have employee emails included in the data set. - Create a module dimensioned by users, which will be the output of list of users to set to No Access.
If you plan to manually flag users, then you can do it in this module. This module can be published to a dashboard and people can come in to tag and mark those who no longer need access to the model. If you decide to use data to drive the process, then this module will be the place you set calculations to check if a user still needs access to the model.
You can use FISTNONBLANK or LASTNONBLANK to connect the user data set to this calculation module (see calculation snapshot 1). A caveat is the calculation could be inaccurate if there are multiple records with the same email address. You can set up a validation calculation to check if anything should be watched out for (see calculation snapshot 2).
Another necessary line item is the “No Access” line item. This will be the data that goes into the role field in the users tab. It should be formatted as a text field. It should be the last step to combine all the data logic you want to look at to exclude a user and then populate “No Access” in this field (see calculation snapshot 3).
Calculation snapshot 1: Calculation snapshot 2: Calculation snapshot 3: - Create saved view.
With all the calculations set up... Now you just need to set up a saved view with only users marked as “No Access.” - Create the action and process.
After the saved view is set up, then you can go to the users tab. Click “import” then find the saved view you just created. You can follow the mapping below to set up the import action. After you have the action set up, you can bring this action to a scheduled process to let this process run on a recurring basis.
Questions? Leave a comment!
SUM and LOOKUP | Model Optimization Team series
Hi! Welcome to the Model Optimization team's monthly blog post. This is an eight-part series, following the topics we see occurring most frequently in slow customer models. Our aim is to inform and guide how to build with best practice intentions for these model building topics.
Each month, two of our analysts will take you through how to spot and improve these formula structures! We hope these can help with your model performance.
All the best - Cianna Bramley (Model Optimization Manager)
……
This month's blog is brought to you by Kenneth Privaldos and Lip Chean Soh.
Last Month, we discussed the importance of Calculating Once and Reference and avoiding repeated calculations in a model. This month, we’re going to discuss how the combination of two functions can affect the performance of your model, the use of SUM and LOOKUP together.
In P.L.A.N.S., the standard of Anaplan modeling, this falls under Performance, or the use of correct structures and formulas to optimize the Hyperblock. Furthermore, it is specifically mentioned in the Zen of Anaplan —
“Sums and lookups are good, but never together.”
But why?
Why is this bad?
Referencing Planual 2.02-08, the usage of SUM and LOOKUP together can create a large number of formula calculations which can include slow intermediate ‘relationship’ calculations; as the engine creates virtual mapping modules to calculate these functions.
For a [SUM: X, LOOKUP: Y] format, the Anaplan engine would perform the SUM first before doing the LOOKUP. The format seems simple but here’s the caveat, the SUM is repeated for every LOOKUP. This results in poor performance and inefficient calculations.
Now that we know the “Why?” The next question is “How?”. How do we find this in our model?
Looking for SUM and LOOKUP together
There are 3 methods to find these in your model, and these are:
- Manual inspection
- MAPs
- Model optimization
For manual inspection, you can search the blueprint of the module and look for a line item combining the SUM and LOOKUP. Alternatively, you can download the line items and search for SUM and LOOKUP in your csv file.
You can also request MAPs (Model Analysis Pro-Active Solution), from your Business Partner, which can provide Planual infractions — however this is currently not available for all models (please ask your Business Partner to check).
Lastly, if you request a Model Optimization (Model Performance Analysis) with our team, we check Planual infractions such as SUM - LOOKUP as part of our analysis.
How do we fix these instances in models?
We’ll cover three examples of SUM and LOOKUP together and provide an optimized version of each line item. Generally, to fix the issue, we recommend splitting the SUM and LOOKUP function by using an Intermediate line item. Here’s the reason why:
- By using an intermediate line item, we calculate the functions separately, which stops the engine repeating the functions; like SUM calculating for each LOOKUP.
- The function calculating in the intermediate can be calculated over different dimensionality; in some cases, this can be a smaller cell count.
In most cases, the SUM and LOOKUP are related, and so the SUM would most likely be the intermediate calculation (as this must be calculated before the LOOKUP can be applied). However, if the SUM and LOOKUP act on different dimensions, the LOOKUP could be extracted first (aim to extract the function which gives you an intermediate line item with the smallest cell count to help save space).
Here are the steps in converting a SUM-LOOKUP:
- Create an intermediate line item that will perform the SUM First. This line item should not need aggregation (e.g. ‘Sum’ summary method).
- In the target line item, replace the source with the intermediate line item.
Example 1: SUM and LOOKUP with different mappings and dimensions
Below is an example of a line item that contains SUM and LOOKUP.
Formula Breakdown
Example 1 = 'DAT - Product Quantities'.Qty[SUM: 'SYS P1 Products'.Country, LOOKUP: 'SYS G1 Countries'.Standard Sizing]
Taking a closer look at the formula:
Target Line item = Source [SUM: Mapping 1, LOOKUP: Mapping 2]
To create the intermediate line item, we need to determine the correct dimensions for the SUM. This table contains the dimensions of the line item that we’re going to work with.
Line Items | Format | Applies to: |
---|---|---|
Source (DAT – Product Quantities.Qty) [MOU1] | Number | P1 Products, Products Sizes, Month(Time) |
SUM: Mapping 1 (SYS P1 Products.Country) | List: G1 Countries | P1 Products |
LOOKUP: Mapping 2 (SYS G1 Countries.Standard Sizing) | List: Product Sizes | G1 Countries |
Intermediate Line Item [MOU2] | Number | G1 Countries, Products Sizes, Month(Time) |
Table: Dimensions and format of Intermediate, Source, and Mapping line items in Example 1.
1.1 Create an intermediate module for calculating the SUM
When using the SUM function:
- Add the list used in formatting of the Mapping line item to the dimensions of the target line item.
- Remove the dimension of the mapping line item in the target line item dimensions.
Intermediate Line Item Dimension (SUM) = Source Dimensions – Mapping Dimensions + List Used in formatting (Mapping)
Intermediate Line Item Dimension = P1 Products, Products Sizes, Month(Time) - P1 Products + G1 Countries
Since we know the dimensions for the SUM function, we can now create another module that will contain these dimensions.
Inside the module, create an intermediate line item that will calculate the SUM function.
Intermediate SUM = 'DAT - Product Quantites'.Qty[SUM: 'SYS P1 Products'.Country]
1.2 Reference the intermediate line item in the target module
We can reference the intermediate line item. With this, we optimize the original formula by splitting the SUM and LOOKUP functions.
Example 1 = ‘Intermediate Module 1’.Intermediate SUM [LOOKUP: 'SYS G1 Countries'.Standard Sizing]
Example 2: SUM and LOOKUP with more than 2 mappings
For this example, we’re going to optimize a line item that contains two SUM functions and two LOOKUP functions. It’s similar to our previous example and our goal is to split the SUM and LOOKUP by using an intermediate line item.
Formula Breakdown
Example 2 = DAT Product Cost.Shipping Cost[SUM: 'SYS P1 Products'.Country, SUM: 'SYS P1 Products'.Brand, LOOKUP: 'SYS G1 Countries'.Standard Sizing, LOOKUP: 'SYS P1 Products'.Product Type]
Target Line item = Source [SUM: Mapping 1, SUM: Mapping 2, LOOKUP: Mapping 3, LOOKUP: Mapping 4]
Note: the SUMs appear before the LOOKUPs here, however this same suggestions would apply to other formats, e.g. [SUM: 1, LOOKUP: 3, SUM: 2, LOOKUP: 4] can have the 2 SUMs extracted to an intermediate line item together.
This table shows all the formats and dimensions of the line items we’re going to work with.
Line Items | Format | Applies to |
---|---|---|
Source | Number | P1 Products, Products Sizes, Product Type, Brand, Month(Time)[MOU1] |
SUM: Mapping 1 | List: G1 Countries | P1 Products |
SUM: Mapping 2 | List: Brand | P1 Products |
LOOKUP: Mapping 3 | List: Products Sizes | G1 Countries |
LOOKUP: Mapping 4 | List: Product Type | P1 Products |
Intermediate SUM | Number | G1 Countries, Products Sizes, Brand, Product Type, Month(Time). |
Table: Dimensions and format of Intermediate, Source, and Mapping line item in Example 2.
1.1 Create an intermediate module that will contain the SUM functions
To determine the dimensions, we can still apply this rule:
Intermediate Line Item Dimension (SUM) = Source Dimensions – Mapping Dimensions + List Used in formatting (Mapping)
The Dimensions for this line item are: G1 Countries, Products Sizes, Brand, Product Type, Month(Time).
Intermediate SUM = DAT Product Cost.Shipping Cost[SUM: 'SYS P1 Products'.Country, SUM: 'SYS P1 Products'.Brand]
1.2 Reference the intermediate line item in the target module and perform the LOOKUP function.
Example 2 = ‘Intermediate Module 3’. Intermediate SUM[LOOKUP: 'SYS G1 Countries'.Standard Sizing, LOOKUP: 'SYS P1 Products'.Product Type]
Example 3: SUM and LOOKUP with similar SUM mapping and source line items with the same Applies To dimensions
If we have two line items with the same Applies To dimensions using SUM and LOOKUP with similar mapping in the SUM function, we can extract the SUM and apply the rules for optimizing SUM and LOOKUP and Calculating Once and Reference.
Line Item 1:
Line Item 2:
Target Line Item 1:
Line Items | Format | Applies to: |
---|---|---|
Source DAT Product Cost.Shipping Cost | Number | P1 Products, Products Sizes, Product Type, Brand, Month(Time)[MOU1] |
SUM: Mapping 1 'SYS P1 Products'.Country | List: G1 Countries | P1 Products |
LOOKUP: Mapping 2 'SYS G1 Countries'.Standard Sizing | List: Products Sizes | G1 Countries |
Table: Dimensions and format of Source and Mapping line item in Example 3.
Target Line Item 2:
Line Items | Format | Applies to: |
---|---|---|
Source DAT Product Cost.Shipping Cost | Number | P1 Products, Products Sizes, Product Type, Brand, Month(Time) |
SUM: Mapping 1 'SYS P1 Products'.Country | List: G1 Countries | P1 Products |
LOOKUP: Mapping 2'SYS P1 Products'.Product Type | List: Product Type | P1 Products |
Table: Dimensions and format of Source and Mapping line item in Example 3.
1.1 Create an intermediate module for calculating the SUM function
Create an intermediate line item in another module for calculating the SUM function. The dimensions are: G1 Countries, Product Sizes, Brand, Product Type.
1.2 Reference the Intermediate line item
For target line item 1:
For target line item 2:
Special cases
While it’s generally recommended to avoid using SUM and LOOKUP together, there are a few exceptions for leaving it unchanged:
- LOOKUP as SELECT: When the LOOKUP function acts like a simple value selection. This happens when the LOOKUP value is a constant, or single cell. Hence, the SUM is only performed once. It can be treated like using SUM and SELECT together.
- Very large intermediate line items: Creating an intermediate line item can sometimes results in much larger cell counts due to the required dimensions for the SUM function. If the size of the intermediate line item created heavily impacts your model size, leave the formula unchanged. However it’s good to note that intermediate line items should not need ‘summary’ (aggregation), so this should help keep the cell count as low as possible.
Conclusion
Combining SUM and LOOKUP function together can cause slow models. To solve this, we recommend splitting the SUM and LOOKUP using an intermediate line item. While exceptions exist, it is generally recommended to avoid using SUM and LOOKUP together. This results in a faster calculation because the SUM is not repeated for every LOOKUP.
Questions? Leave a comment!
July 30th Quarterly Platform Release Webinar Registration Now Open!
Hey everyone,
Our second installment of our quarterly platform release webinar series is scheduled for July 30th at 8am PT and registration is now open!
Our expert-led session will equip you with a practical guide and live demonstrations to help you get the most out of new features and innovations. Get your questions answered during the live QA, and be equipped to take advantage of everything the new releases have to offer!
Topics covered will include:
- New modules inventory improvements
- Workflow enhancements
- more
Register today!
All the best,
Eric
How I optimize model calculation with MAPS reporting
Author: Jessie Zhao is a Certified Master Anaplanner and Sr. Data & Insights Architect at Anaplan.
Please note: MAPS reports are dependent on a few key qualifications and may not be available to all customers. Please check with your BP if you have questions.
As a CoE member, model building — either for new user stories or enhancements — takes up most of my time in daily work. However, model optimization, which is usually not as urgent as all those building requests from business every day, is important to keep a model efficient and last long if it’s done periodically. There are many best practice resources in Anaplan Community that we could use to optimize our model, but I like MAPS reports the most, as it provides actionable recommendations specifically to my model and gives sufficient details down to the line item level. In addition, the Priority Matrix chart is very handy for me to decide my optimization plan so that I can maximize the result according to different timeline and resources that I have. If I have only a day to use for model optimization, I would focus only on “quick wins” items. If I have more time (like 1-2 weeks), I would move to the “high impact and effort” bucket to address those Planual infractions.
I’d like to share my experience in using MAPS reports to optimize GTM planning model in two scenarios:
- When I have a day to optimize model performance.
- When I have a week to optimize model performance.
Steps I take when I have one day for model optimization
Step 1: Read the Model Report, especially the finding and Priority Matrixes to know the top 2-3 Planual infractions to focus on.
For my model, the top five Planual infractions (from 1-5 descending) are:
- Try not to use TEXT as a format
- Unreferenced summaries
- Avoid using subsidiary views
- Break up formulas
- Line item over-dimensionalized
However, because TEXT format infractions is in the “High Impact & Effort” bucket, and Subsidiary Views are in the “Minor Improvements” bucket, I’d skip these two and only focus on the Unreferenced summaries, break up formulas, and line item over-dimensionalized given the limited time I have.
(Priority Matrix of GTM planning model as below)
Step 2: Read the line item detail report, decide the reasonable amount of line items need to be revised for selected Planual infractions in Step 1, and make those changes.
Below is what I did, while respecting the three quick win Planual infractions I chose in Step 1 in detail:
- For unreferenced summary, I started with unreferenced summary by filtering unreferenced summary = true and sorting by summary calculation time. I find there are 11 line items with high summary calculation time, over 1s. By revising these 11 line items’ summary method to none, I could potentially reduce calculation time by 27s according to their summary calculation time provided by MAPS. (Keep in mind calculation time is more of a volume rather than experienced calculation time by a user — e.g. If calculation volume drops by 25 seconds, the user may see the calculation time be a few seconds quicker.)
- For break formulas, I continued to break formulas by filtering with formula split recommendation = true and sorting by formula calculation time. Line items that are suggested to slip formulas has higher calculation avg. calculation time but for the sake of time, I edited the top 26 line items, whose formula calculation time sum to be 205s. It means, I could potentially reduce total calculation by 205s. I found most are user-filter related. having ISBLANK() calculated in a line item in user filter module with user dimension could save tons of time than having it calculated in target module with user and account dimensions.
- For line item over-dimensioned, I filtered with over-dimensioned column = true and BPI = medium/high/very high and sorted the file by descending total calculation time. I focused on the top 15 total calculation time and revised 10 out of 15 line items, which potentially can reduce calculation time by 69s.
Step 3: Make notes on the line item details spreadsheet of changes made above.
Keeping track of changes can help make a comparison of model performance when the next MAPS report is out to adjust optimization focus and plan for further optimization when you have additional time or additional resources to allocate.
Result: after revising around 50 top calculation line items from quick win in one day, model open time is reduced by 5.4s and total calc time is reduced by 10.5 min. I’d say it’s a good result considering how much time required to achieve it. No wonder it’s called the quick win category!
Steps I take when I have 1-2 weeks for optimization
When I can allocate more time in optimizing model calculation, I look into the high impact, high efforts text line items. I’d take similar steps in optimizing text line items. First, I use line item detail report and line item report to filter only the text as a format Planual infraction and rank them by their formula calculation time. In doing so, I could change line item with the most calculation time first. Second, I’d focus on top 20% line items, whose calculation time is over 5s in my case. Third, I’d keep a note for comparison with the new MAPS report. I find text line items can be categorized into 3 types:
- Code and name for display or calculation: There is not much you can do to optimize except reducing the dimension when over-dimensioned.
- Text in output module mapped from data module: In this case, a new list can be created and replace the text line item in all modules.
- Text line item in modules not used anymore: This is where changes have the most impact. Reviewing text line items brought some unused text heavy modules into my attention and deleting those modules is the most efficient way of solving text line item as well as reducing model size. I was able to reduce model size by 3GB.
Result: After this round of optimization, the model’s total calculation time is reduced by 50% from 9756s.
Hope my experience of optimizing a model with MAPs reporting is helpful!
Questions? Leave a comment!
Step-by-step: User-based sorting
Author: David Edwards is a Certified Master Anaplanner and Principal at Columbus Consulting.
While there is sufficient documentation regarding how the user list can be an effective tool for UX filtering and dynamic cell access, there is also the opportunity to leverage users when designing custom sorting functionality within UX cards.
A common request among users is the ability to sort a grid or chart in a customizable manner, often combining multiple columns and criteria. Anaplan native functionality allows for sorting a dataset based on values within a single column either ascending or descending. This is viable for quick sorting but often falls short of meeting the demands of a user base with diverse analysis and reporting needs.
In this tutorial, multiple fields will be combined into one unique sorting line item that leverages the users list for customizable sorting specific to each user’s needs.
Step 1: Determine which fields are valid for sorting
This involves polling your user group to compile a list of line items that should be included in the eventual final sort line item. This can be accomplished in multiple ways, even as simply as sending out a mass email to collect opinions. Basically, do not assume that you understand your users’ needs without explicitly asking them!
Step 2: Add a list that includes all options from Step 1
Once feedback is collected from the user group, add a list that captures which line items are required for sorting. This will be used in a later step to allow users to select how criteria should be prioritized in the final sort line item.
Step 3: Add sorting line items for each criteria in the reporting module
In the reporting module, add text-formatted line items for each required sorting criteria. This should match both the user poll and sorting list from steps 1 and 2.
Step 4: Add a user-based input module for sorting selections
Add a module that is dimensioned by the users list and line items that match the sorting criteria. These line items should mimic the number of sorting options that the users have reported in the opinion polling from Step 1. In this example, we have four line items eligible for sorting.
Step 5: Set the sorting line item Applies To
In the reporting module, change the Applies To settings for the sorting line items to include the module’s existing dimensionality along with the users list.
Step 6: Write the sorting formulas
Each formula should include logic that assesses whether the line item should be included in the sort. This is accomplished by referencing the user input module from Step 4 as shown below.
Step 7: Combine each sorting criteria line item into one final sorting line item
Write a simple concatenation formula that combines each sorting criteria. This line item will be used on the UX page for grid formatting.
Step 8: Set the Show All Users option to Off
This is arguably the most important step. Without this setting, the reporting module will not properly reference the corresponding user selections in the input module and apply those to the UX grid. More information on this feature can be found in Anapedia.
Step 9: Apply the sort in the UX grid and publish changes
Navigate to the card settings of the UX grid. First, make sure that the sort line item is visible, then apply the preferred direction (i.e. ascending vs. descending). Once the sort is applied, hide the sort line item from the final page view. The sorting settings will be retained even though the line item is hidden.
Even though the final sort line item appears blank due to conflicting Applies To settings in the underlying module, Anaplan will apply the sort accordingly based on whichever user is viewing the page.
Summary and opportunities for further Anaplan functionality
This article provides an overview of customizable user-based sorting within a UX grid that goes beyond existing Anaplan functionality.
While there is nothing currently in the Anaplan product release timeline that addresses page sorting, customizable sorting could be enhanced through the following suggestions. Please consider adding your vote to get these features prioritized in future product releases:
- Ability to sort a grid on a hidden line item: Idea Exchange link
- Enhanced sorting that allows for Excel-like options (i.e. multiple line items in one sort, multiple directions for different sorting criteria): Idea Exchange link
Please comment if you have any suggestions to make sorting more robust on UX pages, or if you have examples of using similar functionality in your implementations.
Thanks for reading!
Re: How I Built It: Refreshing current date in an Anaplan model using Cloudworks
I saw a blog long back in the community. But the way you explained is impressive, but according to that blog, we should create a backup Cloudworks process, with a separate line item, separate saved view, and whole new process.