OEG Best Practice: Time range application

edited February 2023 in Best Practices

If you have a multi-year model where the date range for different parts of the model varies (for example, history covering two years, current year forecast, and three planning years), then time ranges should be able to deliver significant gains in terms of model size and performance.

But, before you rush headlong into implementing time ranges across all of your models, let me share a few considerations to ensure you maximize the value of the feature and avoid any unwanted pitfalls.

Naming convention for time ranges

As with all Anaplan models, there is no set naming convention, however, we do advocate consistency and simplicity. As with lists and modules, short names are good. I like to describe the naming convention thus—as short as practical—meaning you need to understand what it means, but don’t write an essay!

We recommend using the following convention:

  • FYyy-FYyy. For example, FY16-FY18, or FY18 for a single year

Time ranges available are from 1981 to 2079, so the “19” or the “20” prefixes are not strictly necessary. Keeping the name as short as this has a couple of advantages:

  • It has a clear indication of the boundaries for the time range
  • It is short enough to see the name of the time range in the module and line items blueprint

The aggregations available for time R=ranges can differ for each time range and also differ from the main model calendar. If you take advantage of this and have aggregations that differ from the model calendar, you should add a suffix to the description. For example:

  • FY16-FY19 Q (to signify Quarter totals)
  • FY16-FY19 QHY (Quarter and Half Year totals)
  • FY16-FY19 HY (Half Year totals only)
  • etc.

Time ranges are static

Time ranges can span from 1981 to 2079. As a result, they can exist entirely outside, within, or overlap the model calendar. This means that there may likely be some additional manual maintenance to perform when the year changes. Let’s review a simple example:

  • Assume the model calendar is FY18 with two previous years and two future years; the model calendar spans FY16-FY20
  • We have set up time ranges for historic data (FY16-FY17) and plan data (FY19-FY20)
  • We also have modules that use the model calendar to pull all of the history, forecast, and plan data together, as seen below:


At year end when we “roll over the model,” we amend the model calendar simply by amending the current year. What we have now is as follows:


You see that the history and plan time ranges are now out of sync with the model calendar.

How you change the history time range will depend on how much historical data you need or want to keep. Assuming you don’t need more than two year’s history, the time range should be re-named FY17-FY18 and the start period advanced to FY17 (from FY16).

Similarly, the plan time range should be renamed FY20-FY21 and advanced to FY20 (from FY19). FY18 is then available for the history to be populated and FY21 is available for plan data entry.


Time ranges pitfalls

Potential data loss

Time ranges can bring massive space and calculation savings to your model(s), but be careful. In our example above, changing the Start Period of FY16-FY17 to FY17 would result in the data for FY16 being deleted for all line items using FY16-FY17 as a time range.

Before you implement a time range that is shorter or lies outside the current model calendar, and especially when implementing time ranges for the first time, ensure that the current data stored in the model is not needed. If in doubt, do some or all of the suggestions below:

  • Export out the data to a file
  • Copy the existing data on the line item(s) to other line items that are using the model calendar
  • Back up the entire model

Formula references

The majority of the formula will update automatically when updating time ranges. However, if you have any hard-coded SELECT statements referencing years or months within the time range, you will have to amend or remove the formula before amending the time range. Hard-coded SELECT statements go against best practice for exactly this reason; they cause additional maintenance. We recommend replacing the SELECT with a LOOKUP formula from a Time Settings module.

There are other examples where the formula may need to be removed/amended before the time range can be adjusted. See the Anapedia documentation for more details.

When to use the model calendar

This is a good question and one that we at Anaplan pondered during the development of the feature; Do time ranges make the model calendar redundant? Well, I think the answer is “no,” but as with so many constructs in Anaplan, the answer probably is, “it depends!” For me, a big advantage of using the model calendar is that it is dynamic for the current year and the +/- years on either side. Change the current year and the model updates automatically along with any filters and calculations you have set up to reference current year periods, historical periods, future periods, etc. 

(You are using a central time settings module, aren’t you??)

Time ranges don’t have that dynamism, so any changes to the year will need to be made for each time range. So, our advice before implementing time ranges for the first time is to review each module and:

  • Assess the scope of the calculations
  • Think about the reduction time ranges will give in terms of space and calculation savings, but compare that with annual maintenance. For example:
    • If you have a two-year model, with one history year (FY17) and the current year (FY18), you could set up a Time Range spanning one year for FY17 and another one year Time Range for FY18 and use these for the respective data sets. However, this would mean each year both time ranges would need to be updated.

