Why I created a blog

Its been four years since I first created this blog. It has remained true to Essbase and related information over those years. Hopefully it has answered questions and given you insight over those years. I will continue to provide my observations and comments on the ever changing world of EPM. Don't be surprised if the scope of the blog changes and brings in other Hyperion topics.

Monday, May 11, 2015

ASO calculation bug

UPDATE

Note, It funny how things work out. While I’ve not tested it out yet, a patch set update (PSU) 20859535 appeared today  after I created this post.

Defect Number Defect Fixed
20806331

MDX formulas are not calculating correctly for parent members of the accounts dimension, which are tagged with time balance properties and compression, in an ASO cube where the parent has more than one child.

This is the bug I reported last month.So it appears it might be fixed. I just have to now test it.

Glenn 5/11/15

I am a creature of habit. I have done the same calculation to put YTD net income into Retained earnings in too many cubes to count. In My ASO cubes, I know that I have to set the solve order higher  than normal for the ancestors of my calculated retained earning  member to get it to roll up properly. and it has always worked.That is until now. I’m working on 11.1.2.3.502 and have run into an interesting issue.

My retained earnings calculation works if I am at individual periods, but does not work if I’m at total Periods. In addition, it works if I am at the single stored member of my View dimension  but not if I expand the View dimension. The stored member value actually changes.  In tracing through the issue, It appears the formula for retained earnings is not firing when I’m at Total Year or when I have multiple member of my dynamic View dimension.

. I was able to find a work around. Instead of allowing the parent of my retained earnings calculation be a natural rollup, I forced it to be a calculated formulaic member that adds up its children. That apparently is enough to force the calculation to occur and it properly rolls up to all of the ancestors.

image

I don’t particularly like this solution as it means that If the users add a new account then the formula has to be changed as opposed to the hierarchy rolling up correctly.

This is also part of a bigger issue. During my testing of formulas in a “View” dimension, I had issues where the formula would not work at a parent account level, but would at the child level. Oracle has confirmed this bug and I was able to get around it by setting the Accounts dimension as a default higher solver order.

Again while this works, IT is different from every other earlier version. My advice is if you upgrade check your calculations very carefully across all of your dynamically calculated dimensions. Don’t assume things will work hunky Dory.

Thursday, March 19, 2015

A quick tip for Dataexport

I love the dataexport function in calc scripts. I tend to use it a lot for both writing data to flat files and to relational databases. I’ve written multiple blog posts on it.

Today, I got an email from a fellow consultant who was having problems with it and needed help.  It took me a few emails back and forth, but I was able to help them. I decided to post it so we all don’t run into the same issue.

The original email was

“There is a sparse dimension that is dynamically calculated in an app.

I want to export a parent which is dynamically calculated, but even when setting the data export with DataExportDynamicCalc ON;  it still exports the level 0 for that dimension. “ If I change that dimension to Dense, then it exports what I want, the parent.  I even fix on that parent member but it still exports level 0 of that parent.”

I first responded asking if the member name was explicitly in the Fix Statement and if SET DataExportLevel ALL; was set.  I was assured it was. I was sent the whole calc and it looked good.

SET DATAEXPORTOPTIONS

{   DATAEXPORTCOLFORMAT ON;
  DataExportDynamicCalc ON;
  DataExportLevel ALL;
  DataExportColHeader "Period";
  DataExportOverwriteFile ON; };

/*EBIT*/

FIX ("1st Pass","Final","Budget", "Actual","FY15", @relative("YearTotal",0),

  "EBIT",
     "ALY","SAP CC 1000","760","U-ctID","NZU72200",@RELATIVE("Cost Category",0))

     DATAEXPORT "File" "," "TESTENABLE.TXT";

ENDFIX;

I was about to write back that that I was stumped and remembered something they said that I skimmed over the first time.  “If I change that dimension to Dense, then it exports what I want”

Hmmmm. I started to think about the difference between dense and spares dimensions and how Essbase works. It worked on a dense dimension. OK, So it pulls in the block and can calculate the dynamic members. OK, that is reasonable.

A sparse dimension. Wait a second, there is no block for a dynamically calculated member. In this case, the block is calculated upon retrieval. By default, the fix would bypass empty blocks.  I looked at the set statement again and it hit me. There was no statement for emptyblocks. I remember it because I always include it and turn it off in my scripts so I know it is off for sure.   I knew there was on and looked it up in the tech reference. SET  DataExportNonExistingBlocks ON|OFF

The tech reference describes this function as:

Specifies whether to export data from all possible data blocks. For large outlines with a large number of members in sparse dimensions, the number of potential data blocks can be very high. Exporting Dynamic Calc members from all possible blocks can significantly impact performance.

again hmmmm. All possible blocks.  I had the consultant add this to their extract set it to ON and try it. I did warn them this could be slow, but they told me it was a small outline.

Lo and behold it worked like a champ. IT is a valuable lesson. With us typically wanting to improve performance we turn things on and off without even thinking about it. Sometimes we have to go back and reevaluate our options.

Monday, March 2, 2015

We all need to thank Applied OLAP

