EPM Groovy – Building a Real-time Dynamic Member Overview Dashboard with EPM Groovy

Dynamic Member creation is one of the cool features of Oracle Planning. Those who understand how Planning interacts with Essbase would much appreciate how helpful this feature is.

This helps to achieve two things:

  1. Let planners create members on their own instead of relying on Admins. Example new projects, new employee etc
  2. Helps to reschedule the database refresh later

How does it work?

The core idea is that if you create a parent member with the dynamic member enabled, it would create an n number of placeholder dynamic children members in Essbase during the immediate database refresh. When a planner creates a dynamic member in Planning, it maps the new member with the placeholder members and uses its memory for all data-related activities. Once the database refresh happens, the logical member will replace the Essbase member, and all dynamic placeholder members would be created again in Essbase for future use

If everything is great, then what’s the problem?

It’s just that you cannot create a lot of placeholder dynamic children members in Essbase. Let’s say if I specify 100 dynamic children members, then it creates 100 members in the Essbase outline, but that impacts the plan types and applications performance. So, we try to keep the number of dynamic members limited. If we keep the number of dynamic members limited, there is a possibility of exceeding the limit, which will cause no creation of new members and that leads to planning limitations. So, finding the optimum number of dynamic children members is super important. Hence I think that monitoring the dynamic members are super important too.

This is not a must-have but a nice-to-have when you want to monitor member creation.

Let’s build the Monitoring Dashboard

I would like to create a dashboard that shows me the number of created members in Planning but that were not synced into Essbase yet. This means the database refresh has not happened. If the refresh occurs, then Planning creates all placeholder dynamic children again, so it should reset back to the total number of placeholder members.

It should give us the full picture of how many members planners can create without doing a full database refresh.

Before building the dashboard, I would like to create a form that shows me the synced and non-synced members in Essbase

Sync Status Form:

Let’s visualize in a dashboard

My parent dynamic member has 10 dynamic children enabled. 3 members have already been created, and planners can create 7 more members without a database refresh

Creating a new Dynamic Member

A new dynamic children is added now. Lets look at the dashboard how it looks.

Lets Refresh the Database

Once the database refresh happens, the newly created members will be pushed to Essbase, and all 10 dynamic children will be available for us to reuse

Lets validate the Sync Status form:

Lets validate the Dashboard:

What is the Role of Groovy?

Groovy helps to identify the members and can be able to differentiate the members present in Essbase or not. This helps us to build the sync status form that provides a comprehensive view.

In the below code, the ExistInEssbase, notSyncedMembers, and getName functions are custom simple functions created by me.

Groovy
Dimension dimension = operation.application.getDimension("Position",rule.cube)
List<String> newMembers = dimension.getEvaluatedMembers('Children("All_New_Positions")', rule.cube).findAll { isExistInEssbase(it) }.collect { getName (it) }

operation.grid.dataCellIterator().each { DataCell cell ->	    	
    cell.data = notSyncedMembers(cell) ? 2 : 1    
    cell.bgColor = notSyncedMembers(cell) ? 0x00BFFF : 0x90EE90
}

Since I am setting the smartlist flag here, I can use this data for my dashboard.

Conclusion

The options here are limitless. We can turn any data into a real-time active dashboard. Let’s say, if required, we can shoot out a note to the support team if the number of remaining dynamic children is very low, and that would help us to proactively maintain zero-downtime application. This was fun creating it. I won’t spend my time building it in my client application unless it’s super important. I hope this information is helpful!

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *