永洪社区

标题: 如何通过脚本在表中增加聚合计算列 [打印本页]

作者: Doka    时间: 2022-5-13 16:41
标题: 如何通过脚本在表中增加聚合计算列
版本8.6升级9.2后,增加字段的脚本报错,提示“聚合计算列不支持再聚合。”

之前在永洪8.6中,制作报告时新增聚合表达式=SUM(col['金额']) / SUM(col['件数'])
然后在脚本中通过脚本,将聚合表达式插入到表1中,脚本如下:
var bcol1 = new BCol('聚合表达式', DOUBLE, true);
var meaCol = new MeasureCol(SUM, bcol1, null);       
表1.binding.addCol(meaCol);

升级迁移到9.2后,聚合表达式变成了计算列,脚本报错,报表不显示内容,字段名“聚合表达式_求和”变红(8.6正常显示时不会显示“_求和”后缀)。
而且此脚本在插入普通度量时没有问题,会正常显示字段名为“度量_求和”

1. 请问聚合计算列插入到表中的脚本应该怎么写?
2. 如果聚合计算列的脚本和普通度量的脚本不同,判断聚合计算列和普通度量的脚本怎么写?

作者: 环环    时间: 2022-5-13 16:41
1. 中间那句改成这样试试  var meaCol = new MeasureCol(NONE, bcol1, null);   
2. 用了聚合函数的就是聚合表达式,聚合函数包括求和、最大值、平均这些
作者: Doka    时间: 2022-5-13 17:45
永洪tech-秀秀 发表于 2022-5-13 17:09
1. 中间那句改成这样试试  var meaCol = new MeasureCol(NONE, bcol1, null);   
2. 用了聚合函数的就是聚 ...

1.换成NONE可以
2.怎么在脚本中判断字段是不是聚合表达式?因为他们在脚本里都只有一个名字,我想实现的是聚合表达式用NONE,正常的度量用SUM
作者: 环环    时间: 2022-5-13 18:02
脚本中判断不了,一个计算列只能是一种计算方式啊,不是聚合就是细节表达式,为什么还需要去判断呢,计算列是怎么做的
作者: Doka    时间: 2022-5-13 18:08
永洪tech-秀秀 发表于 2022-5-13 18:02
脚本中判断不了,一个计算列只能是一种计算方式啊,不是聚合就是细节表达式,为什么还需要去判断呢,计算列 ...

计算列公式:SUM(col['金额']) / SUM(col['件数'])
因为想把正常度量求和,计算列先求和再除,所以有这个需求在
作者: 环环    时间: 2022-5-13 18:17
这样的不就是聚合表达式吗而且同样的名字一个数据集也只会有一个,直接判断字段名就可以吧
作者: Doka    时间: 2022-5-16 09:22
永洪tech-秀秀 发表于 2022-5-13 18:17
这样的不就是聚合表达式吗而且同样的名字一个数据集也只会有一个,直接判断字段名就可以吧 ...

度量里,既有聚合表达式,也有不聚合的正常字段。
正常字段需要用SUM,聚合表达式用NONE,需要做区分,8.6可以全都SUM,但是9.2不行
字段特别多,判断字段名很麻烦而且没法维护。
作者: 永洪tech-cp    时间: 2022-5-16 10:04
Doka 发表于 2022-5-16 09:22
度量里,既有聚合表达式,也有不聚合的正常字段。
正常字段需要用SUM,聚合表达式用NONE,需要做区分,8. ...

不好意思,这个没有其它办法,只能麻烦您手动依次修改一下了
作者: Doka    时间: 2022-5-16 11:01
永洪tech-cp 发表于 2022-5-16 10:04
不好意思,这个没有其它办法,只能麻烦您手动依次修改一下了

那么请问如何判断一个字段名"指标1"是否在一个{'指标1','指标2','指标3'}中呢?
从定义这个数组开始
作者: 永洪tech-cp    时间: 2022-5-16 11:21
您可以使用for循环查找一下

作者: Doka    时间: 2022-5-16 14:06
var a = "ddd"
var aggregateIndex = ['ddd','abc']
if(aggregateIndex.indexOf(a)>=0)
debug("1")
else
debug("2")




欢迎光临 永洪社区 (http://club.yonghongtech.com/) Powered by Discuz! X3.4