润乾报表提供了将olap文件转换为报表的工具类,该类主要用于将olap文件中的报表转换成报表定义模板(rpx),将报表计算结果导出为文件(Excel、csv、tsv),为DQL类型数据集配置字典文件(.dct)、可视文件(.vsb)、设置宏表达式等。
本节主要介绍olap工具类(OlapExportReport)的API方法。
l 构造函数
类名:com.raqsoft.guide.util.export.OlapExportReport
public OlapExportReport() //相当于OlapExportReport("UTF-8",false)
public OlapExportReport(String olapFileCharset, boolean useBigReport)
Parameters:
olapFileCharset - 读取olap文件时使用的字符集
useBigReport - 报表处理中是否以大报表方式生成数据集
l 可用方法
exportToRpxFile
语 法: public void exportToRpxFile(InputStream in, String directoryAbsolutePath)
参数说明:
in - olap文件输入流
directoryAbsolutePath - 报表定义模板rpx的导出目录
功能说明: 将olap中的报表定义模板导出到指定目录
调用举例:
OlapExportReport util = new OlapExportReport("UTF-8", false);
String olapFile = "E:/test.olap";
FileInputStream in = new FileInputStream(olapFile);
util.exportToRpxFile(in, "E:\\rpxFiles");
exportToExcelInOne
语 法: public void exportToExcelInOne(InputStream in, OutputStream out, byte type)
参数说明:
in - olap文件输入流
out - 输出流
type - 导出Excel类型,可选值为OlapExportReport.EXPORT_TYPE_XLS、OlapExportReport.EXPORT_TYPE_XLSX
功能说明: 将olap中的报表计算结果导出到一个Excel文件中,每个报表在一个sheet页中
调用举例:
FileInputStream in = new FileInputStream("E:/test.olap");
FileOutputStream out = new FileOutputStream("E:/exportOlapReportsInOne.xls");
util.exportToExcelInOne(in, out, OlapExportReport.EXPORT_TYPE_XLS); //将olap的报表计算结果导出到一个Excel(xls)文件中
exportToExcelZipFile
语 法: public void exportToExcelZipFile(InputStream in, OutputStream out, byte type, File tempdir, String zipEncode)
参数说明:
in - olap文件输入流
out - 输出流
type - 导出Excel类型,可选值为OlapExportReport.EXPORT_TYPE_XLS、OlapExportReport.EXPORT_TYPE_XLSX
tempdir - 临时文件夹目录,指定为null时,则使用系统临时文件夹目录
zipEncode - 操作系统的编码字符集
功能说明: 将olap中的报表计算结果导出到多个Excel文件中,并将所有Excel文件压缩为zip
调用举例:
FileInputStream in = new FileInputStream("E:/test.olap");
FileOutputStream out = new FileOutputStream("E:/exportOlapReportsAsZip_xlsx.zip");
util.exportToExcelZipFile(in, out, OlapExportReport.EXPORT_TYPE_XLSX, null, "GBK"); //将olap的报表计算结果导出到多个Excel(xlsx)文件中并压缩为zip
exportOneItemToCsvFile
语 法: public void exportOneItemToCsvFile(InputStream in, OutputStream out, String itemName)
参数说明:
in - olap文件输入流
out - 输出流
itemName - olap文件中的报表名称,若有多个报表名称时则只能填写其中的一个
功能说明: 将olap中某一个(指定的itemName)报表计算结果导出到csv文件中(csv文件的数据以逗号分隔)
调用举例:
FileInputStream in = new FileInputStream("E:/test.olap");
FileOutputStream out = new FileOutputStream("E:/exportOlapReportsInOne.csv");
util.exportOneItemToCsvFile(in, out,"网格式_订单表"); //将olap的“网格式_订单表”报表计算结果导出到csv文件中
exportToCsvZipFile
语 法: public void exportToCsvZipFile(InputStream in, OutputStream out, File tempdir, String zipEncode)
参数说明:
in - olap文件输入流
out - 输出流
tempdir - 临时文件夹目录,指定为null时,则使用系统临时文件夹目录
zipEncode - 操作系统的编码字符集
功能说明: 将olap中的报表计算结果导出到多个csv文件中,并将所有csv文件压缩为zip
调用举例:
FileInputStream in = new FileInputStream("E:/test.olap");
FileOutputStream out = new FileOutputStream("E:/exportOlapReportsAsZip_csv.zip");
util.exportToCsvZipFile(in, out, null, "GBK"); //将olap的报表计算结果导出到多个csv文件中并压缩为zip
exportOneItemToTsvFile
语 法: public void exportOneItemToTsvFile(InputStream in, OutputStream out, String itemName)
参数说明:
in - olap文件输入流
out - 输出流
itemName - olap文件中的报表名称,若有多个报表名称时则只能填写其中的一个
功能说明: 将olap中某一个(指定的itemName)报表计算结果导出到tsv文件中(tsv文件的数据以制表符分隔)
调用举例:
FileInputStream in = new FileInputStream("E:/test.olap");
FileOutputStream out = new FileOutputStream("E:/exportOlapReportsInOne.tsv");
util.exportOneItemToTsvFile(in, out,"网格式_订单表"); //将olap的“网格式_订单表”报表计算结果导出到tsv文件中
exportToTsvZipFile
语 法: public void exportToTsvZipFile(InputStream in, OutputStream out, File tempdir, String zipEncode)
参数说明:
in - olap文件输入流
out - 输出流
tempdir - 临时文件夹目录,指定为null时,则使用系统临时文件夹目录
zipEncode - 操作系统的编码字符集
功能说明: 将olap中的报表计算结果导出到多个tsv文件中,并将所有tsv文件压缩为zip
调用举例:
FileInputStream in = new FileInputStream("E:/test.olap");
FileOutputStream out = new FileOutputStream("E:/exportOlapReportsAsZip_tsv.zip");
util.exportToTsvZipFile(in, out, null, "GBK"); //将olap的报表计算结果导出到多个tsv文件中并压缩为zip
cleanCache
语 法: public void cleanCache(String cacheName)
参数说明:
cacheName - 缓存名称
功能说明: 将系统临时文件夹下的cacheName.json文件清除
调用举例: 略
setLoad
语 法: public void setLoad(String vsbPath, String dctPath, String logicDataSourceName)
参数说明:
vsbPath - 可视文件vsb存放位置
dctPath - 字典文件dct存放位置
logicDataSourceName - 数据源名称
功能说明: 为DQL类型数据集配置可视文件(.vsb)和字典文件(.dct)
调用举例: util.setLoad("demo.vsb", "demo.dct","DataLogic");
setLoad
语 法: public void setLoad(String vsbPath, String dctPath, String logicDataSourceName, boolean useDimDataCache, String cacheName)
参数说明:
vsbPath - 可视文件vsb存放位置
dctPath - 字典文件dct存放位置
logicDataSourceName - 数据源名称
useDimDataCache - 是否使用DimData缓存
cacheName - 系统临时文件夹下生成的缓存文件名
功能说明: 为DQL类型数据集配置可视文件(.vsb)和字典文件(.dct),并设置是否加载缓存以及缓存文件名称
调用举例: util.setLoad("demo.vsb", "demo.dct","DataLogic", true, "cacheName");
putFilter
语 法: public void putFilter(String tableName, String macroExpression)
参数说明:
tableName - (DQL表)表名
macroExpression - (DQL表)表可见性的宏表达式
功能说明: 为DQL表添加表可见性的宏表达式
调用举例:
util.setLoad(null, null,"DataLogic");
util.putFilter("雇员", "${T}.雇员姓名=${gy}");
putParam
语 法: public void putParam(String key, String value)
参数说明:
key - 宏名称
value - 宏值
功能说明: 设置宏值
调用举例:
util.setLoad(null, null,"DataLogic");
util.putFilter("雇员", "${T}.雇员姓名=${gy}");
util.putParam("gy", "'李芳'");
removeFilter
语 法: public void removeFilter(String tableName)
参数说明: tableName - (DQL表)表名
功能说明: 删除(DQL表)表可见性的宏表达式
调用举例:
util.setLoad("demo.vsb", null,"DataLogic");
util.removeFilter("雇员");
removeParam
语 法: public void removeParam(String key)
参数说明: key - 宏名称
功能说明: 删除已设置的宏值
调用举例:
util.setLoad("demo.vsb", null,"DataLogic");
util.putParam("gy", "'李芳'");
util.removeParam(("gy");
transfer
语 法: public List<IReport> transfer(InputStream in)
参数说明: in - 输入流
功能说明: 获取olap文件中各个未计算的报表定义
Returns : List<IReport>对象
调用举例:
FileInputStream in = new FileInputStream("E:/test.olap");
List<IReport> reports = util.transfer(in);
本节主要介绍olap工具类(OlapExportReport)的使用,通过学习,可以更深入的了解其用途。
public class ExampleOfOlapExport {
public static void main(String[] args) {
String licenceXml = "E:\\License.xml"; //设置报表授权文件
String raqsoftConfigXml = "E:\\raqsoftConfig.xml"; //设置报表配置文件
try {
loadRaqsoftConfig(licenceXml, raqsoftConfigXml);
} catch (Throwable e) {
e.printStackTrace();
return;
}
//以上为未集成启动报表应用时,需要的准备工作,加载授权文件和配置文件
//设置olap工作目录,涉及到后续报表处理过程中一些必要的后台文件检索
DataSphereServlet.ROOT_PATH = "E:\\eclipse-workspace\\reportNewdemo\\WebRoot";
DataSphereServlet.initDefault();
//图表加载配色方案,需配置该路径并能在其下寻找到config/color.properties文件
System.setProperty("start.home","F:/Program Files/raqsoft/report");
//用于Echarts图形报表的导出
String slimerjsDir = "D:\\slimerjs-0.10.3";
EchartsUtils.setSlimerjsDir( slimerjsDir ); //设定slimerjs安装目录
String slimerExtJsUrl = "F:\\Program Files\\raqsoft\\report\\web\\webapps\\demo\\raqsoft";
EchartsUtils.setEchartsJSUrlPrefix( slimerExtJsUrl ); //设定echarts图形js所在父目录地址,配置到raqsoft目的是为了找到其下/easyui/jquery.min.js和/echarts/echarts2/echarts3等内容
//新建导出工具对象
OlapExportReport util = new OlapExportReport("UTF-8", false); //普通报表方式导出
//OlapExportReport util = new OlapExportReport("UTF-8", true); //大报表方式导出
//为DQL类型数据集配置可视文件(.vsb)和字典文件(.dct)
//配置dctPath、logicDataSourceName时,会尝试生成类似dimDataAll.json的数据
String vsbPath = "demo.vsb"; //使用相对路径时,放至后台文件检索的/WEB-INF/files/dql目录下
String dctPath = "demo.dct"; //使用相对路径时,放至后台文件检索的/WEB-INF/files/dql目录下
String logicDataSourceName = "DataLogic"; //DQL数据源名称
boolean useDimDataCache = true; //设置为true时,会在系统临时文件夹下生成缓存文件并设置cacheName缓存文件名称
String cacheName = "cacheName";
//如果要手动清理缓存可以进行以下操作util.cleanCache(cacheName);
try {
util.cleanCache(cacheName);
} catch (IOException e1) {
e1.printStackTrace();
}
util.setLoad(vsbPath, dctPath,logicDataSourceName, useDimDataCache, cacheName);
//为DQL表添加权限控制
util.putFilter("雇员", "${T}.雇员姓名=${gy}"); //设置DQL表的宏表达式
util.putParam("gy", "'李芳'"); //设置宏值
//指定要处理的olap文件
String olapFile = "E:\\olapFiles\\test.olap";
FileInputStream in = null;
try {
in = new FileInputStream(olapFile);
//导出olap中的报表定义模板到指定目录
util.exportToRpxFile(in, "E:\\exportFiles\\rpxFiles");
//将olap中的报表经过计算后导出
FileOutputStream out = null;
try {
//in为olap文件输入流,out为输出流,可以是文件,也可以再集成系统中用其他输出流
//将olap中报表计算结果导出到一个xls文件中,每个报表结果在一个sheet页中
out = new FileOutputStream("E:/exportFiles/exportOlapReportsInOne.xls");
util.exportToExcelInOne(in, out, OlapExportReport.EXPORT_TYPE_XLS);
out.close();
//将olap中报表计算结果导出到一个xlsx文件中,每个报表结果在一个sheet页中;可用于大报表的导出
out = new FileOutputStream("E:/exportFiles/exportOlapReportsInOne.xlsx");
util.exportToExcelInOne(in, out, OlapExportReport.EXPORT_TYPE_XLSX);
out.close();
//将olap中报表计算结果导出为xls,并将所有xls压缩为zip
out = new FileOutputStream("E:/exportFiles/exportOlapReportsAsZip_xls.zip");
util.exportToExcelZipFile(in, out, OlapExportReport.EXPORT_TYPE_XLS, null, "GBK");
out.close();
//将olap中报表计算结果导出为xlsx,并将所有xlsx压缩为zip;可用于大报表的导出
out = new FileOutputStream("E:/exportFiles/exportOlapReportsAsZip_xlsx.zip");
util.exportToExcelZipFile(in, out, OlapExportReport.EXPORT_TYPE_XLSX, null, "GBK");
out.close();
//将olap中“网格式_订单表”报表计算结果导出为csv
out = new FileOutputStream("E:/exportFiles/exportOlapReportsInOne.csv");
util.exportOneItemToCsvFile(in, out,"网格式_订单表");
out.close();
//将olap中报表计算结果导出为csv,并将所有csv压缩为zip
out = new FileOutputStream("E:/exportFiles/exportOlapReportsCsvAsZip.zip");
util.exportToCsvZipFile(in, out, null, "GBK");
out.close();
//将olap中“网格式_订单表”报表计算结果导出为csv
out = new FileOutputStream("E:/exportFiles/exportOlapReportsInOne.tsv");
util.exportOneItemToTsvFile(in, out,"网格式_订单表");
out.close();
//将olap中报表计算结果导出为tsv,并将所有tsv压缩为zip
out = new FileOutputStream("E:/exportFiles/exportOlapReportsTsvAsZip.zip");
util.exportToTsvZipFile(in, out, null, "GBK");
out.close();
}catch (Exception e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}finally {
if(out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}catch (Exception e) {
e.printStackTrace();
}finally {
if(in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void loadRaqsoftConfig( String licenceXml, String raqsoftConfigXml) throws Throwable{
ExtCellSet.readLicense(licenceXml);
InputStream f = new FileInputStream(raqsoftConfigXml);
ConfigUtil.load(f, true);
f.close();
}