历史版本52 :左右合并 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

FineBI 版本
功能变动
6.0-

1.2 应用场景

在实际使用数据的过程中经常会有需要将两张表联合在一起形成一张新表使用的情况,

假如有这样两张数据表:

① Table A:记录了学生姓名、英语成绩

② Table B:记录了学生姓名、数学成绩

如果想在一张表中就看到学生的姓名、数学成绩和英语成绩,则可以使用「姓名」字段作为「合并依据」进行左右合并。

不同的合并方式如下所示:

1595988084895102.png

1.3 实时版本注意事项

  • 实时数据左右合并的两张表不能来自两个数据源中(抽数版本可以来自两个数据源)。

       合并后会报错:[DIRECT-ETL] unsupported data source: databases on different hosts/ports

2. 示例编辑

将「销售明细」和「品牌维度」两张表的字段合到一张表进行分析。

2.1 新建分析主题并添加数据

1)新建分析主题,并添加数据。使用在零售行业下找到 FineBI 自带的数据表「销售明细」表。如下图所示:

2022-06-27_9-53-54.jpg

2)点击「编辑」数据,默认已勾选「销售明细」表的所有字段。

注:建议用户在进行左右合并前,减少表字段名称长度,避免出现字段名称过长导致保存失败问题。

2.2 设置左右合并

1)如下图,添加左右合并步骤:

2022-08-07_10-46-29.png

2)选择要左右合并的表「品牌维度」,并勾选该表中要参与左右合并的字段。如下图所示:

2022-06-27_10-06-08.jpg

3)选择合并方式为「左合并」,并添加合并依据为「品牌编号」。如下图所示:

  • 合并依据字段必须为同一字段类型;

  • 若左右两表中有字段名一致,系统会将其自动添加为合并依据。用户可以手动删除或添加合并依据。

2022-06-27_10-07-56.jpg

合并方式说明:

合并方式
说明
左合并对应 SQL 语句中的 left join
右合并对应 SQL 语句中的 right join
交集合并对应 SQL 语句中的 inner join
并集合并对应 SQL 语句中的 full join

2.3 效果查

两张表的字段合并到一张表中。合并依据会合并成一个字段,只保留合并结果「品牌编号」,如下图所示:

2022-06-27_10-20-25.jpg

3. 多个合并依据编辑

实现「部门人数」和「销售额」合并到一张表中,如下图所示:

26.png

无法单独使用一个字段作为合并依据,所以需要「部门、地区」字段共同作为合并依据。多个合并依据的意义即保证左右合并时数据的唯一性,如下图所示:

1606446081266502.png

4. 注意事项编辑

4.1 null 值不会互相匹配

左右合并的两张表合并依据中如果有 null 值,null 之间不会互相匹配。

4.2 产生笛卡尔积

若进行左右合并的两张表,它们的合并依据字段中有重复项,左右合并后就会产生笛卡尔积,导致数据量膨胀。(比如说以「id」列作为合并依据,左表 id 字段不唯一,右表 id 字段不唯一,进行左右合并后就会产生笛卡尔积)

为了不影响系统的稳定性,当并集合并后数据量满足以下情况时系统会主动打断进行过 N:N 操作的自助数据集的更新:

  • 进行并集合并后数据量超过 1 千万;

  • 膨胀系数>=5;膨胀系数:MIN (并集合并结果数据量/左表数据,并集合并结果数据量/右表数据)。例如,100w 数据和 500w 数据 N:N 结果为 2000w数据,那么 N:N 膨胀系数为: 2000w/500w =4

若出现笛卡尔积,更新信息处会提示用户是否更新成功:

  • 数据集生成成功:更新时检测到笛卡尔积,数据膨胀,更新耗时增加,请检查左右合并步骤中的合并依据列数据是否有重复值。

  • 数据集生成失败:更新时检测到笛卡尔积,数据严重膨胀,操作中止。请检查左右合并步骤中的合并依据列数据是否有重复值,请确保重复值不应过多。

若「更新信息」处提示生成失败,但用户依旧要使用 N:N 进行分析,可以通过过滤等手段缩减数据量达到系统不打断的要求。

1622106865649541.png

4.3 数据字段要求

数据表的字段有空格会导致左右合并结果异常,在进行左右合并前,请确保合并数据表字段中没有空格。如下图所示:

1577067129545005.png

4.4 设置预览界面计算数据

当数据量比较大时,可以在数据集的编辑过程中使用前 5000 行进行计算,使计算更为流畅,如下图所示:

2022-06-27_10-17-34.jpg