Category Archives: Answers

Oracle’s support

I saw this post on OTN and decided to take a look:

“I need to create a prototype for the following Pivot Table. I’m putting a view as I would see in Answers.
________ |_______________________________________________
Customer |Some metric (for example Income $)

I’ve been unable to come up with a way to do this in Answers without creating additional columns (such as Income YTD, Income MTD, Income Today, Income Yesterday, etc.). Even with that, I can’t figure out what’s the best way of arranging pivot columns in Answers to create this report. Does Answers allow for mixed granularity like this in pivot?”


“The question was how to transpose various hierarchiecal levels on x-axis? Not homgenous, but different ones. For example, if I dragged columns “Year” and “Qtr” to the Columns section in Pivot I get the following:

What I want is to have it liks this:

It seems as it’s not possible right now. But I’ll be glad if you can correct me”

Someone suggested that this wasn’t possible. Original author suggested using only tab “Measure labels” in Columns. Call appropriate metrics as Q1,Q2,Q3, etc. (use filter for them) – and use them in measures section.”

However, I thought there should be another solution. I’ve contacted metalink and was told that this wasn’t a technical, but implementation issue and as such services of Oracle Services’ were necessary.

So far, i wasn’t able to come up with anything better than using custom columns. This method isn’t ideal – since it’s very cumbersome to implement and would fail relatively easy.

Main challenge is hiding some values in Pivotal columns without affecting aggregate’s total.

I’d welcome any suggestions, since I can’t throw this out of my mind.

Answers request causes BI server to crash

I found an interesting bug in metalink. I wish there were more specifics as to how complex the report was. I just had a similar Assertion error yesterday which I tried to solve by increasing STACK size. However, it seems as it’s possible to crash BI server with longer reports.

When a custom report is executed on Windows the following error is received: –

State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 46036] Internal Assertion: Condition FALSE, file .\NQThreads\SUGThread.cpp, line 515. (HY000)

However, on Linux the OBI Server crashes with this typical Stack Trace from the Core file generated: –