I typically don’t single out a person or company in my blog, but am doing so today. Tim Tow, Oracle Ace Director, Owner of Applied OLAP, Essbase friend and evangelist, on his blog announce the release of newest version of the Next generation Outline extractor .

Why the big deal? Why am I praising him? First, Tim maintains the code for his love of Essbase, he makes no money from it. Second, it cost him money. Time taken from billable work to make changes is a cost, plus, he has his help desk support people assist anyone with a problem again at no cost.

That is all well and good, but the final thing is his responsiveness in improving the product. I emailed Tim on a Wednesday asking about missing features of the relational extract. Tim and I exchanged a few emails about what I would like to see and how I thought it should work.  By Sunday, I had a beta version of extractor with all I asked for and more.  I know from Tim’s questions that I was not getting work he had already planned, but that he had modified the product for me.  After my testing the changes (I found no bugs), he has released it to the Essbase world.

We all need to tank Tim and Applied OLAP for their continued support of the Hyperion community. I don’t work for Tim, but do think his products are awesome. It is nice that he puts as much care into the free products he supports as he does for his fantastic Dodeca product.

Friday, February 13, 2015

FixParallel–How fast is fast?

Addendum to this blog post.

I lied, I lied, but not intentionally. When I wrote this post, I thought it was true and the timings were as I saw them, but upon further investigation, It turns out I had encountered a bug with FixParallel where including the set DataExportRelationalFile  on causes some problem with data exports using FixParallel.  The export only returned data for one node of the hierarchy not the entire hierarchy as it should have.  Unfortunately, I don’t have access to rerun the tests again. This issue was fixed in 11.1.2.4 and I think a patch for 11.1.2.3.5X that had not been installed on the system I was using. I’m guessing the performance will still be faster than without it, but can’t give you correct numbers

Sorry if I misled you

*****************************************************************************

I have finally been able to use FixParallel introduced in 11.1.2.3.500 on an Exalytics server. I’ve used it for for calculations and dataexports, so how fast is it and does it really make a difference?

For my allocations calculations, I really can’t tell you how much of a difference it made, but I know it was a lot faster to do my allocations with FixParalled than without it. I just didn’t capture the times.

For my DataExport, I was able to measure the difference.  I was exporting 1083702 level 0 blocks in column format with a block size of 9984b. I created a Dataexport calc script and set CalcParallel to16 in the script. Running it took 336.95 seconds. I thought that was reasonable, but I wanted better.

I changed the script to use FixParallel using 16 threads across my location dimension which has abut 800 members. The calculation took 9.94 seconds. If I multiply out that number by 16 I come up with 159.04 seconds so it it telling me the FixParrallel calculation is improving performance more than just the parallelization of the script.

What I did not expect is; just like ParallelExport, the FixParallel dataexport created a file for each thread, so instead of one file I ended up with 15. They were named with a suffix of _T? where ? was a number between 1 and 15.  (not sure why I didn’t have 16 files).  I also don’t know what would happen f the file size spanned 2 gig. Would it append a _1 to the file name? I tried reducing the number of threads  to 3 and reran the script. Alas, I ended up with only three files so I can’t give you an answer. But interestingly the script took 690.63 seconds, much longer that the script without FixParallel, so apparently there it tuning we can do to the script.  I could try including another dimension in my FixParallel, but am happy with my less than 10 second export. Perhaps a test for another day.

So is FixParallel worth it, my testing says YES! FixParallel for me was an awesome new feature and one I will use often.

Everything must come to an end

I finally got my new laptop after having a loaner for over a month so I can now resume blogging (at least more easily).  I’ve been excited about all of the new features and functionality of Essbase 11.1.2.4 and there has bee a flurry of blogs that have described that functionality. Today, Tim Tow posted one feature going away the VB API.   There are a number of other features that you might not be aware of as either completely gone or depreciated so they won’t be supported in the future.

So first what is already gone?

  1. Essbase Native Security. Shared services should be used to manage and maintain users.
  2. Essbase Integration Services. The writing has been on the wall for this for a while with Essbase Studio taking its place, there is little need to duplicate functionality. Of course along with this goes Hybrid analysis.
  3. VB API (Time talks about that in his blog)
  4. A number of Configuration file (Essbase.cfg) settings. I believe the functionality has been built into the base product so these are no longer needed.
      • PRELOADALIASNAMESPACE

      • PRELOADMEMBERNAMESPACE

      • PRELOADUDANAMESPACE

      • MAXACTIVEUPDATETRANSACTIONS

      • MAXTOTALACTIVETRANSACTIONS

