7 tips to writing faster IBM TM1 and Planning Analytics rules

One of the reasons why IBM TM1/Planning Analytics is so fast at performing complex calculations is because it gives developers many options to optimise the calculation rules.

The way developers write a rule has a huge impact in term of performance so before writing a rule, there are some key questions TM1 developer should be aware of such as:

  • Should I use CONTINUE over IF statements?

  • Should I get an attribute value with ATTRS or DB?

  • Should I specify the dimension name in an area statement?

Thanks to the }StatsByRule cube introduced with IBM Planning Analytics, we can now find out the evaluation time of each rule and give a definitive answer to these questions.

In this article we evaluated the performance of the most popular functions to give you some guidance about writing faster rules.

* To calculate the percentages below, we used an average of the total time taken for the rule to be evaluated from the }StatsByRule cube across different cubes sizes with IBM Planning Analytics v2.0.7. Every model is different, you might not get the same percentages in your model as the calculation time depends on factors such as IBM Planning Analytics server version, number of elements per dimension, number of dimensions in the cube, dimension ordering, cubes sizes, etc…


 1.  Use CONTINUE over IF

To improve the performance of a complex rule, you should first try to simplify it. One of the ways to do that is to use the CONTINUE statement.

If you see multiple nested IF statements in a single rule you could try to split this rule into multiple rules, one rule per IF statement.

Use rule priority to order the conditions of the original rule: TM1 executes rule from top to bottom. For a given data point in a cube once the left-hand side of the rule is satisfied the right-hand of the rule is evaluate. The rule calculation engine in TM1 stops evaluating any further rules below the qualifying rules unless instructed by a CONTINUE statement to keep evaluating subsequent rule statements

We compared one rule with two nested IF versus two rules with a CONTINUE statement:

The time to evaluate the two simple rules is 40% quicker than evaluating one rule with two IF statements.

Even though CONTINUE statements can reduce the calculation time and the readability of the cube rules, too many CONTINUE statements will create some performance issues.

Reducing the number of IF statements without using too many CONTINUE can be achieved by adding more constraints to the area statement on the left-hand side of the rule to reduce the slice of the cube that the rule applies to.


2.  Simplify the comparison

Now that we simplified the rule, the next step would be to try to simplify the condition inside the IF statement.

Numeric comparison is generally much faster than string comparison, and the length of the text will also have an impact on the comparison:

The example above just confirmed some common practices in most programming languages. This is not TM1 specific but the same in any ‘language’.

String comparison, even if it is one character, if that character is the same there is a second comparison to see if the end of the string is reached whereas a numeric comparison is just a single comparison operation. The last one has no comparison at all which, as in any language, would explain the difference in execution time.

Actually, in TM1 what takes most of the time when comparing values is not the comparison itself but the function used to return the value used inside the comparison.

Let’s now have a look at these functions. We are going to start by comparing ATTRN, ATTRS and SUBST. These three functions are probably the most popular functions when you want to limit the rule to a subset of elements of one dimension.

We’ve found out that the ATTRS function is faster than ATTRN even though the first one requires a string comparison. The SUBST function which returns a sub-string of the element is 75% faster than ATTRN!

The difference between the 3rd and 4th is that the SUBST function is a “starts-with” operation and therefore incurs extra overhead whereas the 4th is a simple element name equals operations.


3.  Replace ATTR functions with DB

Using the ATTRS(dimension, element, attribute) or ATTRN(dimension, element, attribute) function looks like the more logic way to get an attribute value, but actually it is much slower than getting the value directly from the }ElementAttributes_ cube using the DB function, DB('}ElementAttributes_Dimension', !Dimension, attribute). On average in our environment, we have found out that the DB function is 70% faster:

Even though ATTR and DB will retrieve the same value of the attribute, it is important to be aware of the differences between these functions:

  • ATTRN will return a numeric value, ATTRS will return a string value, DB can return either string or numeric value.

  • Using ATTRS to return an alias will return either the alias value or the principle name if the alias is not populated. Using DB will only return alias when the alias is populated in the }ElementAttributes_ cube.


4.  Replace DB with DIMIX

To compare two elements between each other, especially when working with dates, you could either use the DIMIX(dimension, element) function to get the index number or get the value from an attribute.

Even though it is a rare use-case, using the DIMIX function can reduce by 50% the evaluation time of the rule:

* You should use the DIMIX function with care, use it only when you can guarantee the index of the element in the natural order of the elements in the dimension won’t change.


5.  Dimension relationship functions (ELPAR, ELISPOAT, ELISANC) are faster than DB on small dimensions


 A common requirement when writing a rule is to determine if an element is part of a group or a specific parent. To find out if one element is the child of one parent, you could use any of the following:

During our tests, ELISPAR and ELISCOMP take around the same time to calculate, it is ELPAR which is 60 % faster:

ELISPAR is an iterator over the collection of parents of checking each and every one of them if they happen to be ‘Total P’ whereas in the ELPAR case, it is only checking if the first of the parents of ‘N Element’ is equal to ‘Total P’.

Although there is some overhead to ‘iterating’ vs retrieving a single element, the difference is proportional to the number of parents. The deeper your hierarchy is, the bigger the variance will be between ELISPAR and ELPAR.


Another way to find out if an element belongs to a specific parent is to create an attribute and using DB to evaluate that attribute value. Alternatively, create a rollup using the value and making the element a member of the rollup.

For small dimensions with less than 100,000 elements, the ELPAR function is 60% faster than DB.

However, in our environment with dimensions with more than 100,000 elements, the DB function will start to be faster by more than 10%.

The gain on performance is correlated with the dimension size, the gain will be bigger when the size and complexity grow.


To find out if element2 is an ancestor of element1, you could either use the ELISANC(dimension, element1, element2)  function or an attribute value with the DB function as above. In our cube, the ELISANC function is 40% faster on small dimensions:

However, on large dimensions, the DB function will be faster by 12% in our environment:


6.  Replace DB with [‘element’]

When referring to another relative data-point in the same cube the rule can be expressed two ways:

  • The short form is qualifying only the element(s) that are different in the left-hand side of the rule; [ ‘element’].

  • The long form DB statement can be used to explicit reference all the dimension of the cube. Use combination of !bang and qualified elements to reference the other part of the cube.

