eigenbase eigenbase-resgen 1.3.1
查看了saiku的pom.xml文件,它使用的是如下的版本:
eigenbase eigenbase-resgen 1.3.0.11873
虽然这两个版本不一样,但是我想应该任何一个都可以吧,于是下了1.3.1版本的,将之前的jar包换了一下之后测试一下,OK了,得到了同样的结果。 虽然得到了相同的结果,但是这里还是使用mondrian之前的execute接口来执行MDX语句的,而不是通过olap4j的方式,代码中可以看到execute接口已经被抛弃了,查看mondrian文档看到这样的注释: Deprecated. This method is deprecated and will be removed in mondrian-4.0. It operates by internally creating a statement. Better to use olap4j and explicitly create a statement. 这里说这个接口将在mondrian 4.0以后被移除了,建议使用olap4j接口创建statement的方式代替,于是又在网上搜到一片mondrian教程(http://alenzhai.iteye.com/blog/2158953),这里使用的就是olap4j的方式访问的,把代码copy下来之后进行修改,保持connection的参数和mdx语句不变,运行过之后能够得到相同的结果,只不过这种访问方式更加规范。附上源代码:
package mondrianTest;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.olap4j.Cell;
import org.olap4j.CellSet;
import org.olap4j.OlapConnection;
import org.olap4j.OlapException;
import org.olap4j.OlapStatement;
import org.olap4j.OlapWrapper;
import org.olap4j.Position;
import org.olap4j.metadata.Member;
public class Olap4jTest {
/**
* 获取连接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);
OlapConnection olapConnection = connection.unwrap(OlapConnection.class);
return olapConnection;
}
/**
* 获取查询的结构结果集
* @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 void testQuery(){
OlapConnection connection = null;
try {
connection = getConnection("jdbc:mondrian:" +
"Jdbc=jdbc:mysql://10.241.20.157:3306/foodmart?user=root&password=root;" +
"Catalog=C:\\Users\\Administrator\\Desktop\\nrtp\\FoodMart.xml;");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String query = "SELECT { [Measures].[Unit Sales] } on columns,{ [Time].[Year].[1997] } on rows FROM Sales WHERE ([Customers].[State Province].[CA])";
//获取查询结果