使用BIRT API创建交叉报表2

本文介绍如何使用 BIRT 工具创建多维数据集,并通过具体代码示例展示了数据源、数据集及多维数据集的构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[url]https://code.google.com/p/my-open-source/source/browse/code/birt/CreateDataCube.java?spec=svn4&r=4[/url]

package tes.birt;

import java.io.IOException;

import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.item.crosstab.core.ICrosstabConstants;
import org.eclipse.birt.report.item.crosstab.core.de.CrosstabCellHandle;
import org.eclipse.birt.report.item.crosstab.core.de.CrosstabReportItemHandle;
import org.eclipse.birt.report.item.crosstab.core.de.DimensionViewHandle;
import org.eclipse.birt.report.item.crosstab.core.de.LevelViewHandle;
import org.eclipse.birt.report.item.crosstab.core.de.MeasureViewHandle;
import org.eclipse.birt.report.item.crosstab.core.util.CrosstabExtendedItemFactory;
import org.eclipse.birt.report.model.api.ComputedColumnHandle;
import org.eclipse.birt.report.model.api.DataItemHandle;
import org.eclipse.birt.report.model.api.DataSetHandle;
import org.eclipse.birt.report.model.api.DesignConfig;
import org.eclipse.birt.report.model.api.DesignElementHandle;
import org.eclipse.birt.report.model.api.ElementFactory;
import org.eclipse.birt.report.model.api.ExtendedItemHandle;
import org.eclipse.birt.report.model.api.IDesignEngine;
import org.eclipse.birt.report.model.api.IDesignEngineFactory;
import org.eclipse.birt.report.model.api.LabelHandle;
import org.eclipse.birt.report.model.api.OdaDataSetHandle;
import org.eclipse.birt.report.model.api.OdaDataSourceHandle;
import org.eclipse.birt.report.model.api.ReportDesignHandle;
import org.eclipse.birt.report.model.api.ReportItemHandle;
import org.eclipse.birt.report.model.api.SessionHandle;
import org.eclipse.birt.report.model.api.StructureFactory;
import org.eclipse.birt.report.model.api.activity.SemanticException;
import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants;
import org.eclipse.birt.report.model.api.elements.structures.ComputedColumn;
import org.eclipse.birt.report.model.api.extension.IReportItem;
import org.eclipse.birt.report.model.api.olap.MeasureGroupHandle;
import org.eclipse.birt.report.model.api.olap.MeasureHandle;
import org.eclipse.birt.report.model.api.olap.TabularCubeHandle;
import org.eclipse.birt.report.model.api.olap.TabularDimensionHandle;
import org.eclipse.birt.report.model.api.olap.TabularHierarchyHandle;
import org.eclipse.birt.report.model.api.olap.TabularLevelHandle;
import org.eclipse.birt.report.model.elements.interfaces.ICubeModel;

import com.ibm.icu.util.ULocale;

/**
* Simple BIRT Design Engine API (DEAPI) demo.
*/