Using the short form is 40% faster than the DB function. The performance difference will vary based on number of dimensions in the cube vs number of elements specified in the short form.

There is simply less overhead to the short form as TM1 only retrieves or overwrites the elements specified in the ‘current cursor’ whereas DB builds a completely new ‘cursor’ identifying a cell. The performance difference will vary based on the number of dimensions in the cube vs the number of elements specified in the short form.


7.   Replace [‘element’] with [‘dimension’:’element’]

In an area statement, TM1 will require you to specify the dimension name in the statement only if there is an element with the same name in more than one dimension. Specifying the dimension name can decrease the evaluation time of the rule by 10%:

Including the dimension reference is faster because this constrains the element search to a single dimension instead of searching over all dimensions.

For small cubes, there may be no real gain but for cubes with many dimensions, or cubes with few really large dimensions then the gain can be significant as TM1 doesn't have to search all dimensions in the cube for the element.

Especially for cubes with very big dimensions it is recommended to always qualify the dimension. A nice side effect is that qualifying the dimension improves the readability of the rule.



The }StatsbyRule cube is a very powerful feature, it enables developers to test different rule expressions to achieve better performance.

It is important to keep in mind that the performance gain depends on many factors such as IBM Planning Analytics version, cubes sizes, dimensions sizes, dimensions order… that is why you might not get the same results in different environments.

One of the reasons business users love TM1, is because they can easily understand what they see. Even though simplifying the rule is likely to improve the performance, it is important to keep in mind that a TM1 developer should write rules for the end-user that balances these three core principles:

  • Design for Functionality: The solution must fulfill its design intent, make the solution intuitive.

  • Design for Maintainability: Think beyond the immediate requirements. Adhere to coherent designs standard.

  • Design for Performance: Leverage TM1’s unique strengths, avoid known performance bottlenecks.

Arc v1.7 is now available

Arc, the professional development tool for IBM Planning Analytics and TM1 has just got even better! Arc v1.7 includes 13 new features, 14 enhancements and 16 fixes.

Cube Viewer, Dimension Editor and Subset Editor have been rebuilt

Arc Cube Viewer, Dimension Editor and Subset Editor are using a new grid component which brings a lot of new capabilities such as:

  • Excel like editing features

  • Copy/paste from Excel

  • Sorting of rows by one or more columns

  • Select multiple elements with Ctrl or a range with Shift

  • Drag and drop of elements and lots more.

Area and formula pickers have been added

The Rule Editor has a new area picker and a new formula picker to help with element selection when writing DB formulas. The Process Editor has a new formula picker that allow you to create any CellXXX formulas easily.

MDX and REST API plugins keep your history

The MDX and REST API plugins store all your previous queries in your browser. You can even pin at the top your favourites:

And more…

  • Built for Bedrock 4! Control processes are now displayed as ExecuteProcess in the process editor auto-complete (Ctrl+Space).

  • Fine-grained control of control objects, show just ElementAttribute cubes or Picklist cubes, etc.

  • Snippets are much easier to use, go to the /snippets folder after you install Arc to see some examples.

  • You can save a TI as a template to use as a starting point for new TI processes.

  • A new debugger tab showing all your breakpoints, you can then easily switch them on/off. Arc will stop in child processes as well if a breakpoint is present.

A complete list of all new features, fixes and enhancement can be found in the Arc 1.7 Release Notes:

Try it now!

Arc is free to download and includes a three-month “no strings attached” trial license.

Simply download Arc, double-click on the .exe file… and enjoy the thrill of supercharged TM1 development!

5 hidden gems in Pulse that will change your life

If you’re using Pulse to monitor your IBM TM1 and Planning Analytics applications, this article is for you! Not using Pulse yet? Click here to learn more.

Pulse does so much more than monitoring your IBM TM1 and Planning Analytics applications. In this article you will find the top 5 hidden gems in Pulse that will change your life.

Search among all your objects

The Search box – this is definitely an underutilized feature in Pulse. The search icon is in the top right of the screen (regardless of where you are in Pulse), and can be very handy if you are, for example, looking for all references (Rules, TI, etc.) to a single element, or looking to see which processes reference a particular attribute. Give it a try!


 Find all your rules connections

Rules connections – there are several places you can analyze the rules connections in your model:

  • In the Flow Diagram, the lines between cubes indicate that they are connected via Rules

  • In the Model Spotlight, the box on the right shows “relationships” – the blue items are cube/rules connections, and the green are TI

  • To see the specific rules that are driving that connection, run the Technical Documentation (be sure to check the box that says “include rules information”)—this will show the rule stats for the cube itself, as well as the rule code snippets for each cube connection (look for the “relationships” section by cube once you have created the technical documentation, as shown below)


Monitor TM1 Web activity

Did you know you can monitor your TM1 Web activity using Pulse? Pulse can monitor TM1 Web, Excel and Canvas activity. If Pulse is co-hosted with TM1 Web, you simply need to turn on “Insert Web Logging Script” on the Admin/Configuration page. If TM1 Web is housed on its own server, there are a couple of steps to point Pulse to the TM1 Web location. You can see the instructions here —note that the setup is different depending on which version of TM1/PA you are using.


Run the License Optimization Report

Pulse tells you exactly who is using the application, when are they using it, how often are they using it and the type of user they are (Admin, Read-Only or Write). To run this report you will need to go to the Pulse Thick Client:


Schedule the System Summary Report

Pulse v5.8 introduces a brand-new report, the System Summary Report. This report will help TM1 administrators to monitor the health of their TM1 instances.

This report gathers all the most important Pulse data that you should look at when doing a health check of a TM1 instance such as user sessions, wait time and alerts.

It is recommended to schedule this report so you can keep track of the evolution of your systems.


Arc v1.5 is now available

Arc for TM1, the professional development tool for IBM Planning Analytics and TM1, has just got even better! We’ve been busy adding a host of innovative new features in Arc 1.5 to improve the productivity, efficiency and code quality of professional PA and TM1 developers.


What is new in v1.5


Welcome to Arc Console - the command prompt for TM1 server!

How many times have you wanted to execute just one or two TI commands… without going through all the steps of creating a TI process?

Arc 1.5 now includes a TI Console that enables you to do exactly that, cutting out many non-productive steps and effectively giving you a “command prompt” for TM1 Server.

The new TI Console does much more:

  • Logs all TI execution history for fast and easy pinpointing of errors and bottlenecks

  • Displays the execution time and results from TM1 Server

  • Simplifies the error messages from TM1 Server

  • Enables rapid editing and code correction using Arc’s intelligent Auto-Complete and Snippets features

Modify all TM1 Server configuration parameters

With Arc’s new Configuration tab, you can now see and update all TM1 server parameters. For each parameter, Arc displays the parameter description and a blue Advice icon to provide even more detailed usage and configuration advice:

Dimension re-ordering

Re-ordering cube dimensions can help improve query performance and lower memory consumption of your cubes. With just a few clicks in Arc 1.5 you will be able to see the impact of changing the dimensions order:

“Favourites” for quick access to your highest priority model objects

Design meetings? Sprint reviews? A TM1/PA developer juggles many priorities on a daily, even hourly, basis.

Arc 1.5 can now help you keep track of what you are currently working on.

Adding your current development priorities to the Favourites tab helps you stay focused and quickly resume your workflow after an interruption:

Visualize your model with summary views

Arc includes summary views that organize your model’s dimensions, cubes, processes and chores.

In Arc 1.5, these object views have been improved with colors and filtering options, enabling you to visually identify and navigate the related objects in your model:


and much more…

For our existing Arc 1.x users, we’ve included many other fixes and enhancements in our latest release. A complete list can be found in the Arc 1.5 Release Notes (v1.5.0.md).

Try it now!

Cubewise Arc 1.5. is free to download and includes a three-month “no strings attached” trial license.

Simply download Arc 1.5, double-click on the .exe file… and enjoy the thrill of supercharged TM1 development!

The Return of Web Frameworks

Web frameworks are a good place to get you started on how web development works. They provide reusable code so you don't need to write it each time from scratch. In addition, web frameworks relieve the cross-browser concerns which is indeed very valuable.

Using web frameworks when developing applications will help you build good coding habits. They encourage grid-based design to assist you achieve better readability, flexibility and responsiveness of your application.

In this Episode, you will understand and see what is out of the possible when web frameworks are used to create sophisticated PA/TM1 applications.

Data Science Strikes Back


Data science uses scientific methods such as statistics and mathematics to inform and more importantly provide guidance based on trends, behaviours and analytics of a company’s data. Many organisations are still not embracing the power of Data Science an overlook the fact that it can help them solve many problems by using a broad range of interfaces and techniques available in today’s Data Science world.

From interactive notebooks like Jupyter, instant visualisations like Plotly, forecast models such as Prophet or even using machine learning, the Data Science landscape provides access to the right technology at every stage along the journey.

We have mentioned this before… “having accurate data in your TM1 and Planning Analytics system is just one part of the job, the second part which is even more important is to understand your data. This is where Data Science can help. Data Science will help you to improve how you make decisions by better understanding the past and predicting the future…Read the complete post on Data Science here.

Watch Episode V

We invite you to watch this video and realize the huge potential of combining the best of two worlds, Planning Analytics/TM1 and Data Science.  


Next Episode

Understand and see what it is out of the possible when web frameworks are used to create sophisticated PA/TM1 applications.

  • Canvas for PA/TM1

  • AngularJS and Bootstrap

  • Google maps, SheetJS and much more

A New Hope with the TM1 REST API

Python has recently arisen as a first in class programming language in the development of modern applications as well as data analysis mainly because it requires relatively little time and effort to learn. Its syntax is quite straightforward, and you can practically read it and understand it with very little interpretation. Consequently, developers now tend to focus more on how to solve specific problems or use cases rather than spending time on figuring out the semantics of the language.

The above is no exception within the Planning Analytics world and since the release of the REST API TM1 developers are now starting to embrace Python and TM1py; from loading FX rates from web services to advanced integration with machine learning and forecasting algorithms.

TM1py is a free Python package that wraps the TM1 REST API in a simple to use library and you can get started very easily! Just take a look at our Getting started with TM1py blog for more information.

Watch Episode IV now!

Watch Episode IV now to understand how to use the REST API and Python in order to boost and integrate your TM1 server with lots of new technologies.

Next Episode:

Join this thrilling Episode and realize the huge potential of combining the best of two worlds, Planning Analytics/TM1 and Data Science.

  • Data Integration with TM1py and Jupyter

  • Exploring your data with Pandas and Plotly

  • Demand forecast with Facebook's Prophet

The Revenge of TM1 Web

TM1 Web has been one of the main alternative user interfaces to Excel for planning and forecasting applications even since the release as early as back in 1997. This old friend has allowed business users to deploy web applications that can be easily created in spreadsheets.

TM1 Web has never been better! It now comes in IBM Planning Analytics with a modern look and feel, faster websheet load and scrolling, conditional formatting enhancements and iPad support. TM1web also uses several workspace components giving a seamlessly user experience throughout Planning Analytics.

Quick tips

  • Help your users navigate your system with a low maintenance Menu System.

  • Use TM1 Web font – Helvetica Neue

  • (does not work in Excel – it defaults to Arial)

  • Use conditional formatting in moderation

  • Create data validations with TM1 rules

  • Use a colour theme consistently

  • (e.g. grey to indicate read-only cells)

  • Use Emoji or Webdings for small icons. (✔👍🔼🔽🔄❤🙄⚽🔒🔎🔻)

  • You can use Font Awesome for navigation links

  • Have a clean and consistent layout across all the reports and templates

Watch Episode III now!

We invite you to watch this video to rediscover the amazing power of TM1 Web and how easy it is to create and deploy web application for either planning, analysis and/or reporting.

Next Episode:

Understand how to use the REST API and Python to boost and integrate your TM1 server with lots of new technologies..

  • What is the REST API? and how to use it with Python

  • Handy Python scripts to boost your TM1 system

The Attack of Best Practices for IBM TM1 and Planning Analytics Hierarchies

There have been considerable improvements to the TM1 server in recent years and one of the hot topics that the new Planning Analytics is bringing to the table is the “true” Hierarchies.

Hierarchies are not enabled by default and there is important information about them that you should consider before enabling/turning them on. We have compiled the many aspects of hierarchies and the way they work with rules, TI processes, subsets, attributes, picklists and MDX.

