语法:
{<公式> [聚合] [跨行] [命名 <新列名>]} [分区]
关键规则
Ø 参数[聚合]和参数[跨行]互斥,只能二选一,不能同时出现。
Ø {}符号表示可多次重复,在本功能语法中具体表示可以创建多个计算列,每个计算列有自己的一套参数<公式> [聚合] [跨行] [命名 <新列名>], 计算列之间、计算列和<分区>之间用分号分隔。
参数:<公式>
通常是针对一个字段或多个字段的计算式,也允许常数、空值这种特殊的计算式。必要参数;计算式类型;必须省略参数名。
例子:
用计算式"如果 OrderDate年 等于 2022 且 OrderDate月 等于 3 则 Amount量*1.1"算出订单例子表的计算列目标金额。
NLC:计算列 (如果 OrderDate年 等于 2022 且 OrderDate月 等于 3 则 Amount量*1.1) , 命名 目标金额
参数:[聚合]
[聚合]是在参数<公式>的基础上继续进行聚合计算。
注意,任何<公式>都可以使用本参数;
当<公式>是相对区间F[a:b]形式(a不等于b)时,该值是一个集合,必须使用本参数(不能使用参数[跨行]),比如:订单金额[-2:1],这表示相对于当前位置的前面第2条记录直到后面第1条记录之间共4条记录的订单金额组成的集合;
当参数<公式>不是相对区间形式时,不强制用本参数(即本参数和参数[跨行]二选一),比如:订单金额、订单金额*0.1、单价*数量。同一个分区内用非相对区间(非集合)聚合时各行有可能算出相同的计算结果,用相对区间(集合)聚合时各行的计算结果通常不同,无分区参数时可以看做只有一个分区。
非必要参数;枚举类型;必须省略参数名,不能省略参数值。各项枚举值说明如下:
首位,末尾:即第1项和最后1项,经常要事先排序。
合计、平均、计数、唯一计数、方差、标准差、最大、最小:按常识理解。其中[聚合]的参数值(枚举值)为计数时,参数公式可以省略,或者赋值为*(星号),以遵从SQL的习惯。
查重:即"计数 减 唯一计数",等于0时无重复、大于0时有重复。
连结:将集合的成员用空(null)合并成一个大字符串。
例子:
将订单例子表中每个销售员的ClientID合并起来,填入新列"销售所有ClientID"
NLC:计算列 ClientID, 连结, 命名 销售所在ClientID; 分区 销售员
例子:
对股价表计算5日平均值,填入新列 MA5。
NLC:计算列 收盘价[-2:2] , 平均, 命名 MA5
例子:
针对订单例子表的每个客户,用Amount量字段算出每个客户的订单总金额,填入每条记录的新列"客户总金额"。
NLC:计算列 Amount量, 合计, 命名 客户总金额; 分区 ClientID
例子:
在上面例子的基础上继续计算,将计算式"客户总金额*0.1"的结果写入新列"奖励"。
NLC:计算列 奖励*0.1, 命名 奖励 //分区或不分区的结果相同。
注意,上面2句NLC代码可以合为成下面一句(并非所有情况都能替换),改变了计算顺序但结果不变。
NLC:计算列 Amount量*0.1, 合计, 命名 奖励; 分区 ClientID
参数:[跨行]
在参数<公式>的基础上进行跨行计算,与聚合不同,分区内每行的计算结果不同。非必要参数;枚举类型;参数名必须省略,参数值不能省略。各枚举值如下:
占比:按常识理解。
增长,增长率:增长率是本条比上一条多的比例 value/value[-1]-1。
累计,累计比例:累计比例是当前累计值占合计的比例
例子:
计算订单例子表中每个客户的订单的金额占本客户总金额的比例。
NLC:计算列 Amount量, 占比, 命名 金额占比; 分区 ClientID
部分结果:
OrderID ClientID SellerId Amount量 OrderDate 金额占比
136 ARO 25 899.0 2024-09-23 1.0
16 BDR 27 2464.8 2022-04-30 0.5760493596335421
81 BDR 29 1168.0 2023-08-25 0.2729737309526035
108 BDR 12 480.0 2024-04-03 0.11218098532298774
139 BDR 30 166.0 2024-10-11 0.038795924090866594
93 BON 6 2564.4 2023-11-04 1.0
14 BSF 26 448.0 2022-04-12 0.031124079477560095
79 BSF 9 982.0 2023-08-10 0.06822287064054468
106 BSF 27 10741.6 2024-03-10 0.7462553841878561
137 BSF 18 2222.4 2024-09-26 0.15439766569403918
例子:
创建多个计算列,newField1是每个客户的订单的金额占本客户总金额的比例,newField2是每个客户的订单金额的平均值。
NLC:计算列 Amount量, 占比, 命名 newField1; Amount量, 平均, 命名 newField2; 分区 ClientID
参数:[命名 <新列名>]
为计算列创建的新列名。必要参数;类型是列标识;参数名不能省略。
参数:[分区]
按分区进行计算,分区之间不影响,类似SQL的PARTITION BY。非必要参数;标识类型;参数名不能省略。
例子:
对于已经按订单日期排序的订单例子表,对每个客户的记录用计算式" Amount量[-1]*1.1"进行跨行计算,结果填入新列目标金额,注意客户之间不能互相影响。
NLC:计算列 Amount量[-1]*1.1, 命名 目标金额; 分区 ClientID