移除重复行
在 Tableau Prep Builder 版本 2024.1 及更高版本以及 Tableau Cloud 中的 Web 上受支持。
重复数据可能会影响数据质量、预测结果存在偏差并浪费存储空间。移除重复项可确保每个值都是唯一的,从而提供数据的准确表示形式。移除重复项的第一步是识别数据中的重复行。识别出重复项后,您随后可以将它们从工作流程中移除。
识别并移除重复项
Tableau Prep 将重复项标识为至少有一个其他行具有相同值的任何行。
识别并移除重复的行。
- (可选)对于 Excel 和文本文件,您可以单击“输入”步骤并添加“源行号”字段以按原始数据源对行进行排序。有关详细信息,请参见将源行号字段添加到您的流程和计算字段的排序顺序。
- 单击“输入”或“输出”步骤以外的任何步骤。
- 识别重复的行。
- 若要识别所有字段中的重复行,请从工具栏中单击“识别重复行”。
- 若要识别特定字段中的重复行,请选择一个或多个字段,然后单击“识别重复行”。(可选)在配置窗格中,您可以单击从所选字段中选择“更多选项”菜单,并选择“识别重复行”。
将创建一个计算字段并在“更改”窗格中列出。计算字段提供重复行跨越的字段的描述和名称。数据网格显示哪些行是唯一的,哪些行是重复的。
下图显示了选择“区域”和“项目类型”两个字段以仅识别那些选定字段中的重复行的结果。
如果源行号可用,则它用于对行的顺序进行排序。否则,行将根据表架构中的第一个字段进行排序。若要更改计算字段中的值,您可以直接编辑计算或编写自己的计算。请参见计算字段的排序顺序。
- 若要评估重复行,请单击“是否为重复行?”字段或数据网格中的“重复”或“唯一”。
- 若要筛选并仅保留唯一行,请单击“数据”网格或“是否为重复行?”字段中的“唯一”,然后从工具栏中选择“仅保留”。或者,您可以单击“数据”网格或“是否为重复行?”字段中的“唯一”,然后右键单击以选择“仅保留”。
您还可以选择“重复” ,然后选择“排除”以筛选重复项数据。这会产生与选择“唯一”和“仅保留”相同的结果,并且不会影响排除或保留哪些行。
将会在更改窗格中创建一个筛选器,显示仅保留唯一行并排除重复行。
- 从“是否为重复行?”计算字段中,单击“更多选项” 菜单,然后选择“移除”。
当您运行流程并创建输出时,重复的行将被移除。
注意:不要移除“是否为重复行?”计算字段(如果您要调整采样数据)。
下图显示了所有字段中的重复行。
下图仅显示了“区域”和“项目类型”字段中的重复行。
样本数据中的重复项
重复的行可能不会出现在采样数据中,并且可能会在模型中引入偏差。
若要解决重复行采样数据,请执行以下操作:
- 不要移除“是否为重复行?”计算字段(如果您要调整采样数据)。这使您可以选择更改样本大小或调整输入步骤中的样本数据。
- 调整样本大小以加载尽可能多的数据用于行选择。请参见设置数据样本大小。
- 根据样本的大小,重复项可能不会出现在采样数据中。对唯一行使用“仅保留”选项允许您移除重复行,即使它们在采样数据中不可见。
计算字段的排序顺序
默认情况下,如果多行包含相同的值,它们将按第一个字段或源行号(如果可用)排序。这些字段用于将第一行标识为“唯一” ,将其余行标识为“重复” 。更改字段的排序顺序允许您指定要将哪个重复行标识为“唯一”。您可以通过编辑计算并更改“ORDERBY
”字段来更改顺序。
例如:
IF ({PARTITION [Field1], [Field2], [Field3]: { ORDERBY [FieldName] ASC: ROW_NUMBER() } } = 1) THEN 'Unique' ELSE 'Duplicate' END
对于 Excel 和文本文件,您可以通过添加源行号字段按原始数据源排序。
例如:
IF ({PARTITION [Source Row Number], [Field1], [Field2], [Field3]: { ORDERBY [Source Row Number] DESC: ROW_NUMBER() } } = 1) THEN 'Unique' ELSE 'Duplicate' END
有关详细信息,请参见将源行号字段添加到您的流程。
编写您自己的筛选器计算来查找并移除重复项
您可以跨多个字段编写自己的筛选器计算,以查找并移除重复项。
以下筛选器计算将仅返回返回 True 的结果。根据用于 PARTITION 的字段,计算返回 True 或 False
{PARTITION [Field1], [Field2], [Field3]: { ORDERBY [Field1] DESC: ROW_NUMBER() } } = 1
使用 CASE
或者 IF
用于识别重复计算
您可以在计算编辑器中使用 IF
或 CASE
函数。例如:
CASE {PARTITION [Field1], [Field2], [Field3] : { ORDERBY [[Field3]]: ROW_NUMBER() } } = 1 WHEN TRUE THEN 'UNIQUE' ELSE 'DUPLICATE' END
IF ({PARTITION [[Field1]], [[Field2]], [[Field3]]: { ORDERBY [[Field3]] DESC: ROW_NUMBER() } } = 1) THEN 'Unique' ELSE 'Duplicate' END