It is important that you read our detailed blog Mastering hierarchies in IBM TM1 and Planning Analytics which will provide you with a better understanding on this new concept.     

Watch Episode II now to see Hierarchies in action and learn how you can implement Best Practices for this all new functionality of Planning Analytics.


Next Episode:

During this third Episode of the saga, you will discover the amazing power of TM1Web and how easy it is to create and deploy web application for either planning, analysis and/or reporting.

  • TM1 Web Beautification

  • How to build a Menu System

  • Exposing TM1web sheets in PAW

The Excel Hell Menace

In the first Episode of the epic webinar saga - MAY TM1 BE WITH YOU, we explore how you can solve some of the issues that can make a great tool like Excel an absolute hell.

The road to Excel Hell is normally paved with good intentions. Almost every firm use Excel for financial reporting but let’s be honest, we have all been there or seen it happening, when a new Excel report is created, your boss loves it and few “easy” suggestions are added to the report.

The report becomes more complex and hence error prone specially if you take into consideration that 9 in 10 Spreadsheets contain errors. Then many people in the company is using the report and the “users” send updates and tweaks, eventually macros and other linked spreadsheets are incorporated but they don’t always work and not everyone is a VBA expert.

In 2013 JP Morgan had a $6 billion USD loss from a copy and paste error.

Several checks and balance reconciliations are also added to avoid errors. Now the report needs twice as long to be produced and it takes every month a whole team to consolidate, update, check, reconcile and distribute. Sounds familiar to you?

You maybe ahead of the curve by already using TM1 and taking the concept of Excel to a robust database level also known as the Functional Database. Yet, you could benefit even more from learning handy tips and best practices on how to effectively leverage TM1’s power through Planning Analytics for Excel (PAx). By using dynamic reports in conjunction with MDX you can solve some of the issues that can make a great tool like Excel an absolute hell.

Tips and best practices

  • "TM1User" identifies which instance is connected.

  • Excel defined ranges allow for more dynamic formulas.

  • Organize your layout for easier maintainability.

  • Centralized parameter cubes to reduce monthly updates (e.g., date).

  • "SUBNM" for selections reduces the reports required.

  • "Format ranges" with Excel "IF" formulas allow for many visual design options.

  • MDX statements for dynamic rows without creating multiple subsets.

  • Action buttons can enhance user experience by triggering refreshing or TI scripts.

Debugging check list

  • TM1RPTTITLE needs to reference existing elements.

  • No error returned in TM1RPTTITLE formula cell does not indicate mistake-free formula.

  • Only use TM1RPTTITLE for "fixed" dimensions, otherwise could still work but performance may suffer.

  • Ensure MDX statement returns values.

  • DBRW formulas should be right of TM1RPTROW cell and needs to reference element in every dimension.

Watch Episode 1 now:

All the above and much more is explained in details in the recording video.


Next episode:

In this exciting second Episode of this webinar saga, you will learn how you can implement Best Practices for the new revolutionary functionality of Planning Analytics known as Hierarchies.


Cubewise CODE Cheatsheet

The idea of the Cubewise CODE Cheatsheet is to gather in one PDF document the most important information that you need to know about all our products. The first page will give ou an overview of all products following by one page summary for Pulse, one for Canvas and the last one for Arc.

Dowload the PDF by clicking on the button below:

Deep dive into certain topics using the information icons which will send you to online articles.

Cheatsheet Summary

The Summary cheatsheet contains one section per products:

Pulse for TM1 Cheatsheet

The Pulse for TM1 cheatsheet is organised as follows:

  • BLACK: Features

  • GREEN: Configuration

  • BLUE: Tips

  • RED: Troubleshooting

  • ORANGE: Learn more

Canvas for TM1 Cheatsheet

The Pulse for TM1 cheatsheet is organised as follows:

  • BLACK: Features

  • GREEN: Configuration

  • BLUE: Tips

  • ORANGE: Learn more

Arc for TM1 Cheatsheet

The Arc for TM1 cheatsheet is organised as follows:

  • BLACK: Features

  • GREEN: Configuration

  • BLUE: Tips

  • DARK BLUE: Plugins

  • ORANGE: Learn more

IBM TM1 and Planning Analytics Cheatsheet

Since the first release of TM1 in 1981 to the latest versions of IBM Planning Analytics, TM1 has gone through a long journey from a niche to a mature product used all around the world to build Planning and Analytics applications.

Using IBM TM1 and Planning Analytics out-of-the box is all that is required to get a fast model but you can so much more by exploring all features.

The idea of this cheatsheet is to gather the most important information that TM1 Administrators, Developers and Users should be aware off to take the most out of IBM TM1 and Planning Analytics.

To download the PDF version, just click the button below (no contact information required):

Deep dive into certain topics using the information icons which will send you to online articles. This cheatsheet includes three pages, one for Administrators, one for Developers and one for Users.

Cheatsheet for TM1 Administrators

The TM1 and Planning Analytics cheatsheet for administrators focuses on installation, configuration and optimisation of your application which is organised as follows:

  • BLACK: General TM1 knowledge

  • GREEN: Configuration

  • BLUE: General IT knowledge

  • RED: Troubleshooting

  • ORANGE: Learn more

Cheatsheet for TM1 Developers

The TM1 and Planning Analytics cheatsheet for developers focuses on design and development of rules and processes which is organised as follows:

  • BLACK: General Knowledge

  • DARK BLUE: Rules

  • GREEN: Processes

  • BLUE: Advanced knowledge

  • ORANGE: Learn more

Cheatsheet for TM1 Users

The TM1 and Planning Analytics cheatsheet for users focuses on objects definition and the different user interfaces which is organised as follows:

  • BLACK: General knowledge

  • BLUE: Web user interfaces

  • GREEN: Excel user interfaces

  • RED: Troubleshooting

  • ORANGE: Learn more

If you think something should or should not be there, just email us at software@cubewise.com.

Learn more:

Continuous improvement of your TM1 and Planning Analytics system

We are seeing a rapid uptake in our Cubewise CODE capabilities as developers scramble to respond to the rapidly changing business environment that they model and operate in.

Every system can use some improvement. Let us share with you in these videos our global experience with the latest technology and best practices for IBM TM1 and Planning Analytics that will help you identify high-impact improvement opportunities.

