Mondrian案例
1.mdx定义
<?xml version="1.0" encoding="UTF-8"?>
<Schema name="tezz">
<!-- Shared dimensions -->
<Dimension name="Product">
<Hierarchy hasAll="true" primaryKey="product_id">
<Table name="product"/>
<Level name="proName" column="product_name" uniqueMembers="true"/>
</Hierarchy>
</Dimension>
<!-- end 分享的维度 -->
<!-- Sales -->
<Cube name="Sales" defaultMeasure="Unit Sales">
<Table name="sales_fact_1997"/>
<DimensionUsage name="Product" source="Product" foreignKey="product_id"/>
<Measure name="Unit Sales中文" column="unit_sales" aggregator="sum" formatString="Standard"/>
<Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/>
<Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.00"/>
</Cube>
</Schema>
2.查询操作:
/**
* NO.2. 以product(商品[所有商品])为维度查询,1997年的销量信息
*/
public void two(){
String mdxStr = "SELECT {[Measures].[Unit Sales中文], [Measures].[Store Cost], [Measures].[Store Sales]} ON COLUMNS"
+ ",{[Product].members} ON ROWS FROM [Sales]";
// members,表中所有的数据
super.excute(mdxStr);
}
3.异常信息,.错误信息如下:
log4j:WARN No appenders could be found for logger (mondrian.olap.MondrianProperties).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" mondrian.olap.MondrianException: Mondrian Error:Failed to parse query 'SELECT {[Measures].[Unit Sales], [Measures].[Store Cost], [Measures].[Store Sales]} ON COLUMNS,{[Product].[索尼照相机]} ON ROWS FROM [Sales]'
at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:967)
at mondrian.olap.ConnectionBase.parseStatement(ConnectionBase.java:100)
at mondrian.rolap.RolapConnection.parseStatement(RolapConnection.java:768)
at mondrian.olap.ConnectionBase.parseQuery(ConnectionBase.java:55)
at demo.MondrianHelp.excute(MondrianHelp.java:45)
at demo.DemoOne.one(DemoOne.java:20)
at demo.DemoOne.main(DemoOne.java:11)
Caused by: mondrian.olap.MondrianException: Mondrian Error:MDX object '[Measures].[Unit Sales]' not found in cube 'Sales'
at mondrian.resource.MondrianResource$_Def1.ex(MondrianResource.java:984)
at mondrian.olap.Util.lookup(Util.java:1031)
at mondrian.olap.Id.accept(Id.java:110)
at mondrian.olap.ValidatorImpl.validate(ValidatorImpl.java:79)
at mondrian.olap.fun.FunUtil.resolveFunArgs(FunUtil.java:2024)
at mondrian.mdx.UnresolvedFunCall.accept(UnresolvedFunCall.java:102)
at mondrian.olap.ValidatorImpl.validate(ValidatorImpl.java:79)
at mondrian.olap.QueryAxis.resolve(QueryAxis.java:213)
at mondrian.olap.ValidatorImpl.validate(ValidatorImpl.java:140)
at mondrian.olap.Query.resolve(Query.java:561)
at mondrian.olap.Query.resolve(Query.java:446)
at mondrian.olap.Query.<init>(Query.java:200)
at mondrian.olap.Query.<init>(Query.java:161)
at mondrian.olap.Parser$FactoryImpl.makeQuery(Parser.java:927)
at mondrian.parser.MdxParserImpl.selectStatement(MdxParserImpl.java:1241)
at mondrian.parser.MdxParserImpl.statement(MdxParserImpl.java:1074)
at mondrian.parser.MdxParserImpl.statementEof(MdxParserImpl.java:188)
at mondrian.parser.JavaccParserValidatorImpl.parseInternal(JavaccParserValidatorImpl.java:57)
at mondrian.olap.ConnectionBase.parseStatement(ConnectionBase.java:96)
... 5 more
查询到好多资料,都没有解决问题。结果,瞎蒙去掉中文的name属性名称还真不报错。
4.修改mdx之后
<?xml version="1.0" encoding="UTF-8"?>
<Schema name="tezz">
<!-- Shared dimensions -->
<Dimension name="Product">
<Hierarchy hasAll="true" primaryKey="product_id">
<Table name="product"/>
<Level name="proName" column="product_name" uniqueMembers="true"/>
</Hierarchy>
</Dimension>
<!-- end 分享的维度 -->
<!-- Sales -->
<Cube name="Sales" defaultMeasure="Unit Sales">
<Table name="sales_fact_1997"/>
<DimensionUsage name="Product" source="Product" foreignKey="product_id"/>
<Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="Standard"/>
<Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/>
<Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.00"/>
</Cube>
</Schema>
5.java代码修改之后:
/**
* NO.2. 以product(商品[所有商品])为维度查询,1997年的销量信息
*/
public void two(){
String mdxStr = "SELECT {[Measures].[Unit Sales], [Measures].[Store Cost], [Measures].[Store Sales]} ON COLUMNS"
+ ",{[Product].members} ON ROWS FROM [Sales]";
// members,表中所有的数据
super.excute(mdxStr);
}
成功啦。
6.结果如下
log4j:WARN No appenders could be found for logger (mondrian.olap.MondrianProperties).
log4j:WARN Please initialize the log4j system properly.
Axis #0:
{}
Axis #1:
{[Measures].[Unit Sales]}
{[Measures].[Store Cost]}
{[Measures].[Store Sales]}
Axis #2:
{[Product].[All Products]}
{[Product].[海尔全自动冰箱]}
{[Product].[索尼照相机]}
Row #0: 1,078
Row #0: 2,007.00
Row #0: 43.12
Row #1: 23
Row #1: 2.00
Row #1: 21.12
Row #2: 55
Row #2: 5.00
Row #2: 11.00