AMA: Model Building Problem Solving

edited December 2022 in Spotlight Series

Tell us about your time at Anaplan. How long have you been here? What is your current role, and how do you help customers succeed?

Erin Lauterbach: I have been at Anaplan since February 2018. I’m currently on the Global Presales Operations team supporting the Supply Chain LoB. I help customers succeed by building and demoing models to them that showcase the latest capabilities of the Anaplan platform and show them how they can expand their use of Anaplan.

Sam Wong: I’m a Presales Operations Consultant for the Global Presales Operations Team, specializing in Supply Chain. I’ve been here 9 months, and I help customers understand the power, speed, and flexibility of Anaplan through tailored proof of concept models, statistical forecasting applications, and Optimizer use cases and support.

Note: The live Q&A session is now closed.


  • It's almost time for our next AMA! Erin and Sam are ready to help you problem solve your model building questions. Post your questions here, Monday - Wednesday of next week, or join the conversation live in the forum from 11-12 CST. Our expert planning pair is looking forward to sharing their knowledge with you in this interactive session!

  • The AMA is now open for questions. Post your model building questions any time today, through Wednesday. You can also join them for a live forum discussion this Thursday from 11:00 - 12:00 CST. Erin and Sam are talented Anaplan modelers, ready to share their expertise and discuss best practices with you!

  • Hi,

    I have a couple of theoretical questions relating to model building.

    1. What is the use case of COLLECT()? Why would I want to use it and when would I want to avoid it? It seems to be a powerful function but I'm not sure why it is needed.
    2. Any model building tips when working with matrix style hierarchy structures (e.g. country and client dimensions) that have significant amounts of sparsity? Especially interested in output formats, e.g. P&Ls, which give end users the flexibility of having client and country as separate dimensions within the output without the sparsity. For instance, making it very easy for a user to see Client A across all countries, or see performance of England, France and Germany for a given set of clients.

    Thanks! Any help is appreciated!

  • Based on suggestions from the last AMA Pierre Kerkinni & Jon Mavetz - Model Building Solutions I've changed my hierarchy.  Now when trying to build modules that roll up to site sub sets I get an error about common anscestor...which was why I built the hierarchy the way it was before.  We have several hierarchies that roll up to site but don't relate to each other.  Any suggestions would be appreciated.  I'm pasting the new & old hierarchy below:

    Old (works but is clunky):


    New (get common anscestor error):


  • Hi, I have some issues while model building which i have mentioned below :

    1) Is it possible to create Action Button on Numbered List if No Parent is assigned ? If Yes, then how ?

    2) I have Employee dimension which rolls upto Cost Center.For example Emp 1 is assigned for Cost Center Africa then Whenever he enters any new item in numbered list , he will be having rights only for Africa from Cost Centers List to select. How this can be build up

    Any help will be appreciated!




  • Hello both,

    Same as Nicolas, I have a question around the Collect() function.

    Sometimes, we use it to show some KPIs (line items in the original module) and the the year on year growth using the formula "Collect / Collect [LOOKUP: Prior Year] - 1" where Collect is the line item using the formula collect() 

    The big problem, and I haven't found a solution that is satisfactory, is that we cannot set the summary = formula when using lookup. Hence, the YY% for the full year is not accurate.

    Any suggestions? We use collect because we want to show the KPIs as row and the Forecast, Prior Year and Y/Y% as columns.


  • What is the biggest challenge in building well performing fast models?
    What tools and information would help you in this process?

  • I want to know how can i instruct system to save a list member, when an user updates or add new member in a list item with all its properties. If all properties not updated, system should not auto save it?

    How can i set it up?

    Appreciate your help!



  • How to integrate and communicate between 2 Anaplan applications. How to configure output fron one model is input for another model?



  • Today's the day! Erin and Sam are ready to take your questions, starting at 11:00 am CST—just a few hours from now. If you can't join the live hour, post your questions now and check back for answers at a time that's convenient for you. 

  • @fabien.junod — Great question!

    I was able to get a solution by using the OFFSET() function instead of a [LOOKUP]. This will allow you to set the Summary to Formula.

    In this module view, note that the FY20 result for KPI 1 is the correct result for the year.

    Summary Calculation YoY.jpg

    This blueprint view shows the formulas and summary method used for the YoY KPI.

    Offset Collect.png


    --Sam & Erin


  • @MarkWarren - here are the responses to your questions: 


    Response to Question 1:

    Dimensionality and sparsity — fix with modules and line items to include only the relevant dimensions. This means taking out “Applies To” on certain line items when it’s not relevant for that line item to help reduce sparsity and module size (i.e. removing Time dimension if it’s not relevant).

    Can be helped by following DISCO design, designing up front to not build redundant and/or unnecessary functionality. 

    Use line item subsets when needed and break long formulas into multiple line items if required to help with performance.


    Response to Question 2: 

    - Article on Community - DISCO & How to Model 


    - Two great previous AMAs --


    - Erin & Sam

  • @debbie5154 

    The common ancestor happens when you share the same parent. We would need some more details on why it’s necessary to dimensionalize the module with a series of lists that all share the same parent. If that is needed then it would be best to revert back to the original hierarchy so that you can have the “Applies To” include the necessary dimensions.

    -- Sam & Erin

  • Lots of "stuff" rolls up to site, but they don't all relate to each other.  For example:

    Fill rate rolls up to site but has no relationship to the grape programs, which also roll up to site.

    Also if there is an item that could possible roll up thru grape program to site, there would be tons of sparcity. 

    So I'm currently sticking to the old hierarchy.  Thanks!

  • @NicolasCadierhere are the responses to your questions: 


    Question 1 Response:

    COLLECT() is a function used in conjunction with Line Item Subsets to dimensionalize line items back to a list.
    For example, in our Statistical Forecasting Application, we have a Calculation module that with line items that calculate the final forecasts for each algorithm method.


    Step 1: Identify Line Items to Dimensionalize/CollectPicture1.png

    Step 2:  Create a Line Item Subset and mark line items for inclusionPicture2.png

    Step 3: In your list, create a property called Connect to Subset whose format is your line item subset:



    Step 4: Create a module dimensionalized by this Line Item Subset and relevant properties, and call COLLECT()



    Step 5: Create a module dimensionalized by your list, and reference the Subset module with a Lookup from the Connect to Subset property




    Another example and more details on COLLECT() can be found here:



    Question 2 Response:

    Refer to Rob Marshall’s example (link below), he gave a great response and we agree with it. Create a concatenated list of the intersections and use this flat list in your model. Create a module with properties to translate the Flat List to other levels of your hierarchy


    - Erin & Sam 




  • @priyanka1029 here are the answers to your questions: 


    Repsonse to Question 1: 

    A parent is required, if there is no actual parent for the numbered list then you can create a placeholder parent list without any list items (just “All”) and make this the parent hierarchy



    Reponse to Question 2:

    - Selective Access can be used to give employees access to only certain List items. 

    - Dynamic Cell Access can be used so employees can only read/write, view or have no access to certain Line items.


    We setup an example of both below: 


    Step 1: Setup Cost Center and Employees list, in Cost Center list select “Selective Access Enabled?” Boolean



    Step 2: Update access for employees, under “Settings” -> Users, find employee and give them read/write access to applicable cost center.


    Step 3: Employee 1 who has Write access to Africa cost center will now only see Africa cost center in the list dropdown (Note: USA Cost Center is setup in list but Employee 1 does not have access)



    Step 4: Selective Access can also be used to give employee read/write access to certain line items applicable to the Africa Cost Center. Setup Boolean line item then use this Boolean as the “Read Access Driver”



    Step 5: Publish module to a dashboard, now Employee 1 can only view “Actuals” line item and can edit “Inputs” line item and enter data here



    - Erin & Sam

  • @imerchant: For models in the same workspace, you can use an import processes to bring data from a source model into the target model. This process is made easier with Saved Views.


    1. In your export module, filter the view to display only the line items and hierarchy levels you want to export. Line items should be in “Columns” and hierarchy levels should be in “Rows”. Once set up, make a Saved View:
      Screenshot 1.png
    2. In your import module, select Import, from another Anaplan model, then select the saved view in your source model. Configure the rest of the process normally.Screenshot 2.png
    3. Once Import is complete, you can rename and publish the Import action to a dashboard so that same import can be run again or done in a demo. (Highlighted below)Screenshot 3.png


    -- Sam & Erin

  • @imerchant here are the responses to your questions: 


    - You can setup an Import staging module that the properties are loaded into first, this module can have logic/booleans setup to validate all applicable data is there before it gets imported into the actual List. 

    - In the import staging module, line items can be setup with conditional formatting to validate required data was loaded, if not the missing/blank lines will be flagged. This view can be published to a dashboard so end user can review and upate missing data. 

    - Example of this process is below. We setup a staging module that Product Hierarchy data is imported into to first check if all required data was imported (Product Name and Product Code). If it’s missing these are highlighted yellow using conditional formatting for end user to update before executing full import action which then imports data from staging module into product hierarchy Lists.




    If “View Missing Instances” option is selected it brings user to data clean up dashboard:


    Once missing data is populated then user can execute “Add Products to Hierarchy” action which will import data from staging module into Lists.


    - Erin & Sam