We will share valuable and actionable information addressing all aspects of the PA/TM1 development process, including modeling, migration and the beautification of your user interfaces, all with the aim of improving your application’s user experience and ROI.

Your hosts:


Guido Tejeda

Senior Software Engineer at Cubewise


Luis Ruicon

Business Development Manager at Cubewise


Chapter 1 - Delivering efficiencies in the TM1 and Planning Analytics process

Guido shares some tips to improve your developments and some examples about how to use Bedrock for TM1:


Chapter 2 - Optimizing your backend system

In this second chapter, Luis goes through the different tools such as Hustle and Pulse which you can use to improve your backend system:


Chapter 3 - Leveraging the TM1 REST API

Everything you should know about the TM1 REST API is explained by Guido in this chapter:


Chapter 4 - Modernizing your TM1 applications

In this video, Luis analyzes on a single model, all the different user interfaces available on the market to create a planning and reporting web application for IBM TM1 and Planning Analytics:


Why it’s Vital to Monitor the Health of your TM1 System

As the data volumes, computational complexity and user community of your TM1 applications grow over time, effectively monitoring the health of your system becomes vital to business continuity. And by “effective”, we don’t mean just in-the-moment, but over time.

Just like a doctor visit, your current weight blood pressure and other health metrics are important, but they must also be compared to a historical baseline in order to be truly meaningful. Sudden increases or decreases in weight provide much more information than what your weight is Right Now.

With TM1, these trends and comparisons could take the following forms:

  • Is my application as responsive as it was before?

  • Does my server take longer to restart or shutdown than before?

  • Are alert events happening with increasing frequency?

  • Is memory consumption increasing, in which cubes, and at what rate?

  • Are the number and duration user sessions increasing or decreasing over time?

  • Is the user experience better or worse than before?

  • Do processes take longer to run?

  • Are certain times of the day more problematic than others?

New in Cubewise Pulse: the System Summary Report

With the new System Summary Report introduced in the latest version of Cubewise Pulse (5.8), IBM TM1 and Planning Analytics administrators have a powerful tool to provide accurate answers to many of these questions. The System Summary Report gathers all key performance indicators such as user sessions, wait time and alerts in a concise one-pager PDF report.

Analysing the Number of Sessions vs Number of Alerts

One of the biggest system management benefits of Pulse is the ability to setup alert conditions for proactive monitoring of your TM1 applications. Pulse alerts can be defined for multiple scenarios, alert conditions and thresholds, including memory use, free disk space, user run time & wait time, TM1 crashes, error logs, message logs, rollback events and many others.

The first graph in the System Summary report displays the correlation betwen number of sessions vs the number of triggered alerts:

This chart allows you to examine cause-and-effect relationships such as:

  • If the user sessions decrease over time

  • If the number of alerts increase each time the number sessions increase 

Analysing Wait Time

In the second section of the Report, administrators will see the Top 10 waiting time event, their duration, and a bar chart to analyse the maximum wait time by period.

Things to consider in this chart:

  • If the wait time is greater than 60 seconds during working hours

  • If the maximum wait time per period increases

Analysing Alerts

The last chart displays the distribution of alerts by type over time:

Things to monitor:

  • If the volume of alerts are increasing

  • If the distribution of the alert types are changing

Automatic Bursting

To make it easy to end this report to your team at pre-defined intervals, Pulse provides a scheduler. For example, you could distribute this report on a weekly basis that includes the last seven days of data.

More information about the Pulse system summary report can be found in the Help article:

Read more:

Cubewise Arc: approved by TM1 developers around the world!

The TM1 Story

IBM Planning Analytics, powered by the TM1 engine, is famous for its speed, scalability and world-class modeling capabilities. Over many years, the TM1 engine has been dramatically improved; with the advent of Arc, TM1 now boasts a modern developer experience befitting its status.

The latest TM1 chapter: Cubewise Arc

Aware of a growing market demand for a modern TM1 developer tool, Cubewise gathered input from its global team of TM1 consultants on what the “ultimate” TM1 developer tool would look like. The result is Cubewise Arc, developed by and for professional TM1 developers.

Arc is now in use in 26 countries

The response to Arc from the global TM1 community has been nothing less than amazing! Only a few months after its official release, the Arc 1.1 trial has been downloaded in 26 countries, often followed by enthusiastic feedback from developers who have discovered its many benefits.

Over 40 TM1 developers have contributed…

… to the Arc project on GitHub.

One of the things that makes Arc special is that it is built by TM1 developers who have invited the entire TM1 community “behind the curtain” of product development.

Cubewise has made our support tickets public on GitHub, and anyone can go to the Cubewise CODE/arc-issues repository and post a bug, ask a question or request a new enhancement.

Among the 100+ TM1 developers already using Arc, 40+ have already contributed, resulting in over 240+ closed tickets:

Try Arc today!

If you are a professional TM1 developer who wants to build applications faster, easier and with higher quality, an Arc download is just a click away at arc-download.

Arc does not require elevated desktop privileges – simply run the arc.exe file and you will be up and running in no-time.

Cubewise looks forward to you joining the growing community of enthusiastic Arc users, and we are eager to hear your feedback!

How to create a Planning Analytics Hierarchy with TurboIntegrator

IBM Planning Analytics (PA) introduced a new layer in the query engine called a Hierarchy.

If you are not familiar with the PA Hierarchies, please read this blog article first: Mastering Hierarchies in IBM TM1 and Planning Analytics

Now that you know what a Hierarchy is and why you would use them (e.g. to make your applications “future-proof”), this article provides a step-by-step guide to building a new hierarchy with a TurboIntegrator process. This article will use Cubewise’s Arc IDE (Integrated Development Environment) to accomplish this, but you will be able to employ these concepts with TI editor in Architect and Planning Analytics Workspace.

New TI functions

To manipulate Hierarchies in TI, IBM Planning Analytics has introduced a set of new TurboIntegrator FunctionsIBM has ensured these new functions are very similar to the TI functions for dimensions, and there is usually a 1-1 corresponding function. For example, you would use HierarchyExists (check if a hierarchy exists) instead of DimensionExists (check if a dimension exists).

If you are using Cubewise Arc, your learning curve for Hierarchies will be easier as all the new Hierarchy functions are available as code snippets in the Arc’s TI editor:

