mondrian + jpivot 开发笔记

本文介绍如何在OLAP报表中实现按条件着色、调整钻取数据格式及展示同一表格中的父子关系记录。通过具体配置示例,展示了如何在XML文件中设置样式和格式化选项,并详细说明了实现父子关系记录的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 按条件着色记录

 

in schema xml file:

<CalculatedMember name="useRatio" dimension="Measures">
      <Formula>
        <![CDATA[[Measures].useAmount * 100 / [Measures].[ToltalAmount]]]>
      </Formula>
      <CalculatedMemberProperty name="FORMAT_STRING" 
expression="Iif([Measures].[useRatio] &lt; 50.00, '|#,##0.00|style=red', '|#,##0.00|style=green')"/>
</CalculatedMember>
 

2. 钻取数据格式化

jpivot钻取出的数字默认精确到小数点后两位,修改wcf.jar中

com.tonbeller.wfc.format.config.xml
删除double和nandouble的定义

 

3. 展现同一张表中父子关系的记录

 

in schema xml file:

 <Dimension foreignKey="EMPLOYEE_NO" highCardinality="false" name="EMPLOYEE">
     	<Hierarchy hasAll="true" allMemberName="所有机构" primaryKey="NO">
     	        <Table name="ORG_TABLE"/>
     		<Level name="EMPLOYEE" column="NO" nameColumn="NAME"
 parentColumn="LEADER" nullParentValue="null" type="String" uniqueMembers="true">
     			<Closure parentColumn="LEADER_NO" childColumn="EMPLOYEE_NO">
          			<Table name="EMPLOYEE_CLOSURE"/>
       			</Closure>
     		</Level>
     	</Hierarchy>
    </Dimension>
 

关键的几个方面:

(1) <Level>中 parentColumn 和 nullParentValue 属性的设置,如果是父子关系的连接,属性uniqueMembers值必须为true。

 

(2) 必须在数据库中创建响应的Closure Table,并在<Level>中设置<Closure>加以关联,否则在有的情况下该列展开时会报错(mondrian实现父子关系级联查询的机制使然):

 

javax.el.ELException: Error reading 'result' on type com.tonbeller.jpivot.tags.OlapModelProxy

 

(3) 对于这种在同一张表中,记录之间有父子关系的情况,用上面这种parent-child级联 + 参考closure table的方式在大多数情况下并不是很好的解决方案,这种方案最大的弊端在于需要额外地维护一张与事实表相关的closure table,如果事实表中的记录是不变的尚可,但大多数情况下事实表的记录是会被改变的,这样就需要在closure表中随之维护成员以及成员之间的关系,这不但需要额外的开销,而且有时会很麻烦。更好的一种解决方案是使用view,当然mondrian本身并不支持view,需要所使用的数据库本身可以支持view,当今主流的关系数据库应该都是支持的,如Oracle, MySQL, SQLServer等,下面展现了一个例子

 

in schema xml file:

<!-- 单位维度,关联事实表中的UNIT_NO列 -->
<Dimension foreignKey="UNIT_NO" highCardinality="false" name="UNIT"> 
     	<Hierarchy hasAll="true" allMemberName="所有单位"
                         primaryKey="NO" primaryKeyTable="VIEW_UNIT_TWO">
     		<Join leftKey="UPPER_UNIT" rightKey="NO">
                         <!-- 关联二级分支单位的VIEW -->
     			<Table name="VIEW_UNIT_TWO"/>

                        <!-- 关联一级分支单位的VIEW -->
     			<Table name="VIEW_UNIT_ONE"/>
     		</Join>

     		<Level name="一级分支单位" table="VIEW_UNIT_ONE" column="NO" 
nameColumn="NAME" type="String" uniqueMembers="true" hideMemberIf="Never"/>

                <Level name="二级分支单位" table="VIEW_UNIT_TWO" column="NO" 
nameColumn="NAME" type="String" uniqueMembers="false" hideMemberIf="Never"/>

           </Hierarchy>
    </Dimension>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值