[Mondrian] question on "circular" MDX

John V. Sichi jsichi at gmail.com
Sat Feb 3 21:50:51 EST 2007

If I run the query below with native crossjoins enabled, it comes back 
with an answer.  But if I run it with 
mondrian.native.crossjoin.enable=false, it fails with a stack overflow. 
  There's clearly a bug, in that the behavior should be the same 
regardless of the implementation.  And if it should fail, it would be 
nice to fail with a validation error regarding the circularity (rather 
than a stack overflow).

The cycle in the non-native case is as follows.  The calculated members 
in the slicer depend on named set CJ, the result of some 
NonEmptyCrossJoins.  But those NECJ's in turn depend on the slicer for 
deciding non-emptiness of each candidate tuple.

There's some further problem with the calculated member manipulation in 
that it requires two calculated members to fail; with just one 
calculated member in the slicer, it succeeds regardless of whether 
native crossjoin is used.  Unless I'm misunderstanding the cause of the 
problem, if it's going to fail in one case, it should fail in the other.

Any opinions on the correct behavior?

set BM_PRODUCT as {[Product].[All Products].[Drink]}
set BM_EDU as [Education Level].[Education Level].Members
set BM_GENDER as {[Gender].[Gender].[M]}
set CJ as NonEmptyCrossJoin(BM_GENDER,NonEmptyCrossJoin(BM_EDU,BM_PRODUCT))
set GM_PRODUCT as Generate(CJ, {[Product].CurrentMember})
set GM_EDU as Generate(CJ, {[Education Level].CurrentMember})
set GM_GENDER as Generate(CJ, {[Gender].CurrentMember})
set GM_MEASURE as {[Measures].[Unit Sales]}
member [Education Level].FILTER1 as Aggregate(GM_EDU)
member [Gender].FILTER2 as Aggregate(GM_GENDER)
GM_PRODUCT on rows,
GM_MEASURE on columns
from [Sales]
where ([Education Level].FILTER1, [Gender].FILTER2);


More information about the Mondrian mailing list