See it in action!

This 5 min video will show you how to build a hierarchy from scratch with a TM1 process:

For more details about how to build a new Hierarchy using a process with Arc, you should have a look at following step-by-step guide:

Try Arc now!

Arc comes with a three-months trial period and there is no installation required. Just download Arc and doublie click on arc.exe file, you will be coding in no-time:

Arc v1.1 is now available to download

After months of development and feedback from customers and consultants all around the world…. Arc v1.1 is now available to download!

The full list of enhancements and fixes can be found in the v1.1.0 release notes on GitHub.

What is new in v1.1:

Manage TM1 security has never been easier

A brand new interface to manage security has been added. It will be now easier and faster to:

  • Search for a specific user or group.

  • Create new user or group.

  • Clone a security group to create a new group with the same security.

Major overhaul of the dimension / hierarchy editor

The Hierarchy editor has been significantly improved:

  • Changes to the hierarchy are now immediate.

  • Delete/Copy/Paste multiple leaf elements at the same time.

  • Copy a list of elements from Excel, Paste into the new element input box and then click Add!

Find/Replace accross all TI code tabs.

Searching or replacing a string in your code happens now accross all tabs (Prolog, Metadata, Data and Epilog). Click on any search result and Arc will bring you to the exact code line:

Execute MDX queries and set expressions

Running and testing MDX queries is fundamental for TM1 developers, especially in a multiple hierarchy world. Arc v1.1 includes a dedicated plugin to run MDX queries on cubes and dimensions:

Run REST API queries

For those working on TM1 REST API applications or building new Arc plugins, running and testing TM1 REST API queries is important, that is why a new plugin dedicated to the TM1 REST API has been added:

Other enhancements:

  • Add a + button to create new object in (Dimensions, Cubes, Processes, Chores). #192

  • Subset Editor window size depends now on the screen size. #181

  • In Prolog tab, the search capability has been added to data source drop downs. #165

  • Add Keyboard Shortcut to run a TI. #145

  • Add support for Dynamic SQL Queries during Preview. #128

  • Overwrite a cube if already existing. #123

  • Hierarchy editor, expand button only expand first children. #105

  • Add refresh available dimensions button to create cube dialog. #5

Follow us on GitHub

We want to involve the TM1 comunity as much as possible in Arc developments so we decided to show publicly all our tickets on GitHub. On the arc-issue repository, you can see all the opened tickets and what's coming in the future. If you have any requests, feel free to create an issue on the arc-issue repository.

Try it now!

Arc comes with a three-month trial period and there is no installation required. Just download Arc and double click on arc.exe file, you will be coding in no-time:

Happy coding!

Mastering hierarchies in IBM TM1 and Planning Analytics

With IBM TM1 10.2.2 end of support coming in September 2019 now is an ideal time to consider upgrading to IBM Planning Analytics.

Before upgrading, an important consideration is whether or not to incorporate Planning Analytics’ new Hierarchy feature into your applications. There are many aspects to this decision, so the objective of this article is to give you enough information to be able to answer this question:

Hierarchies vs Roll-ups

Let’s begin by answering this question: “What is a Hierarchy?” 

Until the arrival of Planning Analytics, what was commonly called a “hierarchy” in TM1 was simply a specific roll-up of C and N level elements in a dimension. For example, in a “Period” dimension, the same N-level elements could roll up to multiple C-level elements, with the roll-ups having names like “Full Year” and “Jun YTD”:

Cube Architecture with Hierarchies

TM1’s basic cube structure has not changed since TM1’s invention in 1984: a cube is made of two or more dimensions, a cell’s value is attached to the N-level elements in those dimensions, and each dimension can have multiple consolidation paths that roll up N and C elements. In other words, there was a direct relationship between a dimension and its elements.

Planning Analytics has introduced “real” hierarchies to TM1. Instead of a straight path from a dimension to its elements, there is now the option of inserting an intermediate level. This container object is called a “Hierarchy”, and a dimension can have as many hierarchies as you wish.

By default, the new Hierarchy feature is not turned on – it must be enabled by adding the line EnableNewHierarchyCreation=T in the tm1s.cfg file. When you turn on Hierarchies:

  • An extra level can be added between dimensions and elements in TM1’s object model

  • Dimensions are no longer a container of elements, they are a container of Hierarchies.

  • A default Hierarchy is created, which has the exact same name as the dimension itself (this is to maintain backward compatibility)

  • Each dimension can now have multiple Hierarchies, with each Hierarchy containing its own set of consolidations and can include one or more of the leaf elements that are shared across Hierarchies.

The “before” and “after” of TM1’s object model looks like this:

It might look a bit more complex, but Hierarchies provide greater design flexibility and substantial performance benefits.

Greater flexibility

Hierarchies behave like “virtual dimensions”, enabling you to overcome one of the legacy limitations of TM1 – the need to rebuild cubes to accommodate new analysis dimensions.

Provided the analysis Hierarchy, your application becomes more flexible and agile to accommodate evolving business requirements. Adding a Hierarchy does not require recreating a cube, nor the modification of existing load processes or reports.

Greater performance

A major performance benefit of Hierarchies is that you can reduce the number of dimensions in an analysis cube, and fewer dimensions increases query performance. For every dimension that is removed, at minimum one level is removed from the cube index (the actual number of levels removed depends on the number of N level elements in the dimension). The net impact of a smaller index is that a query will require fewer “passes” to retrieve a cell value, resulting in greater query performance.

However, using Hierarchies in lieu of dimensions will not necessarily reduce memory consumption, as data structures still need to be created whether the alternate rollups exist within a single dimension or in separate hierarchies.

Hierarchies with Dimensions

Dimensions will still exist but they are not used in the cube, they are only used for establishing the dimension order.

After creating your first Hierarchy, the “Leaves” Hierarchy will be automatically added to the list of available Hierarchies. In the example below, the “Type” Hierarchy has been added to the Department dimension, and three Hierarchies (“Department”, “Leaves” and “Type”) are now available:

Hierarchies with Leaf Elements

