汇总

阅读(144) 标签: 汇总, 聚合,

模式判定(最高优先级,必须先执行)

汇总有两种互斥的聚合模式:1.一次聚合 2. 两次聚合

一次聚合是指:某个汇总列(一组汇总参数)只执行一次求值聚合算法,即将多条记录变单值的聚合算法,具体有:首位、末位、合计、最大、最小、计数、唯一计数、平均、连结。语法是:[汇总 {[条件 <过滤条件>] [<被聚合的计算式>] [求值聚合算法] [] [命名 <新列名>]}] [分组 {[<分组计算式>] [命名 <新列名>]}]

两次聚合是指:某个汇总列(一组汇总参数)需要进行两次聚合,第一次是求记录聚合算法,即将多条记录变一条或同值的多条记录,具体有:最大者、最小者。比如订单金额最大的记录,当最大值不重复时结果是一条记录,当最大值重复时结果是多条。第一次聚合算法之后,需要立刻执行第二次的求值聚合算法(将多条记录变单值的聚合算法),才能算出最终结果。比如第一次聚合求出多条订单金额最大的记录,第二次聚合根据这些记录求金额的合计,完整算法是求订单金额最大的记录的金额合计。NLC的两次聚合类似SQLkeep函数。语法是:[汇总 {[条件 <过滤条件>] [<被聚合的计算式>] [求记录聚合算法] [<被聚合的计算式>] [求值聚合算法] [] [命名 <新列名>]}] [分组 {[<分组计算式>] [命名 <新列名>]}]

判定规则(必须严格执行)

如果自然语言所表达出的聚合计算包括:最大者、最小者

→ 必须使用两次聚合。

相反,如果自然语言表达出的聚合计算没有:最大者、最小者,而是只有:首位、末位、合计、最大、最小、计数、唯一计数、平均、连结。

→ 必须使用一次聚合

如果同时出现或语义冲突:

→ 输出错误,不允许猜测

如果未明确表达最大者、最小者:

→ 默认使用一次聚合。

参数结构说明

本功能的参数由汇总、分组这两部分组成,汇总部分的参数名是"汇总",必须省略,是一组或多组同样结构的参数,每组参数表示一个汇总列,由5(一次聚合)7个参数(两次聚合)组成,其中,一次聚合的一组参数是:[条件 <过滤条件>] [<被聚合的计算式>] [求值聚合算法] [] [命名 <新列名>];两次聚合的一组参数是:[条件 <过滤条件>] [<被聚合的计算式>] [求记录聚合算法] [<被聚合的计算式>] [求值聚合算法] [] [命名 <新列名>]。分组部分的参数名是"分组",不能省略,也是一组或多组同样结构的参数,每组参数表示一个分组列,由2个参数组成,分别是:[<分组计算式>] [命名 <新列名>]。先说明汇总部分的参数。

 

参数说明

参数:被聚合的计算式

对组内数据进行聚合计算时,所针对的表达式,通常是与原列有关的表达式,含单列(属于计算式的一种)。比如:单价*数量,这是含有多个列的表达式;金额,这是单列。必要参数;类型是表达式;参数名必须省略,参数值不能省略。注意,本参数必须与参数求值聚合算法求记录聚合算法同时用。某个汇总列如果进行一次聚合,则只有一个被聚合的计算式参数,如果进行两次聚合,则一定有两个被聚合的计算式参数。注意,本参数不支持跨行计算和聚合计算,即计算式里不能含有F[i]F[a:b]形式的相对位置计算,也不能有集合的求和、平均等聚合计算。

参数: 求值聚合算法

对组内数据进行聚合,求出单个数值的固定算法。必要参数;枚举类型;参数名必须省略,参数值省略时,表示取任意一个成员。本参数必须和参数被聚合的计算式一起用。

各枚举值如下:

- 首位、末位:即第1项、最后1项,通常要事先排序才有意义。

- 合计、平均、唯一计数、最大、最小:按常识理解。

- 计数:按常识理解。本枚举值同样必须搭配被聚合的计算式,如果用户指令中没有明确的被聚合的计算式,则用行号字段#代替(也可以是任意字段名、任意常数),比如NLC:汇总 # 计数。

- 连结:用参数[]当分隔符,将参数<被聚合的计算式>连结成一个大字符串。这是一个特殊的求值聚合算法。

 

例子:

求订单例子表的Amount量字段的最大值、Amount量字段的最小值。

NLC:汇总 Amount量 最大, Amount量 最小

结果:

最大Amount  最小Amount

20000  231

解释:"最大Amount""最小Amount"是汇总结果的列名,由系统自动生成,如果想指定列名,应该用参数命名 <新列名>

 

参数: []

当参数求值聚合算法的值是"连结"时,由本参数指定连结所用的分隔符(字符串)。非必要参数,缺省值是空串"";字符串类型;参数名不能省略,参数值不能省略。注意,只有[求值聚合算法]的值是连结时才需要本参数,其他枚举值不需要本参数。

例子:

对订单例子表按SellerId字段分组,将各组的Client字段用逗号合并成一个大字符串,命名为新列"用户列表"

NLC:汇总 Client 连结; ","; 命名 用户列表; 分组 SellerId

部分结果:

SellerId,用户列表

1,TAS,DSGC,GC,HU

3,JFS,NR,KT,JFE,RA

4,NR,EGH,WTC,RHD,ERN,GC

5,WVF,WZ,XY,PAER,SPLI,YZ,ERN,CHO,QU

 

参数: 求记录聚合算法

对组内数据进行聚合,求出单条记录或同值的多条记录的固定算法。必要参数;枚举类型;参数名必须省略,参数值可以省略。本参数一定是为了进行两次聚合,必须和参数被聚合的计算式一起用,必须和求值聚合算法一起用。

各枚举值如下:

最大者、最小者:参数被聚合的表达式最大或最小时所对应的记录(注意不是值),有多个同值的最大值时返回多条记录。

例子:

根据订单例子表求2个汇总值,订单日期最近的记录中的Amount量字段的最大值;Amount量字段的总额。

NLC:汇总 OrderDate 最大者 Amount量 最大, Amount量 合计

结果:

最大者OrderDate最大Amount  合计Amount

20000  4500000

解释:"最大者OrderDate最大Amount""合计Amount"是汇总结果的列名,由系统自动生成,如果想指定列名,应该用参数命名 <新列名>

 

参数:条件 <过滤条件>

在聚合之前,可以先对分组后的记录进行过滤。非必要参数;类型是条件式;参数名不能省略。

例子:

过滤出符合条件式" OrderDate=2019 OrderDate=2020"的记录,再求Amount量的最大值

NLC: 汇总 条件 (OrderDate=2019 OrderDate=2020) ; 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分组,求各组Amount量字段的最大值和最小值。

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

参数:命名 <新列名>

汇总结果和分组列可以由系统自动命名新列名,也可用本参数指定。非必要参数;类型是()标识;参数名不能省略。注意,分组部分和汇总部分有同名的本参数,意义和用法类似。

例子:

求订单例子表的Amount量字段的最大值、最小值,分别命名为大订单金额、小订单金额。

NLC:汇总 Amount量 最大 命名 大订单金额, Amount量 最小 命名 小订单金额

结果:

大订单金额  小订单金额

20000  231

注意:如果省略参数命名 <新列名>,则表示由系统自动命名。