mondrian是一个OLAP引擎,和OLTP不同的是,OLAP是建立在物理表以上的一个逻辑模型,称为一个立方体,这个立方体的建立是通过指定可选的维度和度量,每一个维度有一个维度表,维度有层次信息。OLAP的查找是通过一种MDX表中实现的,类似于OLTP的sql语法,MDX有自己的语法,不过它只规范了查询语句,因为OLAP中不会对数据进行修改,因此OLAP执行的过程中有两个方面,首先就是对模型的定义,在mondrian中,逻辑模型的定义是通过xml的方式交给mondrian解析的,对于这个模型的查询是通过MDX格式的语句完成的,下面通过一个实例调用mondrian接口看一下mondrian的使用。
package mondrianTest;
import java.io.PrintWriter;
import mondrian.olap.Connection;
import mondrian.olap.DriverManager;
import mondrian.olap.Query;
import mondrian.olap.Result;
public class TestMDX {
public void testQuery(){
Connection connection = DriverManager.getConnection("Provider=mondrian;" +
"Jdbc=jdbc:mysql://10.241.20.157:3306/foodmart?user=root&password=root;" +
"Catalog=C:\\Users\\Administrator\\Desktop\\nrtp\\FoodMart.xml;",
null, false);
Query query = connection.parseQuery("select {[Measures].[业务量]} on columns from MsgBusi");
Result result = connection.execute(query);
PrintWriter pw = new PrintWriter(System.out);
result.print(pw);
pw.flush();
}
public static void main(String[] args) {
TestMDX a = new TestMDX();
System.out.println("调用mondrian api进行查询");
a.testQuery();
}
}
这段代码是自己从网上down下来的,要想运行它需要加一些执行过程中需要的jar包,至少需要以下几个包:
接着运行出现如下错误:
Exception in thread "main" mondrian.olap.MondrianException: Mondrian Error:Internal error: while parsing catalog C:\Users\Administrator\Desktop\nrtp\FoodMart.xml
at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:755)
at mondrian.olap.Util.newInternal(Util.java:1083)
at mondrian.olap.Util.newError(Util.java:1099)
at mondrian.rolap.RolapSchema.load(RolapSchema.java:303)
at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:213)
at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:76)
at mondrian.rolap.RolapSchema$Pool.get(RolapSchema.java:835)
at mondrian.rolap.RolapSchema$Pool.get(RolapSchema.java:657)
at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:148)
at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:79)
at mondrian.olap.DriverManager.getConnection(DriverManager.java:122)
at mondrian.olap.DriverManager.getConnection(DriverManager.java:87)
at mondrian.olap.DriverManager.getConnection(DriverManager.java:55)
at mondrianTest.TestMDX.testQuery(TestMDX.java:13)
at mondrianTest.TestMDX.main(TestMDX.java:41)
Caused by: org.eigenbase.xom.XOMException: In Schema: In Cube: In Measure: In MeasureExpression: In SQL: Value 'infobright' of attribute 'dialect' has illegal value 'infobright'. Legal values: {generic, access, db2, derby, firebird, hsqldb, mssql, mysql, oracle, postgres, sybase, teradata, ingres, luciddb}
at mondrian.olap.MondrianDef$Schema.<init>(MondrianDef.java:134)
at mondrian.rolap.RolapSchema.load(RolapSchema.java:289)
... 11 more