Each Hierarchy can have its own leaf elements; when you delete a leaf element from a Hierarchy, the element is not deleted from other hierarchies or the Leaves Hierarchy. What this means is that data is still stored for this element in the underlying cubes.
If you want to delete a leaf element and delete the data in the cube (i.e. TM1’s traditional behaviour), you must delete it from the Leaves Hierarchy. This will delete the element from all hierarchies, and remove all cube data referenced by the leaf element.

Hierarchies with Processes

To work with Hierarchies in TurboIntegrator (TI), Planning Analytics has introduced a set of new Turbo Integrator FunctionsIBM has ensured these new functions are very similar to the TI functions for dimensions, and there is usually a 1-1 corresponding function. For example, you would use HierarchyExists (check if a Hierarchy exists) instead of DimensionExists (check if a dimension exists).

In the example below, the TI code on the left creates a dimension and on the right it creates a Hierarchy – you can see they are very similar:

Hierarchies with Rules

Working with Hierarchies will make your cube rules a bit more complex, because to reference an element in a Hierarchy, you must use the new “Hierarchy-qualified” syntax, as follows:

  • DimensionName:HierarchyName:ElementName

Note: You would need the DimensionName only if the ElementName is ambiguous.

If you omit the Hierarchy name, the “default” Hierarchy is used, which has the same name as the dimension.

In the example below, you can see two DB calls, the first one without Hierarchy and the second one referencing departments only in the “Type” Hierarchy:

Everything you need to know about working with hierarchies in rules can be found here:

Hierarchies with Attributes

In Planning Analytics, Hierarchies are stored as separate .dim files within the dimension’s “ }hiers” folder in the TM1 Server’s data directory.

Although you can store attribute values for the same named element on different hierarchies, everything is stored in a single }ElementAttributes_ cube. This makes sense since that’s exactly how it works for all the data cubes as well.

Attr functions still work

In processes and rules, "Attr" functions such as AttrS & AttrPutS functions still work for hierarchies, you just need to use DimensionName:HierarchyName for the dimension name instead of simply the dimension name.

For each "Attr" functions, IBM has introduced new functions to cater for hierarchies starting with "ElementAttr", for instance:

  • Attrs -> ElementAttrs

  • AttrPuts -> ElementAttrPuts

  • AttrInsert -> ElementAttrInsert

These new functions behave the same as the old ones with some slightly changes as you can see below:

AttrInsert vs ElementAttrInsert

To create a new attribute on a Hierarchy only, you should use the new function ElementAttrInsert instead of AttrInsert so the syntax will look like this:

  • ElementAttrInsert(cDimSrc, cHierarchy, '', cAlias, 'A');

Instead of 

  • AttrInsert(cDimSrc | ':' | cHierarchy, '', cAlias, 'A');

The ElementAttrInsert will avoid duplicate alias on one consolidation which appears in two hierarchies of the same dimension.

Hierarchies with Subsets

With hierarchies, Subsets are not attached to a dimension but to a Hierarchy, if you are using IBM’s PAX, or Cubewise Arc, you will see the Subsets attached to Hierarchies.

If you do not specify a Hierarchy when creating subset, it will be added to all existing Hierarchies in the dimension.

Hierarchies with Picklists

The syntax of Picklists is also impacted by Hierarchies.

As you might expect by now, the syntax for subsets must also be “hierarchy-qualified”, so instead of SUBSET:Dimname:Subname you must specify SUBSET:Dimname\:Hierarchy:Subname

i.e. replace subset:Entity:FE – Division with subset:Entity\:Entity:FE – Division

Hierarchies with MDX

To reference an element in a Hierarchy in MDX, you must specify the Hierarchy name in your query, for example, instead of [Time].[2018] you will need to use [Time].[Time].[2018] to specify element “2018” from the default Hierarchy (remember, the default Hierarchy has the exact same name as its containing dimension).

Named levels and default members

One of the advantages of using the cube viewer in PAx or Arc versus Perspectives is that you will not need to specify a selection for all dimensions to retrieve cube values. In fact, selecting even a single dimension in a cube view will result in some cube values being retrieved.

This is because for all the other dimensions not referenced in the cube view, TM1 will use the dimension’s default member. To define default members, you will need to specify the defaultMember value in the }HierarchyProperties cube:

If the defaultMember doesn’t exist in the }HierarchyProperties cube the first element will be used (via index order).

It should be noted that in this cube view, hierarchies are treated as “virtual” dimensions (Time, Time:Fiscal Year, Time Half Year…). If you use levels in PAx or Cognos Analytics, this is where you will define them. To apply the changes, you must run the RefreshMdxHierarchy process function.

Hierarchies with Reporting

Currently with Planning Analytics v2.0.5, the main weakness of Hierarchy is on the reporting side. Unfortunately, the DBR function in Active Forms does not support hierarchies. If you are a heavy user of Active Form, it might be challenging to reproduce your Active Forms using hierarchies.

Alternatives to PAX Active Forms are:

  • Cognos Analytics – this is a good option for read-only reporting, as Cognos Analytics fully supports MDX and the new Hierarchy structure.

  • If you need both read and write capability (i.e. planning + reporting), Cubewise Canvas is a great solution, as the DBR in Canvas supports hierarchies.

Should I implement hierarchies?

As you might have guessed, the answer is “it depends”.

By using Hierarchies, you will gain in performance and flexibility, but you possibly lose some Excel reporting capabilities if you are a heavy user of Active Forms.

If you think you can reproduce your Active Forms with PAX’s Exploration Mode without using DBRs, or you do not need Excel-based reports at all, then it is a definite “yes” to implement Hierarchies.

Re-architecting your applications to take advantage of the new Hierarchy capability will require some time and effort, but it is an investment that will pay off in the long, as your solutions will become nearly “future-proof” in accommodating evolving business requirements.


Canvas 3 Released

canvas 3.png

Canvas 2 was already a big step forward by making Canvas way faster and bringing a lot of new features such as reports bursting. Thanks to feedback from all our customers, this new version brings Canvas much further by adding two desired components - a whole new Cube Viewer and Subset Editor.

Cube Viewer

The new Canvas Cube Viewer will offer greater flexibility to your users and fasten developments. It fully supports all IBM Planning Analytics features such as hierarchies and sandbox. What is more is that you are free to customize the look, the way you like.

Subset Editor

Canvas already had lots of different ways to facilitate user selections with dropdown, radio-buttons, date picker... now with the Subset Editor, your users will be able to use all common TM1 and Planning Analytics filter features such as filter by level, attributes, string. This Subset Editor is also highly customisable.


