模糊联接
概念信息
Analytics 模糊联接使用键域值的模糊匹配将两个 Analytics 表组合为第三个新表。在大多数方面,模糊联接类似于常规 Analytics 联接(请参见联接表)。主要区别是除了基于键域值的精确匹配来联接记录以外,模糊联接还可以基于近似匹配来联接记录。
当主键和辅助键包含的数据种类相同,但形式稍有不同时,模糊联接很有用。另外,当键中的数据具有可能阻止精确匹配的轻微不规则性(如打字错误)时,它也很有用。
示例
场景
您想要识别任何身兼员工身份的供应商,作为分析可能存在的不适当支付工资的相关数据的方式。
方法
您使用每个表中的地址域作为公共键(Vendor_Street 和 Emp_Address),将 Vendor 主表与 Employee 表相联接。但是,键域中地址数据的形式略有不同,因此您使用模糊联接而不是常规联接。
部分数据一览
不经过繁重的数据清理和协调工作,常规 Analytics 联接功能将无法联接如下所示的主键值和辅助键值,即使它们很可能是匹配的地址。
| 主键值 | 辅助键值 |
|---|---|
| 605 3rd Avenue | 605 Third Avenue |
| 400 High St SE | 400 High Street S.E. |
| 2203 Rowan Street | 2203 Rowen St |
即使经过数据清理和协调,在拼写方面略有差异的键值(如 "Rowan" 和 "Rowen")也很可能不会被匹配。
根据模糊联接设置的不同,这些键值可能被模糊联接加以联接。
输出结果
在下面的联接表示例中,精确键域匹配被突出显示为紫色,而模糊键域匹配被突出显示为绿色。
模糊联接与模糊重复之比较
模糊联接分析两个表中的键域中的值。要测试单个 Analytics 表中的单个域是否包含几乎完全相同的值,请参见模糊重复分析。
改进模糊联接的有效性
通过采用下列一个或多个技巧,您可以显著提高模糊联接的有效性:
- 对主键和辅助键域值中的各个元素进行排序
- 从主键和辅助键域值中移除通用元素
- 协调主键和辅助键域值
这些技巧使您可以使用更严格的模糊设置并仍然可以获得相同的模糊匹配,同时减少误报匹配的数量。您可以单独或者结合使用这些技巧。
创建表达式或计算域
要使用任一技巧,您需要使用适当的 Analytics 函数和一个或者两个键域创建一个表达式或者计算域。
有关表达式的详细信息,请参见表达式使用。
有关计算域的详细信息,请参见定义计算域。
说明
模糊联接对话框不允许在辅助键域上创建表达式。但是,您可以在 Analytics 命令行或脚本中手动创建一个辅助键域表达式。另一选项是创建一个计算域以用作辅助键域。
对键域值中的各个元素进行排序
SORTWORDS( ) 函数可通过按顺序对主键和辅助键域值中的各个元素进行排序,提高模糊联接的有效性。
对元素(如地址的组成部分)进行排序,可使具有相同信息和不同格式的键域值彼此更加相似。更大的相似度可以提高键域值被选择为彼此模糊匹配的可能性。
有关详细信息,请参见SORTWORDS( ) 函数。
要观看提供 SORTWORDS( ) 概览的视频,请参见使用 SORTWORDS( ) 进行模糊匹配(仅限英语)。
说明
对键域值中的元素进行排序最适合于使用编辑距离算法进行模糊联接。
在使用 Dice 系数算法执行模糊联接时对元素进行排序未必有好处。在决定是否在生产设置中将 SORTWORDS( ) 与 Dice 系数算法结合使用之前,请对一组样本数据进行测试。
注意
如果您将 SORTWORDS( ) 与模糊联接结合使用,则必须将 SORTWORDS( ) 同时应用于要比较的两个字符串或两个域。
从键域值中移除通用元素
OMIT( ) 函数可以通过从主键和辅助键域值中移除 "Corporation" 或 "Inc." 等通用元素或者逗号、句号和 & 符等字符,提高模糊联接的有效性。
移除通用元素和标点符号可使模糊匹配仅专注于可能发生有意义差异的键域值部分。
有关详细信息,请参见OMIT( ) 函数。
协调键域值
REPLACE( ) 或 REGEXREPLACE( ) 函数可以通过协调主键和辅助键域值中的相同元素的变体,提高模糊联接的有效性。例如,您可以协调 "Street"、"St." 和 "St" 以使用单个值 "St"。
协调元素可使具有相同信息和不同格式的键域值彼此更加相似。更大的相似度可以提高键域值被选择为彼此模糊匹配的可能性。
有关详细信息,请参见REPLACE( ) 函数以了解简单直接的替换,参见REGEXREPLACE( ) 函数以了解更复杂的替换。
输出表大小和命令性能
输出表大小
模糊联接类似于 Analytics 多对多联接。所有主键值都可能被匹配到所有辅助键值。输出表的大小可能比主要或者辅助输入表的大小大很多倍。
命令性能
模糊匹配算法可保只有指定模糊度以内的键值或者精确匹配值会被实际联接。但是,必须测试每个可能的主要-辅助匹配,这意味着模糊联接过程可能很费时。必须执行的单个测试的数量等于主表中的记录数乘以辅助表中的记录数。
将匹配限制到首个辅助匹配
通过选择仅联接辅助键匹配的第一个实例,可以显著减少处理时间并减小输出结果的大小。启用此选项可指定将每个主键值仅联接到任何匹配辅助键值的第一个实例。
启用该选项在下列任一情况下是适当的:
- 任一匹配? 您只想知道两个表之间是否存在匹配(精确或模糊),并且您想要避免识别所有匹配所需的处理时间
- 最多一个匹配您确信对于每个主键值,在辅助表中最多只存在一个匹配
如果您需要输出结果包含主键值和辅助键值之间的所有可能的联接,则启用该选项不适当。
说明
如果您选择仅联接辅助键匹配的第一个实例并且匹配的首个实例恰好是精确匹配,则主键值的任何后续模糊匹配都不会被包括在联接输出表中。
最佳做法
当您准备主要和辅助输入表以及指定模糊度时,请牢记输出表大小和命令性能。
- 调整数据 请确保只将相关记录包括在主要表和辅助表中。如果某些记录没有得到匹配的机会,请在执行模糊匹配之前过滤掉它们。
- 测试运行 对于大型数据集,请对一小部分数据执行测试运行,以便更有效地到达模糊匹配算法的合适设置。首先从更谨慎的模糊设置开始,如果需要,则逐步放宽它们。
模糊匹配算法
当您执行模糊联接时,您可以在两个不同的模糊匹配算法之间进行选择:
- Dice 系数
- 编辑距离
这些算法完全相互独立工作,并且可能生成稍微不同的结果。一个方法是执行模糊联接两次,每个算法各使用一次,并且比较结果。通常,各个结果集中的一些模糊匹配可能相互重叠,但某些匹配可能是各个结果集所独有的。
模糊度
您需要为每个算法指定模糊度,这可能显著改变结果集的大小和构成。“模糊度”是指两个值匹配的紧密程度。
根据您选择的算法的不同,您可以使用下列设置来控制模糊度:
| 算法 | 设置 |
|---|---|
|
Dice 系数 |
|
|
编辑距离 |
|
请尝试试用不同的模糊度。首先谨慎地进行设置并且生成较小的结果集,然后逐渐放宽设置,直到您开始得到过多明显不是匹配的联接值(误报)为止。
Dice 系数
Dice 系数算法通过测量主键值和辅助键值之间的相似度来工作,相似度的取值范围为 0.0000 到 1.0000。这两个值的 Dice 系数越大,它们就越相似。
| Dice 系数 | 含义 |
|---|---|
| 1.0000 |
每个值都由相同的字符集组成,尽管这些字符可能具有不同的顺序,并且可能使用不同的大小写。 这两个值中的 n 元语法 100% 相同。 下面解释了 n 元语法。 |
| 0.7500 |
这两个值中的 n 元语法 75% 相同。 |
| 0.0000 | 两个值不具有相同的 n 元语法,或者在 n 元语法设置中指定的长度比要比较的两个值中的较短者更长。 |
n 元语法
计算 Dice 系数的方法是首先将要比较的值划分为 n 元语法。n 元语法是重叠的字符块,其长度为 n,这是您在 n 元语法设置中指定的任何长度。
下面是上述示例中的两个值,以及将其划分为长度为 2 个字符 (n = 2) 的 n 元语法所得到的结果。
| 值 | n 元语法 |
|---|---|
| 2203 Rowan Street | 22 | 20 | 03 | 3_ | _R | Ro | ow | wa | an | n_ | _S | St | tr | re | ee | et |
| 2203 Rowen St | 22 | 20 | 03 | 3_ | _R | Ro | ow | we | en | n_ | _S | St |
Dice 系数即这两个值中完全相同的 n 元语法的百分比。在此例中,28 个 n 元语法中的 20 个是相同的,所以该系数为 71.43%,用小数表示即 0.7143。
说明
增加 n 元语法设置中的长度可使两个值的相似性标准更加严格。
百分比
当您指定百分比设置时,您就指定了要使两个值被视为模糊匹配,它们需要具有的最小允许 Dice 系数。例如,如果您指定 0.7500,则两个值中的 n 元语法中至少有 75% 必须相同才能产生匹配。
| 百分比设置 | 含义 | 2203 Rowan Street / 2203 Rowen St |
|---|---|---|
| 0.7500 |
要被视为模糊匹配,两个值中的 n 元语法中至少有 75% 必须相同。 |
不匹配,不会被包括在联接表中 (Dice 系数 = 0.7143) |
| 0.7000 |
要被视为模糊匹配,两个值中的 n 元语法中至少有 70% 必须相同。 |
匹配,被包括在联接表中 (Dice 系数 = 0.7143) |
有关 Dice 系数工作原理的详细信息,请参见DICECOEFFICIENT( ) 函数。
编辑距离
编辑距离算法通过以从 0 开始的整数刻度尺来衡量主键值和辅助键值之间的差异度来工作。该刻度尺表示使一个值与另一个值完全相同所需的单字符编辑数量。这两个值之间的编辑距离越大,它们的差异就越大。
| 编辑距离 | 含义 |
|---|---|
| 0 | 每个值都由遵守相同顺序的相同字符集组成。大小写可能不同。 |
| 2 |
要使这两个值相同,需要进行两次单字符编辑。 例如:"Smith" 和 "Smythe"
|
| 3 |
要使这两个值相同,需要进行三次单字符编辑。 例如:"Hanssen" 和 "Jansn"
|
距离
当您指定距离设置时,您就指定了要使两个值被视为模糊匹配,它们之间具有的最大允许编辑距离。例如,如果您指定 2,则要使两个值相同,所需的编辑数量不得超过两个。
| 距离设置 | 含义 | Hanssen / Jansn |
|---|---|---|
| 2 |
要被视为模糊匹配,则使两个值相同所需的编辑数量不得超过两个。 |
不匹配,不会被包括在联接表中 (编辑距离 = 3) |
| 3 |
要被视为模糊匹配,则使两个值相同所需的编辑数量不得超过 3 个。 |
匹配,被包括在联接表中 (编辑距离 = 3) |
有关编辑距离工作原理的详细信息,请参见LEVDIST( ) 函数。与该函数不同的是,模糊联接中使用的编辑距离算法自动除去前导和后继空白,并且不区分大小写。
步骤
您可以使用键域值的模糊匹配将两个 Analytics 表组合为第三个新表。
说明
完成上述步骤之后,将会显示详细信息。请参见“模糊联接”对话框选项。
- 在浏览器中,打开主表,右键单击辅助表,然后选择作为辅助表打开。
主表和辅助表图标将用数字 1 和 2 更新以指示它们之间的关系
。 - 选择数据 > 模糊联接。
- 在主要选项卡上,选择您想要使用的模糊匹配算法:
- Dice 系数
- 编辑
- 根据您选择的算法的不同,您可以使用下列设置来控制模糊度。
Dice 系数
- N 元语法
- 百分比
编辑
- 距离
下面解释了这些设置。
- (可选)选择仅联接辅助键匹配的第一个实例可指定将每个主键值仅联接到任何匹配辅助键值的第一个实例。
- 从主键列表中选择主键域。
您可以仅选择一个主键域,但它必须是字符域。
- 从辅助键列表中选择辅助键域。
您可以仅选择一个辅助键域,但它必须是字符域。
- 从主域和辅助域列表中选择要包括在联接表中的域。
说明
如果您想要将其包括在联接表中,则必须明确选择主键域和辅助键域。
提示
您可以使用 Ctrl+单击选择多个不相邻的域,使用 Shift+单击选择多个相邻的域。
- 在目标文本框中,指定新的联接表的名称。
- (可选)在更多选项卡上:
- 如果您向要仅处理记录的一个子集,请选择范围面板中的选项之一。
- 如果您想要将输出结果附加(添加)到现有 Analytics 表的末尾,请选择附加到现有文件。
- 单击确定。
新的联接表是输出。
“模糊联接”对话框选项
下面的表提供了有关模糊联接对话框中选项的详细信息。
“主要”选项卡
| 选项 –“模糊联接”对话框 | 描述 |
|---|---|
| Dice 系数 |
使用 Dice 系数在主键值和辅助键值之间进行模糊匹配。
|
| 编辑 |
使用编辑距离在主键值和辅助键值之间进行模糊匹配。
|
| 仅联接辅助键匹配的第一个实例 |
请指定每个主键值仅被联接到任何辅助键匹配的第一个实例。 如果您使该选项保持未选中状态,则默认行为是将每个主键值联接到任何辅助键匹配的所有实例。 |
| 辅助表 | 选择辅助表的备用方法。 |
| 主键 辅助键 |
指定要用来联接两个表的公共键域。
关键字域指南:
|
| 主域 辅助域 |
输入要包括在联接表中的域。
|
| 使用输出表 | 指定包含输出结果的 Analytics 表在完成操作后是否自动打开。 |
| 如果 |
(可选)使您可以创建一个条件以从处理范围中排除记录。
|
| 到 | 指定输出表的名称和位置。
无论将输出表保存到何处,打开项目时,如果该项目中还没有此表,则会将其添加到该项目中。 如果 Analytics 预填充了一个表名称,您可以接受预填充的名称或更改它。 说明 Analytics 表名称限制为 64 个字母数字字符,且不包括 .FIL 扩展名。该名称可以包括下划线字符 ( _ ),但不能包括其他特殊字符或任何空格。该名称不能以数字开头。 |
“更多”选项卡
| 选项 –“模糊联接”对话框 | 描述 |
|---|---|
| “范围”面板 | 指定对主表中的哪些记录进行处理:
说明 前或后选项中指定的记录数参考表中记录的物理或索引顺序,不考虑对视图进行过滤或快速排序的情况。不过,解析操作的结果与任何过滤相关。 如果视图进行了快速分类,后和前操作相同。 |
| 附加到现有文件 | 指定将输出结果附加(添加)到现有 Analytics 表的末尾。 |
| 确定 | 执行操作。
|