集智平台如何实现sum空值时显示也为空

需求背景

集智平台中的报表提供的单元格sum函数能方便地求得报表各个单元格的和,由于sum函数属于数学函数,结果必然也是数值,所以sum空值的结果是0.0

最近有的客户提出这样的需求:当要求和的单元格都为空时,显示空;当只有空和0时,显示0;当存在正常的数字时,得到相应的和。对于这个需求本文中给出如下两种实现方法。

实现方法

通过JS实现

首先看一下报表,见下图。其中C3是我们要显示”乡村人口”的总和,即需求提到的效果。C1用于js中读取乡村人口字段所有值,设置为不可扩展。

在发布该报表的jsp中增加如下js代码

<script language=“javascript”>

var value = document.getElementById(“report1_C1″).innerText;

var arr_people = value.split(“,”);

var flag1 = 0; //null标识位

var flag2 = 0; //0标识位

var sumValue = 0;

for(var i=0;i<arr_people.length;i++){

if(arr_people[i]==‘null’){

flag1=1; //当有值为null时,空标识位为1

//alert(“flag1=”+flag1);

}else if(arr_people[i]==’0′){

flag2=1; //当有值为0时,0标识位为1

}else{

flag1=2; //出现非0null时,空标志位为2

flag2=2; //出现非0null时,0标识位为2

break; //出现非0null,退出循环

}

}

for(var i=0;i<arr_people.length;i++){

if(arr_people[i]!=‘null’){

sumValue+=parseFloat(arr_people[i]); //求非空数据和

}

}

if(flag1==1 && flag2==0){//全部为null

document.getElementById(“report1_C3″).innerHTML=;

}else if(flag1!=2 && flag2==1){//全部为空或0

document.getElementById(“report1_C3″).innerHTML=’0′;

}else{//存在数字时

document.getElementById(“report1_C3″).innerHTML=sumValue;

}

</script>

此实现方式比较固定,所以如果要显示的单元格比较多时,比较麻烦。好处是在程序中处理业务会比报表更灵活。

通过报表表达式实现

C3单元格的显示值表达式中写入:if(ds1.count(乡村人口==null)==ds1.count(),”",value())

此方法实现简单,适合大量单元格使用,缺点就是没有程序处理灵活。