Archive for 11.1.2.4

Troubleshooting connectivity issues between ODI and HFM 11.1.2.4

Posted in 11.1.2.4, HFM, Knowledge Models with tags , , on April 13, 2017 by radk00

Hi all! We are very happy with the feedbacks that we are having about HFM KMs for ODI. People are downloading them and giving them a try, which is awesome! However, we know that this ODI and HFM integration process is not as simple and straight forward as we would like it to be and we generally fall into environment issues to setup the jar files, ODI agent, connect to HFM using the new Java API and so on. In order to make it easier for people to troubleshoot their issues, we are creating this post to hold all known issues that people are having with our KMs and try to help the best we can. We will keep updating it, so please keep checking.

If you have any issues with our KMs usage, please send us an email (devepm@teracorp.com.br) so we may try to help you and all the others that may be facing the same issue. Thanks all!

Error WSSERVLET11: failed to parse runtime descriptor: java.lang.NullPointerException

As we wrote in our blog post, we have two options to setup the necessary HFM Jar files:

1) Install the ODI agent on the HFM server;
2) Copy the necessary jar files to the agent folder;

Some people are getting the above WSSERVLET11 error when performing the first option, which is to install the ODI agent on the HFM server and just point the jar file locations on ODI_ADDITIONAL_CLASSPATH. They change the ODI parameters to point to the right location, but when they start the agent it fails with this error.

We are not sure exactly why it happens, but we suspect that the “absolute file path” gets too big for ODI to handle and then the path gets “truncated” at some point, making ODI to throw this error. Our suggestion is to go with our second approach and add all the jar files to oracledi\agent\drivers folders. If are not sure how to locate the correct jar files, send us an email and we will provide them for you.

Also, if you are not sure if the problem resides on your ODI agent or the Jar files, you may do a test using ODI Local (No Agent) by copying the HFM jar files to C:\Users\\AppData\Roaming\odi\oracledi\userlib (don’t forget to restart the ODI client after that). Then you may try to reverse a HFM model using Local (No Agent). If it works, the Jar files are good to go and your problem resides in the ODI agent itself.

HFMException: EPMHFM-65536

This error is happening when people want to reverse the ODI objects using the new ODI RKM, more specifically when the ODI code tries to connect/get the connection token from your HFM application. EPMHFM-65536 is a very generic error message and can be caused by a number of different factors; ranging from an improper install to application processes crashing.

One of the users (thanks Kevin!) solved his issue with the following:

I needed to copy the file “reg.properties” from Oracle\Middleware\user_projects\config\foundation\11.1.2.0 to path Oracle\Middleware\user_projects\epmsystem1\config\foundation\11.1.2.0 and then the KM is running with success.

This blog post gives some other suggestions for the issue:

https://knowepmbi.wordpress.com/2016/11/03/hfm-error-epmhfm-65536-an-unexpected-error-has-occurred/

Since this error is too generic, each HFM application may have its own kind of fix.

IKM Data Load does not load any data (and does not throw any error either)

One user found a bug where the data interface would run without any error but would not load any data. This happened due to a bug in the RKM that may create the datastore with a wrong column order in some cases. As workaround, please change your HFMData datastore to the following order before loading data to HFM:

HFM_Order

We will work to fix the RKM code to avoid this issue and to create the columns in the correct order.

I get a parse error when I have more than one filter in the interface

We noticed that if you add more than one filter in the ODI interface, the IKM throws a parse error. As a workaround, just group all filter criteria in one single filter component. We will fix the IKM code to avoid this issue and we will let you know once it is released.

Slashes vs Backslashes (Token Parsing Error: Lexical error)

Some people stated that they were getting some errors like this” Token Parsing Error: Lexical error at line 34, column 34.  Encountered: “O” (79), after : “\”C:\\”: “. This error is probably due to the backslashes. All the paths that you add in your KM options needs to be using / (slashes). e.g: C:/Temp/<%=snpRef.getTable(“L”,”TARG_NAME”,”A”)%>_Load.log

Isolate the components to see what may be wrong

We are seeing that generally the errors may happen on the ODI agent (that does not load the Jar files correctly or does not have access to the HFM application) or on the HFM installation installation. In order get it easier to identify where the issue may be happening, it is a good advice to install a Java IDE (like Eclipse) in the HFM server and try to create a small code just to connect to your HFM app. If it connects, then the problem is likely to be in the ODI agent. If it does not connect at all, then you have a problem in you HFM application that is not accepting Java API calls.

Here you may find some examples on Java codes that you may copy from and try to create a sample app:

http://hyperionfinn.blogspot.com.br/2016/09/hfm-java-api-part-1-getting-started.html
http://www.accelatis.com/the-accelatis-blog/dissecting-my-first-hfm-sample-program/
http://www.accelatis.com/the-accelatis-blog/coding-against-the-new-hfm-11-1-2-4-java-api/

Running a simple connect Java code first against your HFM application “eliminates” ODI from the possible points of failure. In other words, if you are not able to connect using standard Java code, ODI will not be able to connect as well.

Thanks all!

Using templates to create dynamic rules in Calcmanager 11.1.2.4

Posted in 11.1.2.4, ACE, BSO, Business Rules, CalcScript, Calculation Manager, Calculation Script, EPM, Essbase, Hacking, Hyperion Essbase, Hyperion Planning, New Features, Oracle, Performance, Templates, Tips and Tricks with tags , , , , , , , , , , , on January 1, 2016 by RZGiampaoli

