...
使用mysql客户端或者其它第三方工具,连接Smartbi内置的mysql回写库(writedb),在其中新建t_budget表,用于存储预算表的数据。
字段名称 | 字段类型 | 字段说明 |
---|---|---|
YEAR | char(4) | 填报的年份 |
deptid | Varchar(20) | 填报的部门ID |
metricid | Varchar(20) | 填报的科目 |
val | Double | 填报的数值 |
SQL: CREATE TABLE t_budget (YEAR CHAR(4), deptid VARCHAR(20), metricid VARCHAR(20), val DOUBLE) ENGINE=InnoDB DEFAULT CHARSET=gbk |
在数据库中创建好表后,在Smartbi系统中,找到“回写”数据源,通过右键的“数据库管理”功能,将t_budget表引入到系统中。
...
默认值去当前用户所在的用户组,SQL为:select c_orgid as orgid,c_groupalias as grouname groupname from t_group where c_orgid=%CurrentUserDefaultDepartmentID()%。其中CurrentUserDefaultDepartmentID是系统的内置函数,从左侧资源树上拖入。
根节点的SQL和默认值SQL相同。
自定义父子关系选择orgid字段。
...
2.2.4 准备查询
新建一个SQL查询,选择“回写”数据源,输入SQL语句:SELECT YEAR,deptid,metricid,val from t_budget where YEAR=%填报年份% and deptid= %填报机构% order by metricid asc,其中填报年月和填报机构是上一步准备的参数,从左侧节点拖入。点击工具栏上的“高级设置”按钮,在弹出的窗口中,设置缓存策略为“禁止缓存”。
...
2.2.5 制作可回写的电子表格
...
1) 从右侧的数据集面板中找到上一步创建的查询,将val字段拖动到D6、D7、D8、D9、D10、D11、D12、D13单元格, ,并分别设置单元格的过滤条件,metricid与当前行的C列的值对应。并分别设置单元格的过滤条件,metricid与当前行的C列的值对应。
2) 设置D6、D7、D8、D9、D10、D11、D12、D13单元格的填报属性为允许修改,类型是数字。
3) 将C2、D2单元格合并,并设置为引用参数填报机构的值来显示,将B3、C3单元格合并,并设置为引用参数填报年份的值来显示
4) 点击工具栏上的回写规则按钮,在弹出窗口中设置回写规则。数据库选回写,表选择前面导入的t_budget,在列出的字段中,YEAR对应填报年月参数,deptid对应填报机构参数,metricid对应B5单元格,val对应C5单元格。通过复制按钮,复制多条回写规则,分别对应D6、D7、D8、D9、D10、D11、D12、D13单元格。budget,在列出的字段中,YEAR对应填报年月参数,deptid对应填报机构参数,metricid对应B5单元格,val对应C5单元格。通过复制按钮,复制多条回写规则,分别对应D6、D7、D8、D9、D10、D11、D12、D13单元格。
之后发布报表,命名为“管理费用预算表”。
...
2.2.6 制作流程
通过定制主界面的“定制流程”进入流程制作窗口。电子表格选择上一步建立的电子表格“管理费用预算表”,汇总相关机构参赛选择“填报机构”,流程参数选择 “填报年份”。
...
点击“+”新增一个流程节点,流程名称输入“总经理审核”,操作者选择“总经理”角色,节点类型是“审核”,操作按钮选择“审核”(必选)、“回退”
点击保存按钮保存流程定义。
2.2.7 设置汇总逻辑
由于流程中存在汇总,需要对业务数据做汇总处理逻辑,因此需要通过编写宏来实现。在流程定义上右键,编辑宏,在宏界面中,新建客户端模块,选择对象是WORKFLOW,事件是“beforeSummary(在汇总之前)”。输入以下脚本
代码块 |
---|
function main(spreadsheetReport, currentNode) { var p1 = spreadsheetReport.paramPanelObj.findParamByName('填报机构'); var p2 = spreadsheetReport.paramPanelObj.findParamByName('填报年份'); var util = jsloader.resolve("freequery.common.util"); //删除已有的汇总 var sql = "delete from t_budget where YEAR='" + p2.value + "' and deptid='" + p1.value + "'"; var ret = util.remoteInvoke("DataSourceService", "executeUpdate", ["DS.回写", sql]); if (ret && ret.succeeded) { //计算汇总 var sql = "insert into t_budget(YEAR,deptid,metricid,val) " + "select '" + p2.value + "','" + p1.value + "',metricid,sum(val) " + " from t_budget where YEAR='" + p2.value + "' and deptid<>'" +p1.value + "' group by metricid "; var ret = util.remoteInvoke("DataSourceService", "executeUpdate", ["DS.回写", sql]); if (ret && ret.succeeded) { spreadsheetReport.doRefresh(); return true; } } } |
...
2.2.8 开始流程流转
1) 深圳用户进行基层填报
...