(已解决) fjoin@m 拼接维表字段的问题

先说问题:用 fjoin 往事实表上拼接维表字段,以下写法哪个是正确的?

不用并行选项 @m 时:

1、事实表.fjoin(维表.find( 事实表字段), 维表字段 )

2、事实表.fjoin(维表.find( 事实表字段),~. 维表字段 )

使用并行选项 @m 时:

3、事实表.fjoin@m(维表.find( 事实表字段), 维表字段 )

4、事实表.fjoin@m(维表.find( 事实表字段),~. 维表字段 )

经测试发现:

在不使用并行选项时,拼接维表字段写成 "字段名" 或者 "~. 字段名" 都可以,但是,

在使用并行选项时,拼接维表字段必须要写成 "~. 字段名",此时如果光写成 "字段名" 有些情况会不正确,而有些情况又没有问题。

比如,有 3 张表:

事实表:员工信息表 “Employees.txt”,
维度表:缺勤率表 “Absenteeism.txt”
维度表:绩效表 “Performance.txt”

用 fjoin@m 并行拼接维度字段时发现,用缺勤率表 "Absenteeism.txt" 这个维度表时,结果不一样。而用绩效表 "Performance.txt" 这个维度表时结果又没有问题,具体情况截图如下:

请注意代码格 A8、A9 并观察结果中的第 12、14 和 15 行:

imagepng

涉及到的代码和文件如下,可复制使用:


A
1 =T(“Employees.txt”,ID,Name).keys(ID)
2 =T(“Absenteeism.txt”).keys(Employee)
3 =T(“Performance.txt”).keys(Employee)
4 没用并行 @m,拼接维表字段可以写成 字段名 或者 ~. 字段名
5 =A1.fjoin(A2.find(ID),Absenteeism)
6 =A1.fjoin(A2.find(ID),~.Absenteeism)
7 @m 并行,拼接维表字段必须要写成 ~. 字段名,请关注结果中的第 12,14,15 行
8 =A1.fjoin@m(A2.find(ID),Absenteeism)
9 =A1.fjoin@m(A2.find(ID),~.Absenteeism)
10 用 A3 维表时,无论是否并行,写成 字段名 或者 ~. 字段名 都可以
11 =A1.fjoin(A3.find(ID),Performance)
12 =A1.fjoin(A3.find(ID),~.Performance)
13 =A1.fjoin@m(A3.find(ID),Performance)
14 =A1.fjoin@m(A3.find(ID),~.Performance)
15 拼接两个维表的字段时跟上述情况一样,并行 @m 时 要写成 ~. 字段名
16 =A1.fjoin(A2.find(ID),Absenteeism;A3.find(ID),Performance)
17 =A1.fjoin(A2.find(ID),~.Absenteeism;A3.find(ID),~.Performance)
18 =A1.fjoin@m(A2.find(ID),Absenteeism;A3.find(ID),Performance)
19 =A1.fjoin@m(A2.find(ID),~.Absenteeism;A3.find(ID),~.Performance)

文件在帖子 根据考勤和绩效信息计算应发工资 的附件中,或者在此下载↓:

Performance.txt
Absenteeism.txt
Employees.txt

恳请大佬们得空时给予指导帮助,谢谢!