Hi guys and happy new year!!!

And to start well the new year what’s best then a post?

Today I want to talk about the new version of Calculation manager (11.1.2.4). I know that it is out for a while now but still I think it has some cool features that are not explored.

In all Planning project, sooner or later, we come to a time that we need to create a currency conversion Rule (at least I like to create a custom Rule for performance reasons). Also some companies uses a lot of currencies.

Before continue I need to say that in our case I find out that less code is equal a less performance. What I mean by that is that for the forecast horizon range period for example, instead of use “IF” and test my 15/18 months horizon I triplicate the code using “FIX” and using “SET EMPTYMEMBERSETS ON ;”.

This set command ignores the “FIX” if it returns an empty set. This approach increases the performance a lot, some times more than 8 times (In this currency example, if I ran it at channel level with “IF”, toke 8 hours, with “FIX” takes 1 hours).

Ok that means I rarely use “IF” in my Rules.

Well, you can already imagine the size and row boring and prone error is the Rules if I use only “FIX” right? However, with the “Template” feature in calcmanager and the ability to call any template or rule using a script this nightmare turns in to a dream!

Let us see how it works!

A Currency conversion for forecast applications normally has two parts:

First parts is a period range part.

Second part is the currency conversion itself.

With calcmanager, we can create two template, one for the period and the other for call the currency conversion part.

Then for the Currency conversion calculation, I create a simple core template with just a formula and a script on it:

UDA Loop Template

The “dtp_Quote_UDA”  is a DTP (design time prompt) variable with a function that will insert double quotes in every value that comes from the “dtp_UDA” DTP variable (this will be used to get values from the outside template), this way we can have use just one variable to do two papers, currency name and UDA value. The code is:

@QUOTE([dtp_UDA])

The inside the Currency calculation script we will have:

Currency Script

As we can see inside the script, I used the “dtp_Quote_UDA” as well the “dtp_UDA”. This simplify the amount of parameters I need to pass and the maintenance as well. Let’s think, we need the same information, one with double quotes, for the UDA values and other without quotes, for the Rate name.

With this technic we need to pass just once the value, let’s say BRL, and in the code Calcmanager will replace before the execution in all places, and we’ll have @UDA(Entity,”BRL”) as well HSP_Rate_BRL.

This is awesome because now I have just 8 line of code that will be transformed in any amount of times I want. The best thing is, or everything is right or everything is wrong J

Because calcmanger now we have a layer between the code written and the code generated, and this is pretty cool because opens a huge windows for creativity. You can even generate the entire code dynamically.

Ok, the next step is to loop this template once for each currency we have. For this, I created another template. This one will be used for the Forecast horizon period range as well for loop the currencies.

Period loop template

Again, the code is pretty simple, just  two fixes and one script.

For the “Period FIX” we use two DTP variable to get the value of Year and period from the outside rule ([dtp_Period] and [dtp_Year]).

The product fix is just something related with our architecture and we do not need to bother about it.

Now the “Loop Currency” is a script that will call N number of times our first template. How can we do that with a script?

Basically every time you drag and drop a template inside a rule or to another template behind the graphic design calcmanager generate a command line. This code exists thanks to its API, and you can use it to manipulate and generate almost any kind of code inside calcmanger.

Currency loop template

As we can see, inside the script we have a “Fix” for the USD currency, (that is the only different conversion) and one row for each currency.

Each row is calling a template “%Template(name:=Currency Conversion – 2 – UDA Loop” from an application “application:=”WWOPS””, a plan type, “plantype:=”Pnl””, and is passing two DTS values, one for the UDA and other for the Entity, “dtps:=(“dtp_UDA”:=[[AED]],”dtp_Entity:=[[dtp_Entity]])”.

As you can see, you can pass a DTP variable using the variable itself (dtp_Entity:=[[dtp_Entity]]).

If you want to create this API code and don’t know how to write the right syntax you can just drag your template to a rule/template, set everything and change your view to “Edit Script” or “View Script”.

Edit script

Now we just need to create the rule that will call this template for the three range of periods we have:

Currency rule

Again a simple design with a small amount of components. Here we have our SET commands, a main fix and the three templates, each one calling the previous template for a different period of range.

Period Range

The final result is a Rule with 1213 rows generated from a 8 rows template. This is the magic of calcmanager and templates. You can simplify everything, you can create dynamic aggregations, that will change depending of the application and cube, you can create codes that changes depending of the member that is coming from the forms, everything with small set of code that is reusable anytime we want!

Rule code 1Currency code 2

…….

A dynamic way to build a currency rule in calcmanager. A lot faster to build and a lot easier to maintain, since if a new currency start to be used you just need to copy and paste one line in “Currency Loop” script, change the currency and it’s done.

Build Rules using templates looks more work and some time a little bit complicate but I remember well how much time I expend changing BRs and I can guarantee that this way is much faster and easier to develop and mainly to maintain.

In the end we just create a Rule and two templates that contains just one core calculation, in my case a script calling 47 times this core, some fixes, and that’s all. It was less than 60 rows of written code to generate 1213 rows. Pretty good for me 🙂

Rules ante templates

Hope you guys enjoy and I wish a happy new year for all and you dears ones.

Happy new year!!!! A new year full of surprises!