java实现导入essbase,JAVA与财务数据库Essbase连接并取数

废话不多说直接开始

首先Essbase连接分几种,我所知的有2种一种是使用Excel的com插件根据对应的科目加载数据至Excel 表格,另外一种呢就是使用JAVA代码连接Essbase的JAPI接口。

1.配置相关

server.username=username

server.password=password

essbase.address=localhost

essbase.provider=http://localhost:19000/aps/JAPI

首先连接Essbase需要账号密码,其次需要知道JAPI的接口地址以及需要连接的实际数据库所在的机器

ps:以上address和provider一般在正式的环境下这2个不在一台机器上。

2. 代码部分

我们连接取数的时候,类似于使用Excel的模式先构建出一个带门店带科目的表头信息。

左边呢是门店,上面呢是科目相当于2021年的工资数据,可能工资里面有细分到A,B,C,D等等,中间部分呢就是待取的数据

47ce8ef2b51ed7e3c511e4c9210ae8e4.png

好我们开始

首先是公共的抽数方法

/**

* 最终的抽数方法 传入科目信息 以及appname cubename

* @param columns 科目信息

* @param s_appName appName

* @param s_cubeName cubeName

* @return

* @throws Exception

*/

public Map> getEssbaseData(List> columns, String s_appName, String s_cubeName) throws Exception {

properties = CommonUtils.getProperties("config.properties");

s_userName = properties.getProperty("server.username");

s_password = properties.getProperty("server.password");

s_provider = properties.getProperty("essbase.provider");

s_analyticSvrName = properties.getProperty("essbase.address");

IEssbase ess = IEssbase.Home.create(IEssbase.JAPI_VERSION);

IEssDomain dom = ess.signOn(s_userName, s_password, false, null, s_provider);

IEssCubeView cv = dom.openCubeView("Data Query Example", s_analyticSvrName, s_appName, s_cubeName);

cv.setRepeatMemberNames(true);

cv.setIncludeSelection(false);

cv.setSuppressMissing(true);

cv.setSuppressZero(true);

cv.setDrillLevel(IEssOpZoomIn.EEssZoomInPreference.BOTTOM_LEVEL);

cv.updatePropertyValues();

//这里获取你的门店集合 我这里就用new一个新的

List stores = new ArrayList<>();

Map> essbaseDataMap = performCubeViewOperation(ess, cv, stores, columns);

return essbaseDataMap;

}

public Map> performCubeViewOperation(IEssbase ess, IEssCubeView cv, List stores, List> columns) throws EssException {

IEssGridView grid = cv.getGridView();

setEssvaseGridView(grid, stores, columns);

IEssOperation op = null;

op = cv.createIEssOpRetrieve();

cv.performOperation(op);

int cntRows = grid.getCountRows(), cntCols = grid.getCountColumns();

Map> essbaseResultMap = new HashMap<>();

for (int r = columns.get(0).size(); r < cntRows; r++) {

String store = grid.getStringValue(r, 0).trim();

List datas = new ArrayList<>();

for (int j = 1; j < cntCols; j++) {

String value = grid.getStringValue(r, j);

if ("#Missing".equals(value)) {

value = "";

}

datas.add("".equals(value) ? 0.0 : Double.parseDouble(value));

}

essbaseResultMap.put(store, datas);

}

return essbaseResultMap;

}

public void setEssvaseGridView(IEssGridView grid, List stores, List> columns) throws EssException {

// //设置grid 表格大小 多少行 多少列

grid.setSize(columns.get(0).size() + stores.size(), 1 + columns.size());

// //设置 表头

int titleRow = 0;

for (int i = 1; i <= columns.size(); i++) {

for (int j = 0; j < columns.get(i - 1).size(); j++) {

titleRow = columns.get(i - 1).size();

//设置 表格 表头 行 列 数值

grid.setValue(j, i, columns.get(i - 1).get(j));

}

}

//设置门店列

for (int i = 0; i < stores.size(); i++) {

String storeStr = stores.get(i);

//设置 门店 行 列 门店编码 行 为 表头下第一行 列为 0

grid.setValue(titleRow + i, 0, storeStr);

}

}

然后是在其他地方构建一个科目list调用抽数方法

String[] codes= {"NumberA","NumberC","NumberD","NumberE","NumberF","NumberG"}

//构建cells

List> columns = new ArrayList<>();

for (String item : codes) {

List column = new ArrayList<>();

//年

column.add(2021);

column.add("wage");

column.add(item);

columns.add(column);

}

Map> map = getEssbaseData(columns, "appName", "cubeName");

最终返回的这个map的格式是这样子的,key呢是每个门店 value是科目的值,就跟下面的excel表格一样前面的门店是key,后面的值1000-1006是一个有序的list,从1000-1006,当然正常数据不是这样子的只是做一个演示。

e4237174fd25fb0f1c2f817b197273a8.png

以上就是本次全部内容。

标签:JAVA,String,List,取数,grid,stores,cv,columns,Essbase

来源: https://blog.csdn.net/ChenMainShow/article/details/113721661

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值