Mondrian系列(五)-深入维度、层次和级别(3)-Level显示和多层次结构

1.排序和Level的显示

注意,在上述例子的时间层次中,在<level>元素的ordinalColumn和nameColumn属性,会影响在结果中level如何显示。ordinalColumn属性指定了在层次表中的一个列,提供了给定level的成员的顺序,nameColumn指定要显示的列。

例如,在上面例子的月level中,datehierarchy表有month(1..12)和month_name(1月,2月..12月)这两个列。在MDX中,有效的成员描述一般是下面的格式:

[Time].[2005].[Q1].[1]

[Month]级的成员会显示为顺序的1月,2月等等。

在父子层次中,成员经常在层次顺序排序,ordinalColumn属性控制兄弟姐妹出现在他们父母中的顺序。排序列可以是能用在ORDER BY语句中的任何数据类型。排序的范围是每个父母,因此在上面的例子中,day_in_month列每个月都会循环。通过JDBC驱动返回的值应该为非空的java.lang.Comparable对象的实例,会通过Comparable.compareTo方法进行比较顺序。

包含type属性的Level,值可以设置为String,Integer,Numeric,Boolean,Date,Time和Timestamp。默认是Numeric,因为主键列一般为数值类型。如果类型不同,Mondrian需要知道正确的类型以便生成SQL,例如String值会生成用单引号包含的语句:

     WHERE productsku=’123-456-AAA’

2.多层次结构

一个维度可以包含超过一个的层次:

<Dimension name=”Time” foreignKey=”time_id”>
    <Hierarchy hasAll=”false” primaryKey=”time_id”>
        <Table name=”time_by_day”/>
        <Level name=”Year” column=”the_year” type=”Numeric” uniqueMembers=”true” />
        <Level name=”Quarter” column=”quarter” uniqueMembers=”false” />
        <Level name=”Month” column=”month_of_year” type=”Numeric” uniqueMembers"=”false” />
    </Hierarchy>
    <Hierarchy name=”Time Weekly” hasAll=”false” primaryKey=”time_id”>
        <Table name=”time_by_week” />
        <Level name=”Year” column=”the_year” type=”Numeric” uniqueMembers=”true” />
        <Level name=”Week” column=”week” uniqueMember=”false” />
        <Level name=”Day” column=”day_of_week” type=”String” uniqueMembers=”false”/>
    </Hierarchy>
</Dimension>

注意,第一个层次没有name,默认的,一个层次有和他维度一样的名字,因此第一个层次叫做Time。

这些层次结构难道没有相当多的共同点吗?他们甚至都用同一个表!将两个层次放如到同一个维度的主要原因是这对最终用户更有意义,最终用户知道放在一个轴上的Time层次和在另一个轴上的Time Weekly层次有没有意义。如果两个层次在同一个维度上,MDX语句不允许在同一个查询中同时使用这两个层次。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值