Want to know The Truth About CPM?

28 April 2014

Limitations in Hybrid BSO Essbase

Before I begin

Lest anyone think that this blog post is Cameron’s Exercise in Whining About Essbase or Cameron’s Gift to Oracle’s Competitors or Cameron’s Act of Cutting His Oracle ACE Director Throat, please note that just about everything I am about to describe below is in the Essbase ReadMe and I encourage you go to check out that oh so useful document to prove that I am not making this up from whole cloth.

This post will consist of a review of what that document means as Dan Pressman and I have tried (and failed) to get round the limitations and in the process discovered a few new surprises both positive and negative.  If you continue on you then have the opportunity to marvel at our stubbornness aka our inability to read, understand, and follow documentation which is both amusing and instructive.  Sometimes that stubbornness results in positive discoveries, so I suppose it isn’t a totally negative behavioral characteristic.  
Or you could just read and absorb the ReadMe and be done with it but then you’d miss the bits we figured out.  

One last preparatory note – we are doing extensive testing with Hybrid to try to figure out the architecture behind Hybrid because we believe that understanding at a high level how Hybrid works is key to the most effective utilization of the tool.  Also, it’s cool to figure things out.  Again, if this sort of thing piques your interest, I encourage you to come to the Evolution or Revolution:  The New Hybrid Essbase Dan and I are giving at Kscope14 where we will be setting ourselves up for ridicule and contempt when Oracle finally publishes how Hybrid works expounding at greater length on what we believe to be Hybrid’s architecture and resulting design good practices.  

The right perspective

The .500 patch is the first release of Hybrid.  In fact it is really a .0 release.  As such, it is not perfect, and Oracle freely admits and documents that in the ReadMe file.  Think of this release of Hybrid as a statement of technology direction and a proof of technological concept.

In that light, what they have done with Hybrid is extraordinary and to be applauded as this functionality will simply revolutionize how BSO databases are designed and utilized.  Yes, it is that important.

At the same time, we are in very early days with Hybrid so please do not read this blog post and walk away thinking, “Hybrid is half-baked, it isn’t good for anything, life isn’t fair, I never got a pony as a child, etc.”  This is the beginning of what I think of as the Hybrid revolution, you are getting in at the ground floor, and it is pretty easy to see where the improvements to Hybrid will be made.  Maybe today Hybrid is right for your applications, maybe it is not; I am willing to bet that as time goes on more and more of your BSO applications will become good candidates for Hybridization until each and every one of them is a Hybrid database.  I told you this is the beginning of the revolution.  

On to the limitations

What happens to a failed Hybrid operation?

Oracle has stressed, and I am reiterating, that Essbase will never return an incorrect value.  By that I mean that if an operation fails the supported-by-Hybrid test, Essbase will revert to Classic BSO operation and will return the correct value.  It may take a looooooooonnnnnngggggggg time to return the value, but return it Essbase will.  Do not be scared of inaccurate data coming out of Hybrid.  

Let’s review the ReadMe

Again, dear Oracle competitors/Oracle Legal, the following is directly from the ReadMe document, so again before anyone gets excited, go read that officially released document.

Unsupported calculations

I am afraid this is going to be a bit disappointing as the list of unsupported functionality is quite comprehensive.  Again, I stress that you consider this list in light of Hybrid being at its very first release.

One more thing to stress (or restress) – when I write “It does not work” that does not mean that Essbase doesn’t return the right value, it means that Hybrid didn’t fire and Classic BSO took over.  However as you have now set your database to calculate dynamically that could mean quite a delay.

I should also note that we only tested the top three but to my mind these are the most important bits of missing functionality.  Through this painful experience, I have learnt to trust the ReadMe so I no longer feel the need to try to prove the documentation wrong.

Cross-dimensional operators

To me this is the big does-not-work feature.  You cannot reference a cross-dimensional operator and use the Hybrid engine.  Dan Pressman and I went round and round and round on this trying some fairly crazy approaches, one of which involved CDFs, MDX, perl, and substitution variables before we finally came to our senses and realized it just didn’t work.  

Time Balance