0 0xb427f9b2 in samem_details_800::ThreadAllocator<0>::Allocate
(this=0x86fcd00, Index=2) at threadallocator.cpp:443
443 { (gdb) bt
#0 0xb427f9b2 in samem_details_800::ThreadAllocator<0>::Allocate
(this=0x86fcd00, Index=2) at threadallocator.cpp:443 @ #1 0xb42784df in samem_details_800::ThreadAllocator<0>::allocate
(this=0x86fcd00, nBytes=20, nIndex=2,
pFile=0xb4a171dc “thirdpartysource/STLport-4.5/src/nqnodealloc.cpp”,
nLine=10) at threadallocator.cpp:966
#2 0xb4286098 in samem_details_800::Manager::Allocate (this=0xb429cac0, @ Bytes=20,
pFile=0xb4a171dc “thirdpartysource/STLport-4.5/src/nqnodealloc.cpp”,
nLine=10) at manager.cpp:469
#3 0xb4283dae in samem_800_allocate_dbg (Bytes=20, pFile=0xb4a171dc @ “thirdpartysource/STLport-4.5/src/nqnodealloc.cpp”, nLine=10)
at memoryallocator.cpp:160
#4 0xb49fbfb8 in NQNodeAlloc::allocate (__n=20) at @ thirdpartysource/STLport-4.5/src/nqnodealloc.cpp:10
#5 0xb721a1f3 in _SASSTL::allocator<_SASSTL::_Rb_tree_node
>::allocate (this=0x87f7bac, __n=1)
at thirdparty/include/stlport/stl/_alloc.h:372
#6 0xb721a02e in
_SASSTL::allocator<_SASSTL::_Rb_tree_node > >::allocate @ (this=0x87f7bac, __n=1)
at thirdparty/include/stlport/stl/_alloc.h:514
#7 0xb72198c6 in _SASSTL::_Rb_tree, _SASSTL::less, @ _SASSTL::allocator >::_M_create_node (this=0x87f7bac, @ __x=@0xb0e23264)
at thirdparty/include/stlport/stl/_tree.h:243
#8 0xb673169d in _SASSTL::_Rb_tree, _SASSTL::less, @ _SASSTL::allocator >::_M_insert (this=0x87f7bac, __x_=0x0, @ __y_=0x8d895b8, __v=@0xb0e23264, __w_=0x0)
at thirdparty/include/stlport/stl/_tree.c:366
#9 0xb6730c6d in _SASSTL::_Rb_tree, _SASSTL::less, @ _SASSTL::allocator >::insert_unique (this=0x87f7bac, @ __v=@0xb0e23264)
at thirdparty/include/stlport/stl/_tree.c:412
#10 0xb6730499 in _SASSTL::set, _SASSTL::allocator >::insert @ (
this=0x87f7bac, __x=@0xb0e23264) at
#11 0xb672fe6b in RqNode::AddRqNodePtr (this=0x87f7b88, pRqNodePtr=0x8d999e8)
at server/Query/Optimizer/Request/Src/SQORRqNode.cpp:432
#12 0xb672e34e in SmartRqNodePtr (this=0x8d999e8, rhs=@0x8d995a0) at @ server/Query/Optimizer/Request/Src/SQORRqNode.cpp:55
#13 0xb66a7d17 in RqDerivedColumnReference (this=0x8d999b8, rhs=@0x8d99570, @ bNewIDs=false, bDeepCopy=true)
at server/Query/Optimizer/Request/Src/SQORRqExpr.cpp:1418
#14 0xb66a8898 in RqDerivedColumnReference::DeepCopy (this=0x8d99570, @ bNewIDs=false)
at server/Query/Optimizer/Request/Src/SQORRqExpr.cpp:1525
#15 0xb672e748 in RqNode (this=0x8d977b0, rhs=@0x8d97368, bNewIDs=false, @ bDeepCopy=true)
at server/Query/Optimizer/Request/Src/SQORRqNode.cpp:146
#16 0xb66a0d3c in RqExpr::RqExpr$base () at @ server/include/Query/Optimizer/Request/SQORRqNode.h:77
#17 0xb66d0f68 in RqExprCond::RqExprCond$base () at @ server/include/Query/Optimizer/Request/SQORRqList.h:33
#18 0xb66d6c58 in RqExprCondIsNull (this=0x8d977b0, rhs=@0x8d97368, @ bNewIDs=false, bDeepCopy=true)
at server/Query/Optimizer/Request/Src/SQORRqExprCond.cpp:1299
#19 0xb66d6e88 in RqExprCondIsNull::DeepCopy (this=0x8d97368, bNewIDs=false)
at server/Query/Optimizer/Request/Src/SQORRqExprCond.cpp:1342
#20 0xb672e748 in RqNode (this=0x8d8f878, rhs=@0x8d8f430, bNewIDs=false, @ bDeepCopy=true)
at server/Query/Optimizer/Request/Src/SQORRqNode.cpp:146
It appears that due to the complexity of the Expressions in the Answer Columns of the custom Report, the Expression Builder makes several recursive calls which eventually increases the Stack Size of the Thread until it reaches its maximum and it throws an Asertion Error.

On a Windows environment we have a check of the ‘LowStackCheck’ parameter which is not present in Linux and therefore it crashes the OBI Server giving a ‘sigsegv’ error.

Currently, there is no solution. The workaround is to re-design the report so that the Expressions are less complicated (e.g. Creating Measures that sum up at various combinations of Dimension Levels that allows the Users to avoid creating the complex Formulas in Answers and performs well)

This looks like a major change in the code is required to fix this type of behavior and therefore we will not be able to fix this until at least our 11.x release.

Query Failed: [nQSError: 42043] An external aggregate is found in an outer query

I thought this might be useful for someone struggling with Essbase.

Client was on OBI QF 170 and Oracle’s Hyperion Essbase 9.3.1 and running a report in Answers based on ASOSample Essbase cube which is generating an error.

In Answers Customer has created a report with a measure column (selected twice) which is being filtered with 2 different values using the filter function as below:

Add the 1st column
a. In Answers, Navigate to the Criteria Tab,
b. Select the column “Original Price”
c. On the column, click ‘edit formulae’,
d. in the edit formulae box, click the ‘Filter’ button
e. Insert a filter for the column, by selecting from the selection pane
column “Products”.”Product SKU” = ‘Boomboxes’.
Add the second column
Repeat the above steps a-d
In step e, Insert a filter for the column, by selecting from the selection pane column “Products”.”Product SKU” = ‘DVD’

The report can also be generated by directly entering the following SQL in Advanced Tab
Filter( Sample.”Original Price” using “Products”.”Product SKU” = ‘Boomboxes’ ),Filter( Sample.”Original Price” using “Products”.”Product SKU” = ‘DVD’ )
from ASOSamp

When the report is run the error message that is generated is as below

Query Failed: [nQSError: 42043] An external aggregate is found in an outer query

The MDX generated is

