olap 工具类

阅读(31) 标签: olap工具类, 报表, 导出,

润乾报表提供了olap文件转换报表的工具类,该类主要用于将olap文件中的报表转换成报表定义模板(rpx),将报表计算结果导出为文件(Excelcsvtsv),为DQL类型数据集配置字典文件(.dct)、可视文件(.vsb)、设置宏表达式等。

OlapExportReport 类

本节主要介绍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_XLSOlapExportReport.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_XLSOlapExportReport.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);

OlapExportReport 实例

本节主要介绍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)

//配置dctPathlogicDataSourceName时,会尝试生成类似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 {

//inolap文件输入流,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();

}

}