计算列

阅读(2) 标签: 计算列, 公式, 聚合, 跨行, 分区,

语法:

{<公式> [聚合] [跨行] [命名 <新列名>]} [分区]

关键规则

Ø  参数[聚合]和参数[跨行]互斥,只能二选一,不能同时出现。

Ø  {}符号表示可多次重复,在本功能语法中具体表示可以创建多个计算列,每个计算列有自己的一套参数<公式> [聚合] [跨行] [命名 <新列名>], 计算列之间、计算列和<分区>之间用分号分隔。

参数:<公式>

通常是针对一个字段或多个字段的计算式,也允许常数、空值这种特殊的计算式。必要参数;计算式类型;必须省略参数名。

例子:

用计算式"如果 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, 命名 奖励  //分区或不分区的结果相同。

注意,上面2NLC代码可以合为成下面一句(并非所有情况都能替换),改变了计算顺序但结果不变。

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

参数:[命名 <新列名>]

为计算列创建的新列名。必要参数;类型是列标识;参数名不能省略。

参数:[分区]

按分区进行计算,分区之间不影响,类似SQLPARTITION BY。非必要参数;标识类型;参数名不能省略。

例子:

对于已经按订单日期排序的订单例子表,对每个客户的记录用计算式" Amount[-1]*1.1"进行跨行计算,结果填入新列目标金额,注意客户之间不能互相影响。

NLC:计算列 Amount[-1]*1.1, 命名 目标金额; 分区 ClientID