[Mondrian] PC hierarchy and visibility of MemberReader and MemberSource

Julian Hyde jhyde at pentaho.com
Wed Nov 28 13:54:20 EST 2012


MemberReader and MemberSource are internals. Modify them at your own risk.

A parent-child hierarchy based on a table with a <SQL> sub-element looks dubious. The <SQL> element hasn't been tested exhaustively. I wouldn't be surprised if Mondrian ignores it in parent-child hierarchies. If it works for you, fine.

Your issue seems to be how members of parent-child hierarchies are ordered within their parent. Have you tried using the ordinalColumn attribute of Level?

FYI, I changed some stuff in Mondrian 4 (lagunitas branch) about ordering of parent-child hierarchies. I think I decided that the default ordering should be by name, not by id. But you can override by setting the Attribute's orderByColumn or providing a nested OrderBy element. (Note that these XML elements only exist in Mondrian 4.)

Julian


On Nov 27, 2012, at 6:43 AM, damien hostin <damien.hostin at axege.com> wrote:

> Hello,
> 
> 
> XML for the dimension looks like:
> 
>     <Dimension name="Structure">
>     <Hierarchy hasAll="false" name="Structure" caption="Structure" 
> primaryKey="rfoade_i_rfodstide" primaryKeyTable="adedst" 
> defaultMember="STRC" nullParentValue="AXS_ROOT">
>         <Table name="adedst">
>             <SQL dialect="generic">rfoade___rforefide = 'REF' and
>                 rfoade___rfovdeide='VDE' and
>                 rfoadervs=1 </SQL>
>         </Table>
>         <Level name="STRC" table="adedst" column="rfoade_i_rfodstide" 
> parentColumn="rfoade_s_rfodstide" uniqueMembers="true">
>         </Level>
>     </Hierarchy>
>     </Dimension>
> 
> 
> And the MDX :
> 
> select NON EMPTY [DefaultMeasures] ON COLUMNS, NON EMPTY 
> [DefaultDimensions] ON ROWS
> from [cana_cube_1354026362876]
> where [DefaultFilters]
> 
> And the namedset in the schema for the MDX :
> 
>           <NamedSet name="DefaultMeasures">
>             <Formula>{[Measures].[Montant]}</Formula>
>           </NamedSet>
> 
>           <NamedSet name="DefaultDimensions">
>             <Formula>Crossjoin({[Temps.Temps par mois].[2009]), 
> ([Temps.Temps par mois].[2010]}, {([Structure].DefaultMember, 
> [Natures].DefaultMember)})</Formula>
>           </NamedSet>
> 
>           <NamedSet name="DefaultFilters">
>             <Formula>{([Stade].DefaultMember, 
> [Processus].DefaultMember, [rfovsn].DefaultMember)}</Formula>
>           </NamedSet>
> 
> 
> Closure table are not mandatory, but I think we can't skip them if we 
> want good performances with parent-child hierarchies. I though it would 
> be easier to debug without.
> 
> I can give more information, but I'm not sure what could help.
> 
> 
> Thanks,
> 
> Damien
> 
> Le 27/11/2012 14:54, Kurtis Walker a écrit :
>> Damien,
>>   Can you send an example of the MDX you are trying to run and the XML for the dimension in your schema?
>> 
>> Kurt
>> 
>> On Tuesday, November 27, 2012 05:15:12 AM damien hostin wrote:
>>> Hello,
>>> 
>>> I am trying to use parent-child hierarchy, but it has some restriction.
>>> 
>>> It looks like we need to give a list sorted in such a way that parent
>>> always come before their child, even if we are not using Closure Tables.
>>> But in the same time, an order by clause is generated on the parent and
>>> the child column.
>>> 
>>> In foodmart.xml it is OK because parent and child are integer, and
>>> sorted correctly. It is also OK because the hierarchy is always the
>>> same, there is no real-life end user that modify it.
>>> 
>>> In my case, sorting the hierarchy on parent and child doesn't garanted
>>> to give mondrian the correct order. This can't work but it is possible
>>> to change the code. I could have patch mondrian to handle PC hierarchies
>>> with my "custom" order by clause, but regression tests find 35 failures
>>> and 1 error with original code running with derby.
>>> 
>>> As it is possible the give MemberReader or MemberSource own
>>> implementation I decided to use that cleaner way. But
>>> mondrian.rolap.MemberSource uses a MemberCache class that is not visible
>>> outside mondrian's package, and mondrian.rolap.MemberReader is package
>>> visible too. So I must implements my custom MemberReader/Source inside
>>> mondrian project, with my 36 regression.
>>> 
>>> Is it a volunteer restriction or can the visibility be change to allow
>>> outside implementation ? I'm a bit messy with those problems.
>>> 
>>> 
>>> Thanks,
>>> 
>>> Damien Hostin
>>> _______________________________________________
>>> Mondrian mailing list
>>> Mondrian at pentaho.org
>>> http://lists.pentaho.org/mailman/listinfo/mondrian
> 
> _______________________________________________
> Mondrian mailing list
> Mondrian at pentaho.org
> http://lists.pentaho.org/mailman/listinfo/mondrian



More information about the Mondrian mailing list