Canvas now supports sandbox. Creating, Publishing, Discarding and Deleting sandboxes is now very easy to do in your Canvas application. The DBRs support sandboxes as well so you can now compare different sandboxes by just referencing two different sandboxes to two different DBRs.

New samples

A whole new sample application has been added. This new application is a great way to learn how you can customize all Canvas look and feel following the standard practices.

Introducing Apliqo UX

If you are looking for Out-of-the-box solution,  check out Apliqo UX. The Apliqo team has built an App-Builder on top of Canvas with lots of ready-to-use components. With Apliqo UX you get the power and freedom of Canvas combined with the ease of drag-and-dropping.


Optimizing your TM1 and Planning Analytics server for Performance

The combination of in-memory calculation, amazing design and years of optimization have resulted in IBM TM1 and Planning Analytics being renowned as one of the fastest real-time analytical engines on the market. The default settings you get "out of the box" is all that is required to have a fast TM1 model. This article focuses on taking it a step further using the many parameters (over 100) which allow you to tune your system to get maximum performance of your TM1/Planning Analytics server. 



Multi-threaded querying allows you to enable multiple cores to conduct queries. This feature will provide you with significant performance improvements, especially for large queries with lot of consolidations. An optimal number of cores (sweat spot) needs to be established to achieve the maximum performance. Ensure you conduct various tests to find the “sweet spot” and maximize the performance. Be cautious to not exceed your licensing arrangements. Basically, ensure you have enough PVU licenses:



MTFeeders is a new parameter from Planning Analytics (TM1 server v11). By turning on this new parameter in tm1s.cfg, MTQ will be then triggered when recalculating feeders:

  • CubeProcessFeeders() is triggered from a TM1 process.

  • A feeder statement is updated in the rules.

  • Construction of feeders at startup.

MTFeeders will provide you significant improvement but you need to be aware that it does not support conditional feeders. If you are using conditional feeders where the condition clause contains a fed value, you have to turn it off.

To turn on MTFeeders during server start-up you will need to add MTFeeders.AtStartup=T.


ParallelInteraction (TM1 only)

This feature is turned on but default in Planning Analytics (TM1 11+), you need to set it to true only if you are still using TM1 10.2.

Parallel interaction allows for greater concurrency of read and write operations on the same cube objects. It can be crucial for optimizing lengthy data load processes. Instead of loading all data sequentially, you could load all months at the same time which is called Parallel loading.  Parallel loading will allow you to segment your data and subsequently leverage multiple cores to simultaneously load the data into cubes.

To manage the threads and to keep the number of threads under the number of cores, we recommend you to use a free utility, Hustle.



This parameter impacts only the start-up time of your PA/TM1 instance. It specifies whether the cube and feeder calculation phases of the server loading are multi-threaded, so multiple processes can be used in parallel. You will need to specify the number of cores that you would like to dedicate to cube loading and feeder processing.

Particularly useful if you have many large cubes and there is an imperative to improve performance upon server start-up. It is recommended that you specify the maximum amount of cores – 1.

Similar as for MTQ, to find the optimal number of cores which will provide optimal performance you will need to test multiple scenarios.

However if you are using Planning Analytics, you should use the new parameter MTCubeLoad instead. More information on this in this article:



Persistent Feeders allows you to improve the loading of cubes with feeders, which will also improve the server start-up time. When you active persistent feeders, it will create a .feeders file for each cube that has rules. Upon server startup the tm1 server will reference the .feeders files and will re-load the feeders for cubes.

It is best practice to activate persistent feeders if you have large cubes which have an extensive number of fed cells.

In many cases start-up time can be significantly reduced, examples of a 80-90% reduction are common.

Things to look out for

  • Feeders are saved to the .feeders file. Therefore, even if you remove a particular feeder from the rule file it will remain in the .feeders file. You will need to delete the .feeders file and allow TM1 to re-generate the file.

  • If you have dynamic rules or consolidated elements on the right-hand side, you will need to use the function reprocess feeders if you choose to add a new version for instance.

  • Although this is a greater feature, judgement is required on when to use it. For instance, if your cubes are small and don’t have much rules/feeders it may be more beneficial to leave this off.


Other parameters which will improve user experience

  • AllRuleCalcStargateOptimization can improve performance in calculating views that contain only rule-calculated consolidations.

  • UseStargateForRules By default when retrieving a calculated cell, the value will be retrieved from a stargate view stored in memory, in some unique instances using a stargate view can be slower than requesting the value from the server, so you can turn off Stargate views for rules by using UseStargateForRules=F.

  • ViewConsolidationOptimization enables or disables view consolidation optimization. It increases the performance but increases the amount of memory required for a given view.

  • CalculationThresholdForStorage: The number of cells needed as minimum before stargate view creation is triggered. Set to a low number to maximize caching but increase memory.

  • MaximumViewSize: if the view memory when accessing this view reaches the threshold it will abort view construction rather than client waiting forever the view.

  • CheckFeedersMaximumCells: if a user tries to check feeders in the cube viewer from cell that is too many cells in the consolidation it will refuse, rather than a very long client hang or eventual crash.

  • MaximumUserSandboxSize: Stop server using excessive memory in case users try to do very large sandbox changes

  • LogReleaseLineCount: If admins are doing transaction log queries this stops users getting locked for a long time.

  • StartupChores: A stargate view is created the first time a user opens the view. If a second a user open the same view, it will be faster because the view would have already been cached. To avoid the first user to wait a bit more, you could set up a chore which ran when the server starts to cache views then this could give users better performance.

  • SubsetElementBreatherCount: Allows lock on subset to be released when there are other requests pending

  • UseLocalCopiesForPublicDynamicSubsets: Improve performance by not invalidating and causing write lock of the public dynamic subset just the user’s local copy.

  • JobQueuing: Turns on queuing for Personal Workspace or Sandbox submissions.

  • JobQueueThreadPoolSize: Job queue is specific for using contributor/application web which uses sandbox by default. It manages all user sandbox commits into a job queue so users don’t wait.

It is important to be aware that all the parameters in the tm1s.cfg file are now dynamic in IBM Planning Analytics, meaning they can be changed with immediate effect.