So what is depreciated (This means not recommend for use and will most likely go away completely in the next release)

  1. Direct I/O Can’t say I’m sorry to see this go. I’ve never had an implementation where it was advantageous to use it and it always seemed to be buggy.
  2. Outline change log. While not widely used I do have some clients that use this for SOX compliance so the auditors can track who made outline changes and when. I’m hoping a new method for tracking this will be forthcoming.
  3. Currency Conversion applications and Currency partitions. I don’t know anyone who used currency applications. Most consultants I know build it themselves within the primary cube. That said, Oracle announced at Open World last September that they are working on incorporating more HFM like financial functionality into Essbase, so I would expect to see a new method for currency conversion to appear at some point.
  4. Data compression types ZLIB and None. Don’t know anyone who used them. I guess it means a certification test question will need to be updated. Really since Essbase already figures out what compression a block should use, these are outdated.
  5. Linked Partitions. While a great idea, no one uses them (ok I have one client that implemented them, but doesn’t really use them)
  6. the EAS API. again a nice idea to customize EAS, who really needed to do so,
  7. Network File System (NFS) protocol on Network Attached Storage (NAS) devices. Who really cares. I think this was for Windows NT which is long gone.
  8. MaxL statements relating to security. I believe this goes along with all of the other security changes. getting rid of the Essbase.sec file. I will miss this one as I used it as do some clients to automate some security processes. It means I’ll finally have to learn JAVA and use the JAVA Shared Services API to replicate what I did in the past.  These are the commands going away.
    • alter user statement—only the add [to group] and remove [from group] grammar is deprecated

    • create group statement—the entire statement is deprecated

    • create user statement—the entire statement is deprecated

    • display group statement—only the all grammar is deprecated

    • display user statement—only the all grammar is deprecated

    • drop group statement—all grammar is deprecated except for the from security_file grammar

    • drop user statement—all grammar is deprecated except for the from security_file grammar

  9. XOLAP is being limited to Teradata, Netezza and IBM DB2. Really these are where it was being used on higher powered machines so it makes sense.

With all of the great changes occurring in Essbase, I am sure Oracle is getting rid of code that makes the changes difficult or had to be modified or maintained with the changes. As can be seen from the list, Most will have minimal impact on users. If there are any of the depreciated features that are critical to your organization, let Oracle know, They do listen. (If you like you can communicate through me). While they may not keep a feature, they may have other ways coming out to accomplish what you need to do.

 

In closing I say Rest in peace to those items already removed 

 Image result for rest in peace pictures

and for those processes on life support get ready for the plug to be pulled

Tuesday, December 23, 2014

FixParallel–How fast is fast?

I have finally been able to use FixParallel introduced in 11.1.2.3.500 on an Exalytics server. I’ve used it for for calculations and dataexports, so how fast is it and does it really make a difference?

For my allocations calculations, I really can’t tell you how much of a difference it made, but I know it was a lot faster to do my allocations with FixParalled than without it. I just didn’t capture the times.

For my DataExport, I was able to measure the difference.  I was exporting 1083702 level 0 blocks in column format with a block size of 9984b. I created a Dataexport calc script and set CalcParallel to16 in the script. Running it took 336.95 seconds. I thought that was reasonable, but I wanted better.

I changed the script to use FixParallel using 16 threads across my location dimension which has abut 800 members. The calculation took 9.94 seconds. If I multiply out that number by 16 I come up with 159.04 seconds so it it telling me the FixParrallel calculation is improving performance more than just the parallelization of the script.

What I did not expect is; just like ParallelExport, the FixParallel dataexport created a file for each thread, so instead of one file I ended up with 15. They were named with a suffix of _T? where ? was a number between 1 and 15.  (not sure why I didn’t have 16 files).  I also don’t know what would happen f the file size spanned 2 gig. Would it append a _1 to the file name? I tried reducing the number of threads  to 3 and reran the script. Alas, I ended up with only three files so I can’t give you an answer. But interestingly the script took 690.63 seconds, much longer that the script without FixParallel, so apparently there it tuning we can do to the script.  I could try including another dimension in my FixParallel, but am happy with my less than 10 second export. Perhaps a test for another day.

So is FixParallel worth it, my testing says YES! FixParallel for me was an awesome new feature and one I will use often.

Thursday, December 18, 2014

Essbase Config file changes

Throughout time, I have come up with a list of Essbase configuration file settings that I typically use in my implementations. As the versions come out, new settings are added and it appears in the 11.1.2.3.5X versions a bunch of new setting are there, or at least I now noticed them.

Some of the new settings I’ll be adding to my list are

DIMBUILDERRORLIMIT – signifies the number of error rows during a dimension build. This is similar to the DATALOADERRORLIMIT Both has a maximum of 65K rows

ENABLERTSVLOGGING – Logs Run time variable usage in log files

ESTIMATEDHASHSIZE – Specifies in millions the number of member name and aliases loaded in memory for outline maintenance. While I don’t know for sure, I think this is meant to allow up to open really big ASO outlines.

ENABLESWITCHTOBACKUPFILE – enables the automated switching to the backup security log file if the Essbase.sec file gets corrupted. Looks good for automated recovery.

SSINVALIDTEXTDETECTION – Controls if an error is shown when a user enter in text that could cause Essbase to misinterpret the the data. Especially useful for asymmetrical grids.

 

There are a lot more settings that have been added over time. Take time to go back through the tech reference and read each setting. Some have changed like SSPROCROWLIMIT) other have been removed and many more added. Stay current and adjust your systems accordingly. Remember, many settings require a Essbase server restart to take effect.