Tag - saiku2

saiku2 OpenBI OpenSource    2017-07-19 23:40:52    37

工具:

  1. MyEclipse 10
  2. saiku2.5源码
  3. saiku-server-foodmart-2.5.zip

操作步骤:

  1. 在MyEclipse中新建一个web项目,名为saiku(必须名为saiku,因为saiku的UI会默认找saiku项目)
  2. 在saiku-server-foodmart-2.5.zip的tomcat中,找到saiku项目,并复制saiku目录下的所有文件到saiku项目的WebRoot目录中
  3. 到saiku-2.5.x\saiku-core\目录下分别找到saiku-service和saiku-web目录,并找到其中的java源代码,copy到saiku中,作为源码(建议分开两个resource文件夹存放,便于区分)
  4. 然后在saiku项目中创建source文件夹resource(命名自定),并在其目录下创建文件夹saiku-datasources和saiku-repository(前者是存储saiku的datasource的文件夹,后者则是存储生成的saiku模板的文件夹)
  5. 然后将saiku项目放到tomcat中,启动,看是否正常(如果没配置错误的话,应该正常了)
  6. 配置一个自己的测试库:
    在saiku-datasources目录下创建file并命名为testdatasource,文件内容为如下
  1. type=OLAP
  2. name=testdatasource
  3. driver=mondrian.olap4j.MondrianOlap4jDriver
  4. location=jdbc:mondrian:Jdbc=jdbc:mysql://localhost:3306/testdatasource;Catalog=res:testdatasource/testdatasource.xml;
  5. username=root
  6. password=111111

解释下上面一条的的参数

  1. type=OLAP就不多说了,先按固定的来
  2. name=testdatasource 数据源名称
  3. driver=mondrian.olap4j.MondrianOlap4jDriver 可以理解为固定的,Mondrian
saiku2 mondrian3 OpenSource OpenBI    2017-07-19 23:28:23    18
首先需要下载mondrian-3.6.5.jar的源码或者使用反编译软件看到源码,我在网上没找到这个版本(由于我用反编译工具弄的,放到文件中会报错,所以就下载了源码,反正也好找),于是我拿了mondrian-3.7.0.0-752的源码下来,用着也正常

1、从中找到文件mondrian.olap.Util,找到方法readVirtualFileAsString
修改内容为如下(重点是红色内容):
        InputStream in = readVirtualFile(catalogUrl);
        try {
            return IOUtils.toString(in,"utf-8");    //-----------------此行为红色行
        } finally {
            IOUtils.closeQuietly(in);
        }
或者按照网上说的另外一种方式,整体替换为如下内容,也可以,不过下面的编码必须写你的schema文件的编码:
        try {
            final byte[] bytes = Util. readFully(in, 1024);
            final char[] chars = new char[bytes. length];
            for ( int i = 0; i < chars. length; i++) {
                chars[i] = ( char) bytes[i];
            }
            String str = new String(bytes,"utf-8").replace("\ufeff" , "" );//加replace("\ufeff", "")是为了过滤"UTF-8无BOM格式文件"的开头
            return str;
        } finally {
            if (in != null) {
                in.close();
            }
        }

2、再找到文件    mondrian.rolap.RolapSchema.lo

saiku2 OpenSource OpenBI    2017-07-19 23:21:44    13
先说说出问题的原因吧,你说这个saiku也挺有趣,有些地方,注明读取的编码,有些地方不注明,而是使用系统默认的,只要用了系统默认,肯定会出问题啦,于是乎必须解决这个问题啊
saiku中,在保存saiku文件的时候,没有设置输出流编码,如下第四点,然而在读取的时候,却又是部分地方使用UTF-8编码,部分使用系统默认编码,这样就导致系统由于乱码可能出现查询不了的问题

如下的1,2,3是读取saiku文件的时候需要修改的地方,4是写入saiku文件的时候需要修改的地方

 

解决办法,需要修改4个地方的编码:


1、找到类QueryResource的createQuery方法,
修改 xml = new String( (byte[]) f.getEntity());
 xml = new String( (byte[]) f.getEntity(),"utf-8");
2、找到类QueryDeserializer的getFakeCube方法,
修改 InputSource source = new InputSource( ( new ByteArrayInputStream( xml.getBytes() ) ) );
为 InputSource source = new InputSource( ( new ByteArrayInputStream( xml.getBytes("UTF-8") ) ) );
3、找到类BasicRepositoryResource2的getResource方法
修改 InputStreamReader reader = new InputStreamReader(repoFile.getContent().getInputStream());
为 InputStreamReader reader = new InputStreamReader(repoFile.getContent().getInputStream(),"UTF-8");
4、找到类BasicRepositoryResource2的saveResource方法
    修改   OutputStreamWriter ow = new OutputStreamWriter(repoFile.getContent().getOutputStream());
    为     OutputStreamW
saiku2 OpenSource OpenBI    2017-07-19 23:19:17    8

1、Setting.js中有个配置项:'saiku.olap.query.automatic_execution': 'true',

1、Setting.js中有个配置项:'saiku.olap.query.automatic_execution': 'true',

2、在Repository界面双击saiku文件查询不自动,需要在Workspace.js文件的410行附近,修改如下代码,将其中调用query.run的代码注释

if (typeof isNew != "undefined") {
//this.query.run(false);
}

 

 


 

by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(防止爬虫):http://blog.liuyingguang.cn
OpenBI问答社区:http://openbi.liuyingguang.cn/

saiku2 java OpenSource    2017-07-19 22:24:35    10
以下步骤基于我的nexus足够多的资源,我稍后会将我部署的proxy的nexus库分享出来

1、下载源码:
    saiku2.6的源码:https://github.com/OSBI/saiku/tree/v2.6
    saiku-query的源码:https://github.com/OSBI/saiku-query
    saiku-ui的源码:https://github.com/OSBI/saiku-ui/tree/v2.6

2、将项目都导入到eclipse中
    修改saiku-core的pom.xml,将<repositories>节点的整块儿代码都注释掉,因为通过我实际编译的过程中发现很多jar包在一些nexus仓库上就是坏掉的,所以不要整体使用外部的nexus库
    然后将<repositories>节点的所有代码迁移到saiku-service中
3、构建saiku-query:
    在这里,我们需要将saiku-query项目deploy到我们自己的nexus库中,详细方式参考文章:
    http://note.youdao.com/share/?id=583871b294cbab9d015b037a2ec69fef&type=note
    
4、构建saiku-core(20160701修改),理论上,这里应该deploy到nexus中,但是eclipse本地构建,不需要deploy到eclipse也可以
    修改saiku-core和saiku-olap-util下的pom文件中仓库地址(repositories节点下)为:
    
<repository>
            <id>mine</id>
            <name>public Releases</name>
            <layout>default</layout>
        </repository>
        <repository>
            <id>mine-meteorite-bi-release</id>
            <name>publ