We advocate building models logically, so it is likely that you will have groups of modules where time ranges will fall naturally. The majority of the modules should reflect the model calendar. Once time ranges are implemented, it may be that you can reduce the scope of the model calendar. If you have a potential time range that reflects either the current or future model calendar, leave the timescale as the default for those modules and line items; why make extra work?

SELECT statements

As outlined above, we don’t advocate hard-coded time selects of the majority of time items because of the negative impact on maintenance (the exceptions being All Periods, YTD, YTG, and CurrentPeriod). When implementing time ranges for the first time, take the opportunity to review the line item formula with time selects. These formulae can be replaced with lookups using a Time Settings module.

Application Lifecycle Management (ALM) considerations

As with the majority of the Time settings, time ranges are treated as structural data. If you are using ALM, all of the changes must be made in the development model and synchronized to production. This gives increased importance to refer to the pitfalls noted above to ensure data is not inadvertently deleted.

Best of luck! Refer to the Anapedia documentation for more detail. Please ask if you have any further questions and let us and your fellow Anaplanners know of the impact time ranges have had on your model(s).

Author David Smith.
Contributing author Mark Warren.



  • david

    Great new feature! 


    Another consideration I noticed when playing around with the Time ranges is time-based formulas such as LAG. It is not possible to use LAG and POST across line items with diffferent time ranges. TIMESUM and MOVINGSUM works.

  • Yes, I didn't want to get into all of the details of what can and can't be done because the Anapedia documentation covers all of that






  • Hi David,


    Great feature, and long awaited.  Will definitely help with sparsity.


    Quick question re: time range setup:


    The base setup allows you to define a time range based on "number of periods" but does not appear to define the base timescale (ie is that number of periods months, quarters, or years?)  Modules that you assign a custom time range to can have different timescales (months, years, quarters).  When I apply a custom timescale to modules, should I need to create a new one for each specific timescale basis?


    For example, "FY18 only (months)" and "FY18 only (quarters)", if I want to use custom timescales on a module for months and a module for quarters?  For months, I assume the number of periods would be 12, and for quarters, the number of periods would be 4.



  • Hi Matthew

    The number of periods is always in years,but the granularity is set separately from the Time Range. You can still define modules that are by year, quarter, month, week or day depending on how you set up your main timescale, so in your example, you would only need one Time Range - FY18 and you can then have two modules, one dimensioned by month and one by quarter.  

    Hope that helps




  • Thanks David,


    Yes, that clarifies the issue.  One quick followup:


    I went and re-dimensioned one of our larger modules, that was based in "quarters," with a new timescale subset I created.  When I did so, the module's base timescale changed from quarters to months.  When I tried to revert the base timescale back to quarters, it said that quarters was not supported by the timescale subset.


    Do timescale subsets only work only if your modules are on a monthly basis?  Or is there a way to apply them to quarterly modules?



  • Hi Matthew

    The availability of the granularity depends on the settings here:


    Turning on Quarter here will enable you to set Quarters as the Time Scale


    Just a word of warning, if this is not the model calendar setting, check that you haven't got any Parent() functions that refer to a timescale nested within another formula.  The value may change.  For example, Name(parent(item(time))) for Jan-18 = "FY18" when quarter totals are off, whereas the same formula returns "Q1 FY18" if quarter totals are turned on.

    This is normal behaviour for timescale changes, but something to watch out for

    Hope this helps




  • jon

    Hi David, 


    Quick question about something in Anapedia. 

    in the 'Model elements and associated time ranges' table in Anapedia, what is the specific scenario where I would see the Model Element = 'Import - Selected Year' and the Time Range Used = 'Superset'? 






  • @jon

    This is the example 


    Hope that helps


  • jon

    @DavidSmith perfect. Thank you.

  • David, we're having a very enjoyable time taking advantage of this feature on some of our larger client models.  Well done!


    We've noted that when using Time Periods to format a line item (ie. for a user to select a time period) the entire superset is presented.  This can be awkward when the superset is large (ie. contains multiple years of history etc.)  Have you considered an enhancement where the Time Period could apply either the Model Calendar or a specfied Time Range on a formatted line item?

  • @Mitch_Max

    Great news

    Yes, it is something that was discussed, having a second parameter for time formatted items (i.e. the Time Range), with obvious validation considerations. I will pass this on again to the development team, but also, please can you submit a RFE to our support team


    Happy Time Ranging!