set [Products5] as ‘{[Products].[Boomboxes], [Products].[DVD]}’
set [Axis1Set] as ‘crossjoin ({[Age3]},crossjoin ({[Attribute Calculations2]},crossjoin ({[Geography5]},crossjoin ({[Income Level2]},crossjoin ({[Payment Type2]},crossjoin ({[Products6]},crossjoin ({[Promotions2]},crossjoin ({[Stores4]},crossjoin ({[Time5]},crossjoin ({[Transaction Type2]},{[Years2]}))))))))))’
{[Measures].[Original Price]} on columns,
NON EMPTY {[Axis1Set]} properties ANCESTOR_NAMES, GEN_NUMBER on rows
from [ASOsamp.Sample]

By default in the OBI rpd, the Aggregation rule is set to “External Aggregation”. As per Engineering this needs to be change, so OBI EE knows what those rules are.

Filter By clauses are not supported by MDX (or Essbase), so OBI EE has to perform those internally. If the Aggregation rule is set to “External Aggregation”, then OBI EE doesn’t know what those rules are and hence throws this error.

It is possible to fix the error by doing the below

1. Changing the OBI Aggregation rule in both the Physical and BMM layer to the corresponding rule in Essbase, would stop the error.

2. Alternatively, using OBI Answers filter clauses would allow the BI Server to re-write the MDX to push down the filter to Essbase and may be more efficient anyway.

There was an enhancement raised within Oracle to address this matter in a future release, as the client stated that changing the aggregation rule in the rpd is not a suitable option.

Creating a table view with two levels of headers

This tutorial applies to:Business Intelligence Server Enterprise Edition – Version: [1900] – Release: 10g

The question was rather frequent – “How to create a table view with two levels of headers?”

i.e. the high-level heading as the table title heading and then another level of heading where there is one sub-heading/title for one set of columns and a different sub-heading for another set of columns

The high-level heading can be created by adding a title view for this.

And then for 2nd level of sub-heading that should be different for one set of columns and another sub-heading for another set of columns, you can achieve this by displaying the table headings as well in addition to the column headings and then set the custom table heading appropriately for the respective set of columns that require the same heading.

To do this, you need to follow a 2-step approach
1) go to the table view and edit the table view properties. Set the ‘display column & table headings’ property to ‘as separate rows’ instead of ‘only column headings’.
2) Then go to each column and set the custom table heading. Set the same table heading for all the columns that require the same heading.

Oracle Technical Support & Proper way to file SR

It always amazes me how some people don’t bother doing simple research before asking question on OTN. I’m sure that sometimes they just don’t have time to explore the issue by themselves or maybe they don’t know where they should look for information. Questions in one sentence like “My BI Server isn’t starting” or “I have ODBC error” without detailed description pop-up all the time on OTN. I’m a huge fan of metalink (i’m using metalink 3) – I’ve been able to locate some answers always instantly especially before OTN has become such a useful place as it’s now. Filing a service request is a sure way to at least get to the cause of the problem. Of course many times you would hit a BUG or a ENHANCEMENT REQUEST but at least you would know that it’s not your fault.  Through trial and error I’ve compiled a list of best practices that will help you to maximize your Oracle Support experience. Enjoy my SR tutorial:

Most important pre-SR exercise – run a simple search in Metalink / OTN to make sure that this issue haven’t been identified yet – there’s nothing worse than going through days of support e-mail back and forth and then receiving an e-mail that it’s a well-known bug / feature.

1. Make sure to give as detailed description of the problem as possible. Try to describe circumstances when it happens. If you have a question about functionality, be specific about your needs and what you are trying to achieve. If your description is very long – I suggest you type it in word and attach along with the rest of your SR.

2. Take screen shots of the error screens. Circle the problematic area or error message to help support analyst to pinpoint the problem.

3. Put your RPD, web catalog, screen shots into 1 archive. Attach lines from relevant log files (not the whole thing, but extracts). And attach it to the SR. Don’t forget to give your RPD’s admin password.I realized that most of the time, support would request those anyway, so you can be proactive about it. Why shouldn’t you do it now, rather than wait for them to ask you to submit those.

4. Be patient. You SR is important, but sometimes analysts get busy with high-priority tickets. Don’t escalate if nobody is replying within 1 day.  My experience shows that people want to help – it’s just maybe they’re taking their time to counsel with someone else and that’s the reason of the hold-up.

5. Be courteous. If there’s an update or request for more information – do your diligence and reply right away. If you receive an Oracle survey afterward, take a few minutes and fill it out. I don’t know for sure, but I’d guess that can have an impact on someone’s job. If they helped you, why shouldn’t you help out.

Do you have your favourite SR tips? Please share them in the comments.