Sql Dynamics CRM 2015重复行清理
我正在与Dynamics CRM 2015 online合作,并被赋予从活动帐户中删除重复项的任务 我目前正在使用Visual Studio 2012 SSIS和COZYROC SSIS+软件包 将所有活动帐户拉入表ActiveAccounts(所有15000个帐户)后,我创建了表NormalNameAccounts(首先为Null)和ActiveAccountsPassibleDuplicateReport(首先为Null)。首先,我生成一个单独的列,为每个帐户分配一个普通名称。普通名称的规则如下:Sql Dynamics CRM 2015重复行清理,sql,sql-server,ssis,crm,dynamics-crm-2015,Sql,Sql Server,Ssis,Crm,Dynamics Crm 2015,我正在与Dynamics CRM 2015 online合作,并被赋予从活动帐户中删除重复项的任务 我目前正在使用Visual Studio 2012 SSIS和COZYROC SSIS+软件包 将所有活动帐户拉入表ActiveAccounts(所有15000个帐户)后,我创建了表NormalNameAccounts(首先为Null)和ActiveAccountsPassibleDuplicateReport(首先为Null)。首先,我生成一个单独的列,为每个帐户分配一个普通名称。普通名称的规则
- 没有空间
- 没有字母数字字符
- 将“&”标志替换为“和”
- Corporation、Incorporated和Company缩写为(Corp,Inc,Co)
INSERT INTO NormalNameOccurrences
select LEFT(NormalName, 10) AS NormalName,COUNT(*) AS Occurrences
FROM ActiveAccounts
GROUP BY LEFT(NormalName, 10)
HAVING COUNT(*) > 1
ORDER BY NormalName
INSERT INTO ActiveAccountsPossibleDuplicateReport
SELECT
DupeGroupID.*,
DENSE_RANK() OVER (ORDER BY LEFT(DupeGroupID.NormalName,10)) as Match_ID
FROM
(
SELECT *
FROM ActiveAccounts a
WHERE EXISTS
(
SELECT *
FROM NormalNameOccurences
Where LEFT(a.NormalName,10) = NormalName
)
) DupeGroupID
然后,我运行以下查询,根据前10个字符对帐户进行分组
INSERT INTO NormalNameOccurrences
select LEFT(NormalName, 10) AS NormalName,COUNT(*) AS Occurrences
FROM ActiveAccounts
GROUP BY LEFT(NormalName, 10)
HAVING COUNT(*) > 1
ORDER BY NormalName
INSERT INTO ActiveAccountsPossibleDuplicateReport
SELECT
DupeGroupID.*,
DENSE_RANK() OVER (ORDER BY LEFT(DupeGroupID.NormalName,10)) as Match_ID
FROM
(
SELECT *
FROM ActiveAccounts a
WHERE EXISTS
(
SELECT *
FROM NormalNameOccurences
Where LEFT(a.NormalName,10) = NormalName
)
) DupeGroupID
这是一个例子,它提出了什么
Accountid Name NormalName Match_ID
1165894512 AT and T ATandT 1
1236549458 AT&T ATandT 1
9764312456 AT & T ATandT 1
9856225415 Furniture FurnitureIndustry 2
6565652626 Furniture Inc. FurnitureIndustryInc 2
6427346857 Chemical Engineers of Idaho ChemicalEngineersofIdaho 3
6457948461 Chemical Entourage, Inc. ChemicalEntourageInc 3
5544997761 Chemical Entry, LLC ChemicalEntryLLC 3
我的问题是,当我运行这个查询时,它会导致一些误报。帐户名可能以相同的10个字符开头,但下一个字符完全不匹配。
另一方面,如果我尝试将字符查找增加到12而不是10,我会丢失许多相同帐户的帐户,但是其中一个帐户名包含帐户类型,如上面的示例中的帐户9856225415和652626
任何关于如何解决这一问题的建议都将不胜感激 如果您需要一种自动识别重复项的方法,我鼓励您再次尝试SSIS模糊分组。这是一个很棒的步行体验: 通过反复试验,您可以找出什么样的相似性阈值为您提供了错误最少的数据集。“输出键”列将帮助您识别组。然后剩下的任务是将其聚合到单个记录中。i、 e.最终正常名称是什么以及所有其他属性。通常最好在几个不同的载体上进行重复数据消除,例如包括邮政编码和电子邮件
如果你想考虑手工方法,DQS有一个匹配的过程,Excel的MDS插件包括一个消除记录的方法。有时候,让SME来收拾残局要好得多。
我怀疑你能做到100%防弹,但你考虑过用levenshtein差异来代替吗?这听起来似乎是个完美的选择。我知道mysql中有一些实现,但在“外部”中可能更容易实现——即在visual studio中,在您的情况下(我在该部门没有提供任何内容)注意:我删除了mysql标记,添加了sql标记,并更改了标题检查SSIS中的模糊分组组件。这是用于此确切目的的工具:。MS使用自己的算法进行匹配,但效果令人惊讶well@MarkWojciechowicz我以前尝试过模糊分组,但所做的只是返回整个account表集,其相关值为0.0-1.0。我要寻找的是一个过程,它将分析表中的所有帐户,并返回一个单独的表,其中只包含可能的帐户重复项