-
Shirley 小试身手Lv3
发表于2019-1-19 00:23
楼主
在官网上看到whatif分析的功能,正好符合的业务需要,下面分享下做法:
我需要实现的效果正好与官网中的效果相差不大,也是分为三层(从左往右依次是第1层-第3层)
所以进行简单的修改就可以实现效果。
1.制作报表,把组件按照上图设置好,这就不多说了。
2.在报表区属性中添加脚本:
function whatif(paramNames, expressions, widgetExpressions){
var params = g_rptpage.calcParam.params;
var keys = params.keySet();
var expVals = new Map();
for ( var i = 0, len = keys.length; i < len; i++) {
var param = params.get(keys);
var paramName = param.attribute.name;
if(paramNames.indexOf(paramName) > -1){
if(param instanceof WidgetParamSlide){
expVals.put(paramName, param.getValue());
}
}
}
for(var k = 0; k < widgetExpressions.length; k++){
var wexp = widgetExpressions[k];
var widgetName = wexp[0];
var wexpStr = "";
for(var l = 1; l < wexp.length; l++){
var temp = wexp[l];
var val = expVals.get(temp);
if(val != null){
wexpStr += val;
}else{
wexpStr += temp;
}
}
var widgetObj = g_rptpage.getWidgetByName(widgetName);
widgetObj.setText(eval(wexpStr) + "");//设置圆角矩形的文本值
if('HHH29' == widgetName){//HHH29是第二层中的圆角矩形
_zgn('HHH60',eval(wexpStr) + "",'','','','','');//设置钻取链接(联动式)刷新第2层仪表盘HHH60的指针值
}else if('HHH186' == widgetName){//HHH186是第二层中的圆角矩形
_zgn('HHH61',eval(wexpStr) + "",'','','','','');//设置钻取链接(联动式)刷新第2层仪表盘HHH61的指针值
}
}
var expStr = "";
for(var j = 0; j < expressions.length; j++){
var exp = expressions[j];
var val = expVals.get(exp);
if(val != null){
expStr += val;
}else{
expStr += exp;
}
}
_zgn('HHH32',eval(expStr),'','','','','');//设置第1层仪表盘的指针值
}
//刷新第3层仪表盘指针值所需函数
function refreshchart(paramname, chartname){
var params = g_rptpage.calcParam.params;
var keys = params.keySet();
for ( var i = 0, len = keys.length; i < len; i++) {
var param = params.get(keys);
var paramName = param.attribute.name;
if(paramName == paramname){
_zgn(chartname,param.getValue(),'','','','','');
}
}
}
3.在每个滑块组件中添加钻取设置-万能式脚本:
refreshchart('HHH161','HHH160');
whatif(
['HHH161','HHH130','HHH170','HHH174','HHH176','HHH20','HHH183','HHH141'],//参数1,列出所有参与运算的滑块组件
['(','1','-','HHH176','/','100',')','*','(','HHH161','+','HHH130','-','HHH170','+','HHH174',')','-','(','HHH20','/','100',')','*','HHH183'],//参数2,经济增加值仪表盘值的计算公式
//参数3,第二层仪表盘值的计算公式,需求中分为上下两个部分,所以需要写两组计算公式,用,隔开
[
//HHH29为圆角矩形代号,后半部分为上半部分税后利润成本计算公式
['HHH29','(','1','-','HHH176','/','100',')','*','(','HHH161','+','HHH130','-','HHH170','+','HHH174',')'],
//HHH186为圆角矩形代号,后半部分为下半部分资本成本计算公式
['HHH186','(','HHH20','/','100',')','*','HHH183']
]
);
如此就设置好了。
我需要实现的效果正好与官网中的效果相差不大,也是分为三层(从左往右依次是第1层-第3层)
所以进行简单的修改就可以实现效果。
1.制作报表,把组件按照上图设置好,这就不多说了。
2.在报表区属性中添加脚本:
function whatif(paramNames, expressions, widgetExpressions){
var params = g_rptpage.calcParam.params;
var keys = params.keySet();
var expVals = new Map();
for ( var i = 0, len = keys.length; i < len; i++) {
var param = params.get(keys);
var paramName = param.attribute.name;
if(paramNames.indexOf(paramName) > -1){
if(param instanceof WidgetParamSlide){
expVals.put(paramName, param.getValue());
}
}
}
for(var k = 0; k < widgetExpressions.length; k++){
var wexp = widgetExpressions[k];
var widgetName = wexp[0];
var wexpStr = "";
for(var l = 1; l < wexp.length; l++){
var temp = wexp[l];
var val = expVals.get(temp);
if(val != null){
wexpStr += val;
}else{
wexpStr += temp;
}
}
var widgetObj = g_rptpage.getWidgetByName(widgetName);
widgetObj.setText(eval(wexpStr) + "");//设置圆角矩形的文本值
if('HHH29' == widgetName){//HHH29是第二层中的圆角矩形
_zgn('HHH60',eval(wexpStr) + "",'','','','','');//设置钻取链接(联动式)刷新第2层仪表盘HHH60的指针值
}else if('HHH186' == widgetName){//HHH186是第二层中的圆角矩形
_zgn('HHH61',eval(wexpStr) + "",'','','','','');//设置钻取链接(联动式)刷新第2层仪表盘HHH61的指针值
}
}
var expStr = "";
for(var j = 0; j < expressions.length; j++){
var exp = expressions[j];
var val = expVals.get(exp);
if(val != null){
expStr += val;
}else{
expStr += exp;
}
}
_zgn('HHH32',eval(expStr),'','','','','');//设置第1层仪表盘的指针值
}
//刷新第3层仪表盘指针值所需函数
function refreshchart(paramname, chartname){
var params = g_rptpage.calcParam.params;
var keys = params.keySet();
for ( var i = 0, len = keys.length; i < len; i++) {
var param = params.get(keys);
var paramName = param.attribute.name;
if(paramName == paramname){
_zgn(chartname,param.getValue(),'','','','','');
}
}
}
3.在每个滑块组件中添加钻取设置-万能式脚本:
refreshchart('HHH161','HHH160');
whatif(
['HHH161','HHH130','HHH170','HHH174','HHH176','HHH20','HHH183','HHH141'],//参数1,列出所有参与运算的滑块组件
['(','1','-','HHH176','/','100',')','*','(','HHH161','+','HHH130','-','HHH170','+','HHH174',')','-','(','HHH20','/','100',')','*','HHH183'],//参数2,经济增加值仪表盘值的计算公式
//参数3,第二层仪表盘值的计算公式,需求中分为上下两个部分,所以需要写两组计算公式,用,隔开
[
//HHH29为圆角矩形代号,后半部分为上半部分税后利润成本计算公式
['HHH29','(','1','-','HHH176','/','100',')','*','(','HHH161','+','HHH130','-','HHH170','+','HHH174',')'],
//HHH186为圆角矩形代号,后半部分为下半部分资本成本计算公式
['HHH186','(','HHH20','/','100',')','*','HHH183']
]
);
如此就设置好了。
3个回答
然后小亿建议一下代码其实可以码到代码框里哟,如下图的标志就是代码框哟
提交后结果如下,这样代码规矩又好看哟!