📄 olapexample.java
字号:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/**
* Title: XELOPES Data Mining Library
* Description: The XELOPES library is an open platform-independent and data-source-independent library for Embedded Data Mining.
* Copyright: Copyright (c) 2002 Prudential Systems Software GmbH
* Company: ZSoft (www.zsoft.ru), Prudsys (www.prudsys.com)
* @author Carsten Weisse
* @author Michael Thess
* @version 1.2
*/
package com.prudsys.pdm.Examples;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.olap.query.enumerations.DimensionStepTypeEnum;
import javax.olap.query.enumerations.OperatorTypeEnum;
import javax.olap.query.enumerations.SetActionTypeEnum;
import javax.olap.query.enumerations.SortTypeEnum;
import com.prudsys.pdm.Core.MiningAttribute;
import com.prudsys.pdm.Core.MiningDataSpecification;
import com.prudsys.pdm.Cwm.Core.Attribute;
import com.prudsys.pdm.Input.Records.Csv.MiningCsvStream;
import com.prudsys.pdm.Olap.OlapEngine;
import com.prudsys.pdm.Olap.Cursor.CubeCursor;
import com.prudsys.pdm.Olap.Cursor.DimensionCursor;
import com.prudsys.pdm.Olap.Cursor.EdgeCursor;
import com.prudsys.pdm.Olap.Metadata.Cube;
import com.prudsys.pdm.Olap.Metadata.CubeClass;
import com.prudsys.pdm.Olap.Metadata.CubeDimensionAssociation;
import com.prudsys.pdm.Olap.Metadata.Dimension;
import com.prudsys.pdm.Olap.Metadata.DimensionClass;
import com.prudsys.pdm.Olap.Metadata.Measure;
import com.prudsys.pdm.Olap.Metadata.MeasureClass;
import com.prudsys.pdm.Olap.Metadata.Schema;
import com.prudsys.pdm.Olap.Metadata.SchemaClass;
import com.prudsys.pdm.Olap.Metadata.Measures.AggregationMeasure;
import com.prudsys.pdm.Olap.Metadata.Measures.BinaryOperatorMeasure;
import com.prudsys.pdm.Olap.Query.Core.CubeView;
import com.prudsys.pdm.Olap.Query.Core.DimensionStepManager;
import com.prudsys.pdm.Olap.Query.Core.DimensionView;
import com.prudsys.pdm.Olap.Query.Core.EdgeView;
import com.prudsys.pdm.Olap.Query.Core.MeasureView;
import com.prudsys.pdm.Olap.Query.DimensionFilters.AttributeFilter;
import com.prudsys.pdm.Olap.Query.Sorting.AttributeSort;
import com.prudsys.pdm.Olap.Resource.Connection;
/**
* Example of how to use Xelopes OLAP server.
*/
public class OlapExample extends BasisExample {
/**
* Empty constructor.
*/
public OlapExample() {
}
/**
* Create OLAP schema with one cube. Use native CWM methods.
*
* @throws Exception couldn't run CWM methods
*/
private void runCwm() throws Exception {
// Create local OLAP engine:
OlapEngine olap = new OlapEngine();
// Open data source:
MiningCsvStream inputStream = new MiningCsvStream("data/csv/carsales.csv");
inputStream.open();
// Assign source stream to OLAP engine:
olap.setInputStream(inputStream);
// Create dimensions:
Dimension product = (Dimension) olap.getDimension().createDimension();
product.setName("Product");
Attribute productAtt = olap.getInputAttribute("product");
product.addFeature(productAtt);
Dimension geog = (Dimension) olap.getDimension().createDimension();
geog.setName("Geography");
Attribute countryAtt = olap.getInputAttribute("country");
geog.addFeature(countryAtt);
Attribute cityAtt = olap.getInputAttribute("city");
geog.addFeature(cityAtt);
Dimension time = (Dimension) olap.getDimension().createDimension();
time.setName("Time");
Attribute timeAtt = olap.getInputAttribute("time");
time.addFeature(timeAtt);
Dimension channel = (Dimension) olap.getDimension().createDimension();
channel.setName("Channel");
Attribute channelAtt = olap.getInputAttribute("channel");
channel.addFeature(channelAtt);
// Create an overall holding schema:
javax.olap.serversidemetadata.Schema dimensionalSchema = olap.getSchema().createSchema();
dimensionalSchema.addDimension(product);
dimensionalSchema.addDimension(geog);
dimensionalSchema.addDimension(time);
dimensionalSchema.addDimension(channel);
// Create the cube:
javax.olap.serversidemetadata.Cube salesCube = olap.getCube().createCube();
salesCube.setName("Sales Cube");
// Add measures:
Measure sales = (Measure) olap.getMeasure().createMeasure();
sales.setName("Sales");
sales.setOwner(salesCube);
Measure cost = (Measure) olap.getMeasure().createMeasure();
cost.setName("Cost");
cost.setOwner(salesCube);
Measure Profit = (Measure) olap.getMeasure().createMeasure();
Profit.setName("Profit");
Profit.setOwner(salesCube);
// Create the four cube dimension associations:
CubeDimensionAssociation prodAsso = (CubeDimensionAssociation) olap.getCubeDimensionAssociation().createCubeDimensionAssociation();
prodAsso.setDimension(product);
salesCube.addCubeDimensionAssociation(prodAsso);
CubeDimensionAssociation geogAsso = (CubeDimensionAssociation) olap.getCubeDimensionAssociation().createCubeDimensionAssociation();
geogAsso.setDimension(geog);
salesCube.addCubeDimensionAssociation(geogAsso);
CubeDimensionAssociation timeAsso = (CubeDimensionAssociation) olap.getCubeDimensionAssociation().createCubeDimensionAssociation();
timeAsso.setDimension(time);
salesCube.addCubeDimensionAssociation(timeAsso);
CubeDimensionAssociation channAsso = (CubeDimensionAssociation) olap.getCubeDimensionAssociation().createCubeDimensionAssociation();
channAsso.setDimension(channel);
salesCube.addCubeDimensionAssociation(channAsso);
// Add cube to the schema:
dimensionalSchema.addCube(salesCube);
System.out.println("schema: " + dimensionalSchema);
}
/**
* Create OLAP connection object.
*
* @return connection object
* @throws Exception couldn't create OLAP connection
*/
private javax.olap.resource.Connection createOlapConnection() throws Exception {
// Define initial context:
Hashtable env = new Hashtable();
String factoryClassName = com.prudsys.pdm.Olap.Resource.ConnectionFactory.class.
getName();
env.put(Context.INITIAL_CONTEXT_FACTORY, factoryClassName);
Context initCtx = new InitialContext(env);
// Obtain JOLAP ConnectionFactory from JNDI tree:
javax.olap.resource.ConnectionFactory cf = (javax.olap.resource.
ConnectionFactory)
initCtx.lookup("JOLAPServer");
// Create connection specification:
javax.olap.resource.ConnectionSpec cs = cf.createConnectionSpec();
cs.setName("test");
cs.setPassword("tester");
// Establish connection to the OLAP resource:
javax.olap.resource.Connection conn = cf.getConnection(cs);
return conn;
}
/**
* Create OLAP schema with one cube. Use local methods.
*
* @param conn connection with local OLAP object
* @throws Exception couldn't create OLAP schema
*/
private void createOlapSchema(Connection conn) throws Exception {
// Get OLAP engine of connection:
OlapEngine olap = conn.getOlapEngine();
// Open data source:
MiningCsvStream inputStream = new MiningCsvStream("data/csv/carsales.csv");
inputStream.open();
// Assign source stream to OLAP engine:
olap.setInputStream(inputStream);
// Create flat dimensions:
DimensionClass dimClass = (DimensionClass) olap.getDimension();
Dimension product = dimClass.createDimension("Product", "product");
Dimension time = dimClass.createDimension("Time", "time");
Dimension channel = dimClass.createDimension("Channel", "channel");
// Create hierarchical dimension:
Dimension geog = dimClass.createHierachicalDimension("Geography");
geog.addInputAttribute( olap.getInputAttribute("country") ); // level 0
geog.addInputAttribute( olap.getInputAttribute("city") ); // level 1
// Create measures:
MeasureClass measClass = (MeasureClass) olap.getMeasure();
Measure sales = measClass.createAggregationMeasure("Sales",
AggregationMeasure.SUM, olap.getInputAttribute("sales") );
Measure cost = measClass.createAggregationMeasure("Cost",
AggregationMeasure.SUM, olap.getInputAttribute("cost") );
Measure profit = measClass.createBinaryOperatorMeasure("Profit",
BinaryOperatorMeasure.MINUS, sales, cost);
// Create measure dimension:
Dimension meas = dimClass.createMeasureDimension("Measures");
meas.addInputAttribute(sales);
meas.addInputAttribute(cost);
meas.addInputAttribute(profit);
// Create an overall holding schema:
SchemaClass schemaClass = (SchemaClass) olap.getSchema();
Schema dimensionalSchema = schemaClass.createSchema("All");
dimensionalSchema.addDimension(product);
dimensionalSchema.addDimension(geog);
dimensionalSchema.addDimension(time);
dimensionalSchema.addDimension(channel);
dimensionalSchema.addDimension(meas);
// Create the cube:
CubeClass cubeClass = (CubeClass) olap.getCube();
Cube salesCube = cubeClass.createCube("Sales Cube");
// Create the four cube dimension associations:
salesCube.addDimension(product);
salesCube.addDimension(geog);
salesCube.addDimension(time);
salesCube.addDimension(channel);
salesCube.addDimension(meas);
// Add cube to the schema:
dimensionalSchema.addCube(salesCube);
// Add schema to OLAP engine:
olap.setCurrentSchema(dimensionalSchema);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -