模式判定(最高优先级,必须先执行)
汇总有两种互斥的聚合模式:1.一次聚合 2. 两次聚合
一次聚合是指:某个汇总列(一组汇总参数)只执行一次求值聚合算法,即将多条记录变单值的聚合算法,
具体有:首位、末尾、合计、平均、计数、唯一计数、方差、标准差、最大、最小。
语法是:[汇总 {[条件 <过滤条件>] [<被聚合的计算式>] [求值聚合算法] [分隔符 <符号>] [命名 <新列名>]}] [分组 {[<分组计算式>] [命名 <新列名>]}]
两次聚合是指:某个汇总列(一组汇总参数)需要进行两次聚合,第一次是求记录聚合算法,即将多条记录变一条或同值的多条记录,
具体有:最大者、最小者。比如订单金额最大的记录,当最大值不重复时结果是一条记录,当最大值重复时结果是多条。第一次聚合算法之后,需要立刻执行第二次的求值聚合算法(将多条记录变单值的聚合算法),才能算出最终结果。比如第一次聚合求出多条订单金额最大的记录,第二次聚合根据这些记录求金额的合计,完整算法是求订单金额最大的记录的金额合计。NLC的两次聚合类似SQL的keep函数。
语法是:[汇总 {[条件 <过滤条件>] [<被聚合的计算式>] [求记录聚合算法] [<被聚合的计算式>] [求值聚合算法] [分隔符 <符号>] [命名 <新列名>]}] [分组 {[<分组计算式>] [命名 <新列名>]}]
判定规则(必须严格执行):
如果自然语言所表达出的聚合计算包括:最大者、最小者
→ 必须使用两次聚合。
相反,如果自然语言表达出的聚合计算没有:最大者、最小者,而是只有:首位、末尾、合计、平均、计数、唯一计数、方差、标准差、最大、最小。
→ 必须使用一次聚合
如果同时出现或语义冲突:
→ 输出错误,不允许猜测
如果未明确表达最大者、最小者:
→ 默认使用一次聚合。
参数结构说明
本功能的参数由汇总、分组这两部分组成:
汇总部分的参数名是"汇总",必须省略,是一组或多组同样结构的参数,每组参数表示一个汇总列,由5个(一次聚合)或7个参数(两次聚合)组成,其中,一次聚合的一组参数是:[条件 <过滤条件>] [<被聚合的计算式>] [求值聚合算法] [分隔符 <符号>] [命名 <新列名>];两次聚合的一组参数是:[条件 <过滤条件>] [<被聚合的计算式>] [求记录聚合算法] [<被聚合的计算式>] [求值聚合算法] [分隔符 <符号>] [命名 <新列名>]。
分组部分的参数名是"分组",不能省略,也是一组或多组同样结构的参数,每组参数表示一个分组列,由2个参数组成,分别是:[<分组计算式>] [命名 <新列名>]。先说明汇总部分的参数。
参数说明
参数:被聚合的计算式
对组内数据进行聚合计算时,所针对的表达式,通常是与原列有关的表达式,含单列(属于计算式的一种)。比如:单价*数量,这是含有多个列的表达式;金额,这是单列。必要字段;类型是表达式;参数名必须省略,参数值不能省略。注意,本参数必须与参数求值聚合算法或求记录聚合算法同时用。某个汇总列如果进行一次聚合,则只有一个被聚合的计算式参数,如果进行两次聚合,则一定有两个被聚合的计算式参数。注意,本参数不支持跨行计算和聚合计算,即计算式里不能含有F[i]、F[a:b]形式的相对位置计算,也不能有集合的求和、平均等聚合计算。
参数:求值聚合算法
对组内数据进行聚合,求出单个数值的固定算法。必要参数;枚举类型;参数名必须省略,参数值不能省略。本参数必须和参数被聚合的计算式一起用。
各枚举值如下:
首位、末尾:即第1项、最后1项,通常要事先排序才有意义。
合计、平均、计数、唯一计数、方差、标准差、最大、最小:按常识理解。
查重:计算是否重复,即"计数 减 唯一计数",等于0时表示无重复、大于0时表示有重复。
连结:用分隔符连结成员,分隔符用参数[分隔符<符号>]指定。注意,其他聚合算法不需要分隔符。
例子:
求订单例子表的最大金额、最小金额。
NLC:汇总 Amount量 最大, Amount量 最小
结果:
最大Amount量 最小Amount量
20000 231
解释:最大Amount量和Amount量 最小是汇总结果的列名,由系统自动生成,如果想指定列名,应该用参数命名 <新列名>。
参数: 求记录聚合算法
对组内数据进行聚合,求出单条记录或同值的多条记录的固定算法。必要参数;枚举类型;参数名必须省略,参数值不能省略。本参数一定是为了进行两次聚合,必须和参数被聚合的计算式一起用,必须和求值聚合算法一起用。
各枚举值如下:
最大者、最小者:参数被聚合的表达式最大或最小时所对应的记录,有多个最大值时返回多条记录。
例子:
根据订单例子表求订单日期最近的记录的最大的金额、金额合计。
NLC:汇总 OrderDate 最大 Amount量 最大, Amount量 合计
结果:
最大OrderDate最大Amount量 合计Amount量
20000 4500000
解释:"最大OrderDate最大Amount量"和"合计Amount量"是汇总结果的列名,由系统自动生成,如果想指定列名,应该用参数命名 <新列名>。
参数:分隔符 <符号>
当聚合算法是连结时,使用本参数将组内成员(由参数被聚合的表达式指定)合并起来。非必要参数,缺省参数值是空(null);类型是字串;参数名不能省略。
例子:
将订单例子表的ClientID字段用逗号合并起来
NLC:汇总 ClientID 连结 分隔符 逗号
结果:
连结ClientID
WVF,UFS,JFS,DSG,JFE,OLF,PAER,DY,JDR,WBG,GCD,WVF,UFS
参数:条件 <过滤条件>
在聚合之前,可以先对分组后的记录进行过滤。非必要参数;类型是条件式;参数名不能省略。
例子:
过滤出符合条件式" OrderDate年==2019 或 OrderDate年==2020"的记录,再求最大的金额对应的记录
NLC: 汇总 Amount量 最大者
结果:
OrderID ClientID SellerId Amount量 OrderDate
87 WF 15 19000 2019-03-04
42 VET 12 19000 2020-04-08
参数:分组计算式
用于分组的表达式,可以是单字段(属于表达式的一种)。比如,计算出身份证字段的前6位,作为分组字段"区域"。对多个列分组时需要用多组参数,每组有一个分组列参数。必要参数(当有分组部分的参数时);类型为计算式;参数名必须省略。注意,本参数不支持跨行计算和聚合计算,即计算式里不能含有F[i]、F[a:b]形式的相对位置计算,也不能有集合的求和、平均等聚合计算。
例子:
将订单分析表按年份、ClientID分组,求各组最大的金额、最小的金额。
NLC:汇总 Amount量 最大, Amount量 最小; 分组 年份, ClientID
结果:
年份 ClientID 最大Amount量 最小Amount量
2019 WF 19000 2100
2020 WF 12800 2200
2021 WF 14100 1300
2019 TEF 13000 2200
2020 ETF 23000 3100
参数:命名 <新列名>
汇总结果和分组列可以由系统自动命名新列名,也可用本参数指定。非必要参数;类型是(列)标识;参数名不能省略。注意,分组部分也有同名参数,意义和用法类似。
例子:
求订单例子表的最大的金额、最小的金额,分别命名为大订单金额、小订单金额。
NLC:汇总 Amount量 最大, Amount量 最小
结果:
大订单金额 小订单金额
20000 231
注意:如果省略参数命名 <新列名>,则表示自动命名。