描述:
为序表/排列添加字段。
语法:
A.derive(xi :Fi,…)
备注:
给序表/排列A增加Fi,…字段,对A的每条记录遍历,给每个Fi赋值为xi,返回由原字段与新增字段Fi组成的新序表。
参数:
Fi |
字段名,此时Fi不能与A中原有字段同名。 |
xi |
表达式,计算结果作为字段值。 |
A |
序表/排列。 |
选项:
@m |
数据量大的复杂运算中,并行计算提升性能,计算次序不确定。 |
@i |
有xi且计算结果为空时不生成该行记录。 |
@x(…;n) |
抄原字段时,将字段取值为记录的字段展开,n为层数,缺省为2。 |
@o |
A是纯序表时,增加的列加到原序表上,不产生新的。 |
@z |
逆向计算,仅适用于非纯序列。 |
返回值:
序表
示例:
|
A |
|
1 |
=demo.query("select NAME,BIRTHDAY,HIREDATE from EMPLOYEE") |
|
2 |
=A1.derive(interval@y(BIRTHDAY, HIREDATE):EntryAge,age(HIREDATE):WorkAge) |
|
3 |
=A1.derive@m(age(HIREDATE):WorkAge) |
数据量大时提升性能。 |
4 |
=file("D:\\txt_files\\data1.txt").import@t() |
data1.txt中内容如下: |
5 |
=A4.derive@i(SCORE:score_not_null) |
SCORE计算结果为空时,对应的该条记录不生成。 |
6 |
=demo.query("select * from DEPARTMENT") |
|
7 |
=demo.query("select NAME,GENDER,DEPT,SALARY from EMPLOYEE") |
|
8 |
>A7.switch(DEPT,A6:DEPT) |
将A7表中的DEPT字段值切换为记录。 |
9 |
=A7.derive(SALARY*5:BONUS) |
添加字段BONUS: |
10 |
=A7.derive@x(SALARY*5:BONUS) |
使用@x选项,将原字段取值为记录的字段展开,默认展开两层。 |
11 |
=demo.query("select NAME,BIRTHDAY,HIREDATE from EMPLOYEE").i() |
返回纯序表。 |
12 |
=A11.derive@o(age(HIREDATE):WorkAge) |
增加的列直接加到原序表上,不产生新的,此时A11与A12返回结果相同,结果如下: |
逆向计算:
|
A |
|
1 |
=demo.query("select * from SCORES ") |
返回序表: |
2 |
=A1.derive(cum(SCORE;CLASS,STUDENTID):F1) |
增加字段F1,循环函数中迭代运算,对有相同CLASS,STUDENTID值的SCORE值累积计算,结果作为F1列的值: |
3 |
使用@z选项,逆向计算: |
注意:
new()和derive()的区别:new()是重新构造了一个序表,不改变原序表;而derive()方法是先抄录原有字段再增加字段。