public class CreateDataCube {
ReportDesignHandle designHandle = null;
ElementFactory designFactory = null;
StructureFactory structFactory = null;

public static void main(String[] args) {
try {
CreateDataCube de = new CreateDataCube();
de.buildReport();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SemanticException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

void buildDataSource() throws SemanticException {

OdaDataSourceHandle dsHandle = designFactory.newOdaDataSource(
"Data Source", "org.eclipse.birt.report.data.oda.jdbc");
dsHandle.setProperty("odaDriverClass",
"org.eclipse.birt.report.data.oda.sampledb.Driver");
dsHandle.setProperty("odaURL", "jdbc:classicmodels:sampledb");
dsHandle.setProperty("odaUser", "ClassicModels");
dsHandle.setProperty("odaPassword", "");
designHandle.getDataSources().add(dsHandle);

}

void buildDataSet() throws SemanticException {

OdaDataSetHandle dsHandle = designFactory.newOdaDataSet("ds",
"org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet");
dsHandle.setDataSource("Data Source");
String qry = "Select * from customers";

dsHandle.setQueryText(qry);

designHandle.getDataSets().add(dsHandle);

}

void buidCube() throws SemanticException {

// 使用引擎工厂创建TabularCube 指定名称 创建多维数据集 名称为 "MyCube"
TabularCubeHandle cubeHandle = designHandle.getElementFactory()
.newTabularCube("MyCube");

// 获取第一个dataset 对象 填充到多维数据集 "MyCube"
cubeHandle
.setDataSet((DataSetHandle) designHandle.getDataSets().get(0));
// 把多维数据集加入引擎
designHandle.getCubes().add(cubeHandle);

// measure group 创建多为数据集的度量 名称为"testMeasureGroup"
MeasureGroupHandle measureGroupHandle = designHandle
.getElementFactory().newTabularMeasureGroup("testMeasureGroup");

// designHandle.getElementFactory().newTabularMeasureGroup("testMeasureGroup"
// );

cubeHandle.setProperty(ICubeModel.MEASURE_GROUPS_PROP,
measureGroupHandle);// 设置为度量的多为数据集
// cubeHandle.add(ICubeModel.MEASURE_GROUPS_PROP, measureGroupHandle);
// measure
measureGroupHandle.add(MeasureGroupHandle.MEASURES_PROP,
designFactory.newTabularMeasure(null));
MeasureHandle measure = (MeasureHandle) measureGroupHandle.getContent(
MeasureGroupHandle.MEASURES_PROP, 0);
// 设置 Measure
measure.setName("CREDITLIMIT");
// 设置表达式
measure.setMeasureExpression("dataSetRow['CREDITLIMIT']");
// 设置计算函数
measure.setFunction(DesignChoiceConstants.MEASURE_FUNCTION_SUM);
// 是否根据其他度量计算

measure.setCalculated(false);
// 设置数据类型DesignChoiceConstants.COLUMN_DATA_TYPE_FLOAT
measure.setDataType(DesignChoiceConstants.COLUMN_DATA_TYPE_FLOAT);

// dimension 设置 未指定name
TabularDimensionHandle dimension = designFactory
.newTabularDimension(null);
cubeHandle.add(TabularCubeHandle.DIMENSIONS_PROP, dimension);
dimension.setTimeType(false);
// dimension.setDefaultHierarchy( factory
// .newTabularHierarchy( "testDefaultHierarchy" ) );

// hierarchy
dimension.add(TabularDimensionHandle.HIERARCHIES_PROP,
designFactory.newTabularHierarchy(null));
TabularHierarchyHandle hierarchy = (TabularHierarchyHandle) dimension
.getContent(TabularDimensionHandle.HIERARCHIES_PROP, 0);
// hierarchy.setName( namePrix + hierarchy.getName( ) );
hierarchy.setDataSet((DataSetHandle) designHandle.getDataSets().get(0));

// 添加组信息
hierarchy.add(TabularHierarchyHandle.LEVELS_PROP,
designFactory.newTabularLevel(dimension, null));
TabularLevelHandle level = (TabularLevelHandle) hierarchy.getContent(
TabularHierarchyHandle.LEVELS_PROP, 0);
level.setName("testlevel");
level.setColumnName("CUSTOMERNAME");
level.setDataType(DesignChoiceConstants.COLUMN_DATA_TYPE_STRING);

// 创建 交叉报表
ExtendedItemHandle xtab = CrosstabExtendedItemFactory
.createCrosstabReportItem(designHandle, cubeHandle,
"MyCrosstab");
// /xtab.setWidth(500);
// xtab.setHeight(500);
// 添加到body内

designHandle.getBody().add(xtab);

IReportItem reportItem = xtab.getReportItem();
CrosstabReportItemHandle xtabHandle = (CrosstabReportItemHandle) reportItem;
// ICrosstabConstants.COLUMN_AXIS_TYPE
// ICrosstabConstants.ROW_AXIS_TYPE
// xtabHandle.getMeasure(index)
// DimensionViewHandle dvh = xtabHandle.insertDimension(dimension,
// ICrosstabConstants.COLUMN_AXIS_TYPE, 0);
DimensionViewHandle dvh = xtabHandle.insertDimension(dimension,
ICrosstabConstants.ROW_AXIS_TYPE, 0);
LevelViewHandle levelViewHandle = dvh.insertLevel(level, 0);
CrosstabCellHandle cellHandle = levelViewHandle.getCell();
DesignElementHandle eii = xtabHandle.getModelHandle();

ComputedColumn bindingColumn = StructureFactory.newComputedColumn(eii,
level.getName());
ComputedColumnHandle bindingHandle = ((ReportItemHandle) eii)
.addColumnBinding(bindingColumn, false);
bindingColumn.setDataType(level.getDataType());

String exp = "dimension['" + dimension.getName() + "']['"
+ level.getName() + "']";
bindingColumn.setExpression(exp);

// xtabHandle.addGrandTotal(axisType, measureList, functionList)
DataItemHandle dataHandle = designFactory.newDataItem(level.getName());
dataHandle.setResultSetColumn(bindingHandle.getName());
cellHandle.addContent(dataHandle);
}

void buildReport() throws IOException, SemanticException {

DesignConfig config = new DesignConfig();
config.setBIRTHome("E:/birt-runtime-3_7_1/ReportEngine");
IDesignEngine engine = null;
try {

Platform.startup(config);
IDesignEngineFactory factory = (IDesignEngineFactory) Platform
.createFactoryObject(IDesignEngineFactory.EXTENSION_DESIGN_ENGINE_FACTORY);
engine = factory.createDesignEngine(config);

} catch (Exception ex) {
ex.printStackTrace();
}

SessionHandle session = engine.newSessionHandle(ULocale.ENGLISH);

try {
// open a design or a template
designHandle = session.createDesign();

designFactory = designHandle.getElementFactory();

buildDataSource();
buildDataSet();
buidCube();

// Save the design and close it. output/desample/

designHandle.saveAs("output/birtsample/cubetest.rptdesign");
designHandle.close();
Platform.shutdown();
System.out.println("Finished");
} catch (Exception e) {
e.printStackTrace();
}

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值