Yes, that’s right, Time Balance is not available in Hybrid.  I really wanted this one to work and wasted a staggeringly large amount of time trying to get this to work via UDAs, member formulas in an Analytic dimension as you might in ASO, and I think by baying at the moon.  None of it worked.


They just don’t work.  Nope, not at all.  G’wan, try it yourself.  They don’t work, even though they are dynamic sparse calculations which one would sort of think would be right up Hybrid’s alley if you know how ASO handles them.  With luck, they will be coming very soon.

Dynamic calcs with formulas that are targets of transparent partitions

I did not try this one, but I believe Oracle when they say it does not work. Dan did and confirms that this does not (he admits he did not read the ReadMe first and thus continues our near-perfect record of being unable, or at least unwilling, to read and comprehend documentation) work.

Queries with both two-pass and one-pass dynamic calc members from the same dimension




Other things that don’t yet work

These are not in the ReadMe file, but we personally tested these and know that at least in this release, they are not yet there in Hybrid.


The calc script command DATAEXPORT doesn’t work in Hybrid, at least when writing out upper level members.  I didn’t try (or care) about level zero because there wouldn’t be any Hybrid functionality there.  Gary Crisci called this one in an email exchange with me.  And yes, it is super sad, but I have email exchanges about Essbase functionality with people.  Time to get a grip, Cameron.  Or a life.

Report Writer

The Essbase Report Writer, around since the beginning of Essbase is also not supported by Hybrid.

Transparent partitions that have Hybrid sources and Classic targets

One of the many harebrained and unsuccessful attempts Dan and I attempted was to try to push all of those lovely fast dynamic ASO aggregations from a Hybrid source to a Classic target where we thought Classic could then apply its Time Balance, cross-dim, etc., etc., etc. functionality.  There is no joy in Mudville.


To be fair, I didn’t test XWRITE, but for sure XREF doesn’t work and I have to believe where one goes, the other follows.

Top-down formulas

Any formula that fires in top down mode does not work in Hybrid.  Unfortunately, many calculation functions fit this profile.

So what does work?

Rack and stack BSO databases

If this functionality wasn’t there, Hybrid wouldn’t exist.  But it does work, quite well actually, and that is very exciting.


Supported functions


These functions are supported.  

Sparse formulas

So long as the formula references only other members of the same sparse dimension members, Hybrid can fire.  

Dense formulas

So long as the formula references only other members of the same dense dimension members, Hybrid can fire.
One interesting thing to note here – intrablock calculations will, if possible, fire in Hybrid.  Think about what that means – Hybrid is working everywhere, not just for sparse calculations.  And not just at upper levels.  Again, ponder that bit of information because it is fairly earth-shattering.

Sparse to dense/sparse formulas

You cannot use cross dimensional operators, but if your sparse formula references sparse members and dense stored members, the calculation can succeed in Hybrid.  The example the ReadMe gives is as follows:  @MINSRANGE("Stereo","Qtr1":"Qtr2"); which assumes that this is a sparse member formula, Stereo is in a sparse dimension, and that Qtr1 and Qtr2 are stored dense members.

Transparent partitions with Classic BSO source to Hybrid BSO targets

This works quite nicely – hooking this up between a Classic and Hybrid database couldn’t be easier.  And it is fast, just like a Classic BSO to ASO partition.  With this, you no longer need to build two different engine versions of the same database.  This is a significant reduction in build and maintenance effort and a big win.  

NB – Before you try it in a futile attempt to get round the documented functionality of Hybrid by wrapping Classic BSO functionality around Hybrid as we did and as noted above, you cannot xref or transparent partition from a Hybrid source to a Classic target and fire the Hybrid engine; everything will run in Classic BSO mode.  Did I mention that this can be slow?  It is.

Other things that work

MDX as a data extractor

Remember how DATAEXPORT and the Report Writer do not work in Hybrid?  The good news is that MDX queries do use Hybrid so we can extract upper level data in a really fast mode so long as we can parse the output.

If there were any more proof needed to show that Oracle has bet big on MDX (and really, there isn’t), here it is – MDX trumps the Report Writer which has been around since the year dot in Essbase.

Where do we go from here?

The list of limitations is seemingly long and I suspect that it is not complete.  If you are disappointed by this, you shouldn’t be.   Cast your mind back to how limited ASO was when it first came out.  Now think about how powerful and capable it is.  I expect the same functionality improvements to occur in Hybrid.

Oracle have thrown a lifeline to BSO (and yes, you ASO bigots out there, BSO does have quite a few good points) that will, in my opinion, both transform BSO applications and bring the two engines much closer together.  It’s early days with Hybrid and I for one am going to continue to explore what Hybrid can and cannot do.

If this sort of geeky exploration is to your liking, and you want to know more about what Dan and I found, I again encourage you to come to our joint Kscope14 session.

Join us, won’t you?


Dinesh Kumar Ammayappan said...

Thanks a lot for the wonderful information. yeah as you said, this is just a starting and way to go. We can not achieve everything in the first release, but i feel this is one of the great move by Oracle. Once again thanks a lot for providing such a wonderful information

Philip Hulsbosch said...

Cameron, thanks again for this blog and all the information provided.
You were for days (weeks) into the subject, but what I missed is a short description of what the hybrid in BSO is.
I started reading with Hybrid Analysis kind of approach, where we get the lowest levels from an RDBS into Essbase.
Looking in the Readme, I saw it is half BSO half ASO. This also explains a couple of limitations.

Does it support other aggregation than + in the outline?


amarnath said...

I would still bet on ASO rather than going out to the route of Hybrid. It's good to see a mix of both.

1) Rack & Stack
When we say Hybrid (Aggregation power of ASO), if we just have a rack & Stack BSO and do some basic operations like Retrieve, ZoomIn, ZoomOut, Retrieve at all levels and I think ASO would win in this case

2) Dimensions
ASO supports more number of dimensions and members and BSO is still limited in this case including hybrid I guess.

this would be the first move but I still don't get the actual purpose of hybrid

Cameron Lackpour said...


I like to think of Hybrid as a way for BSO databases to have the advantages of ASO databases. Choice is good, right?

Re your first point, I direct you to the ReadMe's statement:
"You are using a transparent partition between an empty aggregate storage target and a block storage source. If the formulas on the aggregate storage target are simple and translatable to block storage formula language, you can achieve fast results on block storage using hybrid aggregation." Could it be that Hybrid is as fast as ASO? Could be.

The second: yes, BSO is still going to be limited (we think) to the 2^104 stored member count of sparse dimensions. OTOH, you wouldn't really have that many stored sparse members. So the database really could be quite big, although I do agree that ASO will trump Hybrid unless Oracle changed something at level of the kernel.

So much of Hybrid actually is ASO, it is a bit difficult to know where one stops and the other starts so these are just guesses on my part.

Lastly, the purpose of Hybrid is to give choice. At least in my opinion.


Cameron Lackpour

P.S. Please don't think because I disagree with your conclusions that I don't value your input. Who knows if I am even a little bit right.

Bill said...

Hi Cameron. I'll send you an email with the details. I think there may be a bug in how Hybrid BSO deals with dataexport commands (at Lev0). My export file(s) do not contain 100% of the data they should. The key is that the results differ each time I run the exports. I've only begun to test this functionality, so I'll re-post if my code is wrong.

Anonymous said...

Hi Cameron,
This is a little late to the party, but you mentioned that Cross-dim operators do not work with essbase hybrid. Is this true when all crossdims are at level 0?


Chava said...

Hi I have one question on limits to the functions
Does it mean that member formula for parent members should not have these functions or does it mean in hierarchy no member either level 0 (Store/Dynamic) or parents should not have these restricted members in the formula

Cameron Lackpour said...


Member parents should not have these functions.

In fact, if you have level zero members with these functions make sure that upper level accounts (or whatever) don't pull those level 0 members through a unary operator because that will result in the Hybrid query processor failing.

If you *do* need that, set the formulas to stored, run a CALC DIM (Account), and then go on your merry way. Fwiw, I haven't written a CALC DIM (Account) in literally years but for the time being at least, it's still needed.



Unknown said...

I am facing one issue in hybrid cube. In account dimension, the proper value is not aggregating at the parent member level though the property has been set to the "dynamic calc". It's aggregating the wrong value. What should be the cause of this issue?
Can anybody please respond? Thanks.

Best Regards,