官方合并报表在线文档中的方法不能正常使用,多维数据库的开发文档中的方法只能输出结果集,取度量值相当麻烦,故重写了一下官方的方法到MDDQuery
MathUtils
public class MathUtils {
public static BigDecimal getBigDecimal(Object value ) {
BigDecimal ret = null;
if( value != null ) {
if( value instanceof BigDecimal ) {
ret = (BigDecimal) value;
} else if( value instanceof String ) {
ret = new BigDecimal( (String) value );
} else if( value instanceof BigInteger ) {
ret = new BigDecimal( (BigInteger) value );
} else if( value instanceof Number ) {
ret = new BigDecimal( ((Number)value).doubleValue() );
} else {
throw new ClassCastException("Not possible to coerce ["+value+"] from class "+value.getClass()+" into a BigDecimal.");
}
}
return ret;
}
}
MDDConnection
public class MDDConnection {
public static OlapConnection getConnection(String cubeName) {
OlapConnectionStringBuilder strBuilder = new OlapConnectionStringBuilder();
strBuilder.setProvider("kingdee.olap.Shrek");
strBuilder.setDataSource("http://{{实际地址}}}/bos-olap-webserver/services/httpolap");
if (!cubeName.isEmpty()) { //为空时,不设置initialCatalog值,用于判断cube是否存在
strBuilder.setInitialCatalog(cubeName); // 设置即将连接或创建的Cube
}
OlapConnection olapConn = new OlapConnection(strBuilder.toString());
// 设置用户名及密码
olapConn.setUserName("{{用户名}}");
olapConn.setPassword("{{密码}}}");
return olapConn;
}
}
MDDQuery
public class MDDQuery{
private static WatchLogger logger = BcmLogFactory.getWatchLogInstance(true, OlapServiceHelper.class);
private static Log log = LogFactory.getLog(GetOlapDataOpPlugin.class);
public static MDResultSet queryData(SQLBuilder sql) {
if (sql.isCancel()) {
return null;
} else {
sql.checkSelf();
SelectCommandInfo queryInfo = new SelectCommandInfo();
queryInfo.addDims(sql.getSelectField());
queryInfo.addMeasures(sql.getMeasures());
queryInfo.setExcludeDynamicCalcResult(sql.isExcludeDynaData());
sql.getFilters().forEach((p) -> {
queryInfo.addFilter((String)p.p1, (String[])p.p2);
});
if (sql.getTop() > 0) {
queryInfo.setTop(sql.getTop());
}
OlapConnection conn = null;
OlapDataReader cs = null;
MDResultSet var85;
try {
//conn = getOlapConnection("conn","{{用户名}}","{{密码}}}");
conn = MDDConnection.getConnection(sql.getCubecatalog());
conn.Open();
OlapCommand cmd = new OlapCommand(conn, queryInfo);
cs = cmd.ExecuteReader();
// cs = cmd.executeReader(cs.getMetadataBuilder());
MDResultSet rs = new MDResultSet();
CellSetResultSet set = new CellSetResultSet(sql.getCubecatalog(), cs, queryInfo, conn);
set.setIncludeNull(sql.getTop() > 0 || sql.isIncludeNull());
MemSpanTrace span = MemSpanTrace.create("olap", "query");
Throwable var8 = null;
try {
TraceSpan ts = Tracer.create("olap", "query");
Throwable var10 = null;
try {
Auditable audit = Audit.audit("olap_cost", new Object[]{"query", queryInfo});
Throwable var12 = null;
try {
if (Tracer.isTracing() && TraceConfig.isTypeEnable("olap")) {
ts.addTag("sql", queryInfo.toString());
}
ts.addTag("route", sql.getCubecatalog());
rs.populate(set);
ts.addTag("count", String.valueOf(rs.getCount()));
} catch (Throwable var77) {
var12 = var77;
throw var77;
} finally {
if (audit != null) {
if (var12 != null) {
try {
audit.close();
} catch (Throwable var76) {
var12.addSuppressed(var76);
}
} else {
audit.close();
}
}
}
} catch (Throwable var79) {
var10 = var79;
throw var79;
} finally {
if (ts != null) {
if (var10 != null) {
try {
ts.close();
} catch (Throwable var75) {
var10.addSuppressed(var75);
}
} else {
ts.close();
}
}
}
} catch (Throwable var81) {
var8 = var81;
throw var81;
} finally {
if (span != null) {
if (var8 != null) {
try {
span.close();
} catch (Throwable var74) {
var8.addSuppressed(var74);
}
} else {
span.close();
}
}
}
var85 = rs;
} catch (Exception var83) {
logger.error(var83);
throw new MDQueryException(String.format(ResManager.loadKDString("olap 查询失败:%s", "OlapServiceHelper_3", "fi-bcm-business", new Object[0]), var83.getMessage()), var83);
} finally {
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.Close();
}
}
return var85;
}
}
public static BigDecimal get(String Entity, String Account, String BudgetPeriod, String Version, String Currency, String AuditTrail, String ChangeType, String DataType, String Metric, String project1, String ZCMC) {
SQLBuilder sql = new SQLBuilder("{{体系编码}}}");//传入体系编码
String[] dims = {"Entity", "Account", "BudgetPeriod", "Version", "Currency", "AuditTrail", "ChangeType", "DataType", "Metric", "project1", "ZCMC"};//维度名
sql.addSelectField(dims);
//设置维度成员过滤
if (!Objects.equals(Entity, "")) {
sql.addFilter("Entity", Entity);
}
if (!Objects.equals(Account, "")) {
sql.addFilter("Account", Account);
}
if (!Objects.equals(BudgetPeriod, "")) {
sql.addFilter("BudgetPeriod", BudgetPeriod);
}
if (!Objects.equals(Version, "")) {
sql.addFilter("Version", Version);
}
if (!Objects.equals(Currency, "")) {
sql.addFilter("Currency", Currency);
}
if (!Objects.equals(AuditTrail, "")) {
sql.addFilter("AuditTrail", AuditTrail);
}
if (!Objects.equals(ChangeType, "")) {
sql.addFilter("ChangeType", ChangeType);
}
if (!Objects.equals(DataType, "")) {
sql.addFilter("DataType", DataType);
}
if (!Objects.equals(Metric, "")) {
sql.addFilter("Metric", Metric);
}
if (!Objects.equals(project1, "")) {
sql.addFilter("project1", project1);
}
if (!Objects.equals(ZCMC, "")) {
sql.addFilter("ZCMC", ZCMC);
}
Map<Integer, Object> fmoney = new HashMap<>();
//Map<Integer,String> org = new HashMap<>();
MDResultSet rs = MDDQuery.queryData(sql);
int i = 0;
BigDecimal amount = new BigDecimal("0");
while (rs.next()) {//遍历数据8
i++;
Object money = rs.getOriginalValue("FMONEY");//度量值
fmoney.put(i, money.toString());
amount = amount.add(MathUtils.getBigDecimal(fmoney.get(i)));//查出数据集的总和(不一定保险)
}
rs.close();
return amount;
}
public static void set(BigDecimal amount,String Entity, String Account, String BudgetPeriod, String Version, String Currency, String AuditTrail, String ChangeType, String DataType, String Metric, String project1, String ZCMC){
Map<String, Object> params = new HashMap<>();
params.put("modelNumber", "zfbd001");
params.put("datasetNumber", "default");
List<Object[]> memberData = new ArrayList<>();
params.put("dimensions", new String[]{"Entity", "Account", "BudgetPeriod", "Version", "Currency", "AuditTrail", "ChangeType", "DataType", "Metric", "project1", "ZCMC"});
memberData.add(new Object[]{amount, Entity, Account, BudgetPeriod, Version, Currency, AuditTrail, ChangeType, DataType, Metric, project1, ZCMC});
params.put("data", memberData);
try {
Object o = DispatchServiceHelper.invokeBizService("epm", "eb", "ShrekService", "saveData", new Object[]{params});
log.info("o");
} catch (Exception exception) {
log.info(exception.getMessage());
}
memberData.clear();
}
使用示例
BigDecimal yanfazibenhua = MDDQuery.get("","PL1205","FY2023.M12","V1","","","","","Money","","");
MDDQuery.set(yanfazibenhua, "106003000", "BS0416", "FY2023.M12", "V1", "CNY", "EntityInput", "CurrentPeriod", "YE01", "Money", "PRNone", "ZCNone");
![1 1]()
2025年3月4日 20:15
文章深入浅出,既有深度思考,又不乏广度覆盖,令人叹为观止。
2025年3月3日 08:40
案例丰富,数据详实,论证扎实可信。
2025年3月2日 17:56
每一个段落都紧密相连,逻辑清晰,展现了作者高超的写作技巧。
2025年3月1日 12:24
建议补充性能优化方案,增强实用性。
2025年3月1日 04:19
内容的丰富性和深度让人仿佛置身于知识的海洋,受益匪浅。