欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pentaho Mondrian 教程(二)集成另一种方法 博客分类: pentahomondrian pentahomondrian

程序员文章站 2024-03-13 23:57:10
...

软件版本 Mondrian 3.6.1

       上一篇文章介绍了如何将Mondrian集成到我的自己的WebApp中并且以XMLA的形式向外提供服务,今天我们就接着讲一下如果将Mondrian集成到WebApp中并通过Java API来为我们自己的程序提供服务(这跟Java JDBC访问数据库非常相似)。

       这里我们在上一篇建立的工程之上做,如果对Jar包依赖不清楚的同学可以参看一下我的上一篇博文:

http://alenzhai.iteye.com/blog/2153204

上一篇中我们并没有写代码就将Mondrian集成到了我们的系统中,今天就得写点Java代码了,讲之前的说明,这里只是为了演示所以只建了一个Main类并在main方法中执行,在实际的应用中,我们需要将其封装到一个类中使用(可以参考 JDBC的模式)。

       首先在工程src目录下新建一个包mondrian.java.api 在包下新建类Main且类中有一个main方法如图:


Pentaho Mondrian 教程(二)集成另一种方法
            
    
    博客分类: pentahomondrian pentahomondrian
 

 

 

 

在类中新增获取连接方法 (此方法相当于JDBC中的获取连接方法):

/**
	 * 获取连接Olap的连接
	 * @param url  连接Olap的URL
	 * @return
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public static OlapConnection getConnection(String url) throws ClassNotFoundException, SQLException{
		Class.forName("mondrian.olap4j.MondrianOlap4jDriver");
		Connection connection = DriverManager.getConnection(url);
		return connection.unwrap(OlapConnection.class);
	}

 

 增加查询方法(此方法相当于JDBC中根据SQL获取ResultSet的方法):

/**
	 * 获取查询的结构结果集
	 * @param mdx  mdx查询语句
	 * @param conn Olap连接
	 * @return
	 * @throws OlapException
	 */
	public static CellSet getResultSet(String mdx,OlapConnection conn) throws OlapException{
		OlapStatement statement = conn.createStatement();
		CellSet cellSet = statement.executeOlapQuery(mdx);
		return cellSet;
	}

 主方法中的内容:

public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// TODO Auto-generated method stub
		//callschema();
		//获取连接
	 OlapConnection conn= getConnection(
			       //URL协议
			      "jdbc:mondrian:"
			       //连接数据源的JDBC连接
		        + "Jdbc='jdbc:mysql://localhost:3306/alen?user=root&password=admin&useUnicode=true&characterEncoding=utf8';"
		           //数据模型文件
		        + "Catalog='file://E:/work/workspace/mondrianweb/WebContent/WEB-INF/schema/demo.mondrian.xml';"
		          //连接数据源用到的驱动
		        + "JdbcDrivers=com.mysql.jdbc.Driver;");
	 //查询语句
	 String mdx="SELECT {[Measures].[cnt]} ON 0,"
		        + "{[dep].[dep].members} on 1"
		        + "FROM [prd]";
	 //获取查询结果
	 CellSet cs=getResultSet(mdx, conn);
	 
	 //处理返回数据
		if(cs.getAxes().size()>1){
			for (Position row : cs.getAxes().get(1)) {
			    for (Position column : cs.getAxes().get(0)) {
			        for (Member member : row.getMembers()) {
			            System.out.println("rows:"+member.getUniqueName());
			        }
			        for (Member member : column.getMembers()) {
			            System.out.println("columns:"+member.getUniqueName());
			        }
			        final Cell cell = cs.getCell(column, row);
			        System.out.println("values:"+cell.getValue());
			        System.out.println();
			    }
			    }
		}else{
			for(Position column:cs.getAxes().get(0))
			{
				for(Member member:column.getMembers()){
					System.out.println("columns:"+member.getUniqueName());
				}
				Cell cell=cs.getCell(column);
				System.out.print("values:"+cell.getValue());
				System.out.println();
			}
		}
		
	
	}	

 Ok 编码完成 运行一下试试吧

结果:

rows:[dep].[部门一]
columns:[Measures].[cnt]
values:16.0

rows:[dep].[部门二]
columns:[Measures].[cnt]
values:16.0

 

通过上面的代码也许你会同意我上一篇所说的Mondrian只是一个翻译器的说法了吧,ok今天就到这里,我们下次再见吧。

 

下期预告:Mondrian XMLA配置多个数据源

 

我的Email:zhaizhisheng@sina.com

我的博客:http://alenzhai.iteye.com/

另外也欢迎大家加入 下面的群来聊一聊 开源BI那些事!

Pentaho Mondrian 教程(二)集成另一种方法
            
    
    博客分类: pentahomondrian pentahomondrian


Pentaho Mondrian 教程(二)集成另一种方法
            
    
    博客分类: pentahomondrian pentahomondrian

 

  • Pentaho Mondrian 教程(二)集成另一种方法
            
    
    博客分类: pentahomondrian pentahomondrian
  • 大小: 3.7 KB
相关标签: pentaho mondrian