终于做完mondrian的小项目,先将遇到了一些问题和经验记下来。
1. 支持中文
在web.xml中添加过滤如下:
1 | <servlet> |
<?xml version=”1.0” encoding=”UTF-8”?>
1
2
这里对应的mdx语句为
select
{[Measures].[就诊人数], [Measures].[就诊次数], [Measures].[保费合计]} on columns,
{([时间].[所有时间],[网点级别].[所有级别], [IC卡状态].[所有状态])} ON rows
from shebao1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
## 3. query01.result.overflowOccured
这个问题是由于维度中的表名或者列名拼写错误,特别是大小写。oracle是区分大小写的,切记。
## 4. oracle中的表名列名如果有小写,就要用双引号才能识别,否则会出现未定义的表名和列名的错误
## 5. 创建聚合表
```sql
CREATE TABLE AGG_C_1_WJ_MZSFB0(WEEK VARCHAR(20),GZZT00 CHAR(6),XFLXBH CHAR(6),PEOPLE_SUM INTEGER,TIMES_SUM INTEGER,MONEY_SUM INTEGER,FACT_COUNT INTEGER);
INSERT INTO AGG_C_1_WJ_MZSFB0_201005(
WEEK,
GZZT00,
XFLXBH,
PEOPLE_SUM,
TIMES_SUM,
MONEY_SUM,
FACT_COUNT)
SELECT
BM_TIME00.WEEK,
WJ_MZSFB0_201005.GZZT00,
WJ_MZSFB0_201005.XFLXBH,
COUNT(DISTINCT WJ_MZSFB0_201005.LRLSH0) AS PEOPLE_SUM,
COUNT(WJ_MZSFB0_201005.DJLSH0) AS TIMES_SUM,
SUM(WJ_MZSFB0_201005.BCBXF0) AS MENEY_SUM,
COUNT(*) AS FACT_COUNT
FROM
WJ_MZSFB0_201005,BM_TIME00
WHERE
WJ_MZSFB0_201005.TIME_ID=BM_TIME00.TIME_ID
GROUP BY
BM_TIME00.WEEK,
WJ_MZSFB0_201005.GZZT00,
WJ_MZSFB0_201005.XFLXBH;
Scema中的定义如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26<Table name="WJ_MZSFB0_201005">
<AggName name="AGG_C_0_WJ_MZSFB0_201005">
<AggFactCount column="FACT_COUNT"/>
<AggForeignKey factColumn="GZZT00" aggColumn="GZZT00" />
<AggForeignKey factColumn="XFLXBH" aggColumn="XFLXBH" />
<AggForeignKey factColumn="ICZTBH" aggColumn="ICZTBH" />
<AggForeignKey factColumn="DWLB00" aggColumn="DWLB00" />
<AggForeignKey factColumn="WDJBBH" aggColumn="WDJBBH" />
<AggMeasure name="[Measures].[就诊人数]" column="PEOPLE_SUM" />
<AggMeasure name="[Measures].[就诊次数]" column="TIMES_SUM" />
<AggMeasure name="[Measures].[保费合计]" column="MONEY_SUM" />
<AggLevel name="[时间].[week]" column="WEEK" />
<AggLevel name="[消费类型].[type]" column="XFLXBG" />
<AggLevel name="[工作状态].[status]" column="GZZT00" />
</AggName>
```
AggForeignKey用来指定事实表和聚合表对应的列名
AggMeasure中name为度量,column为聚合表中相应的列
AggLevel 为维度以及级别
## 6. 聚合表写好却不识别
日志提示 WARN [mondrian.olap.MondrianProperties] mondrian.properties can't be found under 'd:\Program Files\Apache Software Foundation\Tomcat 7.0.' or classloader (输出日志方法请看上一篇文章)
这是由于 mondrian.properties为识别,而 mondrian.properties中定义了使用聚合表:
mondrian.rolap.aggregates.Use=true
mondrian.rolap.aggregates.Read=true1
2
3
4
5所以只要把 mondrian.properties复制要Tomcat目录下或者Web-INF\classes下(推荐)
## 7. 聚合表建好后,其他不用具备表的查询不能用了,提示Mondrian Error:Too many errors, '6', while loading/reloading aggregates.
这是因为其他查询也自动加载聚合表了,要在下使用AggExclude排除聚合表,如下所示:
`
这里要指出的是聚合表的Schema和非聚合表的Schema最好是分开的,也就是不同的xml里面。至于在同一xml里使用不同cube我没试过。
8. oracle数据导入
如果你跟我一样拿到的是一个oracle导出的dmp文件,又准备在mysql中用。那只能先装oracle,将dmp导入到oracle,然后使用这个神器——DBImport_V30将oracle中的数据导入到mysql中。(勾选使用分页就可以无限制数据量,不过会有时间限制,重启电脑即可)