【问题标题】:Dynamics CRM 2015 Duplicate Row CleanupDynamics CRM 2015 重复行清理
【发布时间】:2015-09-24 02:39:48
【问题描述】:

我正在使用 Dynamics CRM 2015 在线并被赋予从活动帐户中删除重复项的任务。

我目前正在使用带有 COZYROC SSIS+ 包的 Visual Studio 2012 SSIS。

在将所有活动帐户拉入表 ActiveAccounts(所有 15000 个帐户)后,我创建了表 NormalNameOccurrences(最初为 Null)和 ActiveAccountsPossibleDuplicateReport(最初为 Null)。起初,我生成了一个单独的列,为每个帐户分配了一个正常名称。正常名称的规则是:

  • 无空格

  • 无字母数字字符

  • '&' 符号被替换为'and'

  • Corporation、Incorporated 和 Company 缩写为 (Corp, Inc, Co)

完成此操作后,我运行此语句以根据前 10 个字符查找计数大于 1 的所有事件

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

然后我运行以下查询以对前 10 个字符的帐户进行分组

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 和 6565652626。

任何有关如何解决此问题的建议将不胜感激!

【问题讨论】:

  • 我怀疑你可以做任何 100% 防弹的东西,但你有没有考虑过使用 levenshtein 的差异来代替?听起来它非常适合这个目的。我知道 mysql 中有一些实现,尽管在“外部”做可能更容易 - 即。在你的情况下在视觉工作室(我在那个部门没有什么可提供的)
  • 注意我删除了mysql标签,添加了sql标签,并更改了标题
  • 查看 SSIS 中的模糊分组组件。这是用于此确切目的的工具:msdn.microsoft.com/en-us/library/ms141764.aspx。 MS 使用自己的算法进行匹配,但效果出奇的好
  • @MarkWojciechowicz 我之前尝试过模糊分组,但所做的只是返回具有相关值 0.0-1.0 的整个帐户表集。我正在寻找一个过程,它将分析我表中的所有帐户并返回一个单独的表,其中仅包含可能的帐户重复

标签: sql sql-server ssis crm dynamics-crm-2015


【解决方案1】:

如果您需要一种自动识别重复项的方法,我鼓励您再尝试一次 SSIS 模糊分组。这是一个很棒的演练:http://ssis-tutorial-online.blogspot.com/2013/04/fuzzy-grouping-transformation.html

通过反复试验,您可以确定什么样的相似度阈值可以为您提供一个错误最少的数据集。输出键列将帮助您识别组。然后,您将完成将其聚合到单个记录中的任务。即最终的正常名称是什么以及所有其他属性。通常最好对几个不同的向量进行重复数据删除,例如包括邮政编码和电子邮件。

如果您想考虑手动方法,DQS 有一个匹配过程,而用于 excel 的 MDS 插件包含一种重复数据删除记录的方法。有时候让中小企业收拾残局会好很多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多