在saiku3.8的二次开发版本中,由于运行环境的特殊性,经常会遇到一些问题,但是不是莫名其妙,而是有依据可循的,下面来看下找不到文件“configuration.xml”的解决办法:
10:29:39,422 ERROR [RepositoryDatasourceManager] Could not start repo
org.apache.jackrabbit.core.config.ConfigurationException: Configuration file could not be read.
at org.apache.jackrabbit.core.config.ConfigurationParser.parseXML(ConfigurationParser.java:292)
at org.apache.jackrabbit.core.config.RepositoryConfigurationParser.parseRepositoryConfig(RepositoryConfigurationParser.java:323)
at org.apache.jackrabbit.core.config.RepositoryConfig.create(RepositoryConfig.java:351)
at org.apache.jackrabbit.core.config.RepositoryConfig.create(RepositoryConfig.java:327)
at org.apache.jackrabbit.core.config.RepositoryConfig.create(RepositoryConfig.java:277)
at org.saiku.repository.JackRabbitRepositoryManager.start(JackRabbitRepositoryManager.java:169)
at org.saiku.service.datasource.RepositoryDatasourceManager.l
从下图可以看出,面向主题中的主题,可以看做我们常常设计维度的时候部分维度的抽象,如下图中,顾客活动和和顾客其实都是维度,但是是不同的特殊维度。
数据仓库中粒度化的数据是重用性的关键,因为它可以由众多的用户以不同方式使用。
就拿我们常用的日期维度来说,我们常常把日期维度分为“年、季度、月、周、日、小时”等,那么这里的“年、季度、月、周、日、小时”就是不同的六个粒度(相对时间上的),假设数据仓库中在时间上的粒度是日,那么就需要建立以日为最小分组统计的聚合表,在这个聚合表中,最小可以看到以日为单位的统计数据。
如果要查看周、月、季度、年的相关统计数据,就可以基于日的数据来进行进一步统计及计算。那么问题来了,如果我要看小时的数据怎么办,没有办法的,除非设计的最小粒度为小时。这就是数据的重用性。
当然,同一数据仓库中,对于同一纬度的不同level,也可以有相应粒度对应的数据,但是这样会造成数据的冗余;当然,也可以根据具体使用情景,决定是否需要这样的冗余(原书中说的是双重粒度,这里我更喜欢称为是多重粒度)。
这个答案是不一定的
1. 有些操作型报表需要的数据,在数据仓库中并不存在。
2. 即使操作型报表需要的数据,都会在数据仓库中存在,但是也许当时操作型数据库用到数据的同时,数据并未被归集到DS中(一般DS中的数据并不是实时的,而是定期通过ETL处理的),那么就会出现时数据错乱。
元数据在数据仓库的上层,并且记录
整理此文章方便大家做测试(手写Mondrian Schema自测),不必每次都向saiku上传文件了
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.firewarm</groupId>
<artifactId>testMondrian</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>testMondrian Maven Webapp</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>mine</id>
<name>public Releases</name>
<layout>default</layout>
<url>http://nexus.liuyingguang.cn:8081/nexus/content/groups/public/</url>
</repository>
<repository>
<id>mine-meteorite-bi-release</id>
<
参考原文,略作修改:http://www.cnblogs.com/avivaye/p/4881106.html
以上链接文章的思路是正确的,有略微的遗漏,saiku-beans.properties中也存在与用户相关的H2数据库配置,并且在id为“userDaoDataSource”的bean中有用到,为了避免出现问题,将其一并替换,并修改原文中部分配置到配置文件中
<context-param>
<param-name>db.url</param-name>
<param-value>jdbc:h2:../../data/saiku;MODE=MySQL</param-value>
</context-param>
<context-param>
<param-name>db.user</param-name>
<param-value>sa</param-value>
</context-param>
<context-param>
<param-name>db.password</param-name>
<param-value></param-value>
</context-param>
<bean id="h2database" class="org.saiku.database.Database" init-method="init">
<property name="datasourceManager" ref="repositoryDsManager"/>
<property name="datasourcetype" value="mysql" /><!-- add by liuyg -->
<property name="url" value="${userdao.url}" />
<pr
saiku的社区版本二次开发一直以来都是比较费劲的,最近saiku社区版在新版本中,引入了license的机制,于是我选了个3.8稳定版本(release-3.8),且不需要license的版本作为基础,将代码合并在一个项目中,以简化二次开发和源码研究。
作为一个普通maven项目,可以使用eclipse部署在tomcat中,debug等各种玩耍
创建新项目saiku3
在创建的项目中,分别创建resource目录:“src/main/saiku-web”,“src/main/saiku-service”,“src/main/saiku-olap-util”,并将saiku-core下的相应代码(java目录下和resources目录下的文件)分别copy到里面,
将saiku-webapp\src\main\webapp目录下的所有文件,覆盖到新建项目的webapp目录中
将编译过后的zip包中tomcat\webapps\下的ROOT目录中文件全部copy到新建项目的webapp目录中并修改/saiku3/src/main/webapp/js/saiku/Settings.js文件中的TOMCAT_WEBAPP值为“/saiku3”
将编译过后的zip包中saiku-server目录下的data和repository文件夹copy到项目的webapp目录中
修改saiku-beans.properties文件,修改所有“../../”的地方替换为“../webapps/saiku3/”;修改saiku-beans.properties文件,修改pluginpath为“../webapps/saiku3/js/saiku/plugins/”(20160614修改)
修改eclipse中tomcat的工��路径:参考如下文章
http://blog.csdn.net/gsying1474/article/details/51597995
修改 Database.java中的init方法,注释loadEarthquakes();方法的调用,以保证代码启动(此方法的代码中有部分导