首先我们通过Designer定义下面的Cube(用接口当然也可以)。
Cube -> Groups
-> Group -> Customer Age
-> Group1 -> Country, State, City
-> Group2 -> Year, Quarter, Month
-> Measures
-> Total
第一步,从design中拿到cube的定义。
IDesignEngine designEngine = new DesignEngine( new DesignConfig( ) );
SessionHandle sessionHandle = designEngine.newSessionHandle( ULocale.ENGLISH );
ReportDesignHandle reportDesignHandle = sessionHandle.openDesign( “design” );
CubeHandle cubeHandle = reportDesignHandle.getModuleHandle( ).findCube( "cube" );
第二步,在DataRequestSession的对象中注册cube的定义。
DataSessionContext dataSessionContext = new DataSessionContext(
DataEngineContext.DIRECT_PRESENTATION );
DataRequestSession dataRequestSession = DataRequestSession
.newSession( dataSessionContext );
dataRequestSession.defineCube( cubeHandle );
第三步,准备Cube Query,cube的实体在这里会被创建。
ICubeQueryDefinition cubeQueryDefinition = new CubeQueryDefinition(
cubeHandle.getName( ) );
IPreparedCubeQuery preparedCubeQuery = dataRequestSession
.prepare( cubeQueryDefinition );
第四步,定义Cube Query。
IEdgeDefinition columnEdge = cubeQueryDefinition
.createEdge( ICubeQueryDefinition.COLUMN_EDGE );
IDimensionDefinition dimension = columnEdge
.createDimension( "Group" );
IHierarchyDefinition hierarchy = dimension
.createHierarchy( "NewTabularHierarchy" );
hierarchy.createLevel( "Customer_Age" );
IEdgeDefinition rowEdge = cubeQueryDefinition
.createEdge( ICubeQueryDefinition.ROW_EDGE );
IDimensionDefinition dimension1 = rowEdge
.createDimension( "Group1" );
IHierarchyDefinition hierarchy1 = dimension1
.createHierarchy( "NewTabularHierarchy1" );
hierarchy1.createLevel( "Country" );
hierarchy1.createLevel( "State" );
hierarchy1.createLevel( "City" );
IDimensionDefinition dimension2 = rowEdge
.createDimension( "Group2" );
IHierarchyDefinition hierarchy2 = dimension2
.createHierarchy( "NewTabularHierarchy2" );
hierarchy2.createLevel( "Year" );
hierarchy2.createLevel( "Quarter" );
hierarchy2.createLevel( "Month" );
cubeQueryDefinition.createMeasure( "Total" );
IBinding binding1 = new Binding( "edge1level1" );
String script1 = "dimension[/"Group/"][/"Customer_Age/"]";
binding1.setExpression( new ScriptExpression( script1 ) );
cubeQueryDefinition.addBinding( binding1 );
IBinding binding2 = new Binding( "edge2level1" );
String script2 = "dimension[/"Group1/"][/"Country/"]";
binding2.setExpression( new ScriptExpression( script2 ) );
cubeQueryDefinition.addBinding( binding2 );
IBinding binding3 = new Binding( "edge2level2" );
String script3 = "dimension[/"Group1/"][/"State/"]";
binding3.setExpression( new ScriptExpression( script3 ) );
cubeQueryDefinition.addBinding( binding3 );
IBinding binding4 = new Binding( "edge2level3" );
String script4 = "dimension[/"Group1/"][/"City/"]";
binding4.setExpression( new ScriptExpression( script4 ) );
cubeQueryDefinition.addBinding( binding4 );
IBinding binding5 = new Binding( "edge3level1" );
String script5 = "dimension[/"Group2/"][/"Year/"]";
binding5.setExpression( new ScriptExpression( script5 ) );
cubeQueryDefinition.addBinding( binding5 );
IBinding binding6 = new Binding( "edge3level2" );
String script6 = "dimension[/"Group2/"][/"Quarter/"]";
binding6.setExpression( new ScriptExpression( script6 ) );
cubeQueryDefinition.addBinding( binding6 );
IBinding binding7 = new Binding( "edge3level3" );
String script7 = "dimension[/"Group2/"][/"Month/"]";
binding7.setExpression( new ScriptExpression( script7 ) );
cubeQueryDefinition.addBinding( binding7 );
IBinding binding8 = new Binding( "Total" );
String script8 = "measure[/"Total/"]";
binding8.setExpression( new ScriptExpression( script8 ) );
cubeQueryDefinition.addBinding( binding8 );
第四步,执行Cube Query。
ICubeQueryResults cubeQueryResults = preparedCubeQuery
.execute( null );
ICubeCursor cubeCursor = cubeQueryResults.getCubeCursor( );
分析输出ICubeCursor的对象可以检验结果是否正确。