2014-02-25 58 views
0

我有一个非标准化的表格,显示了汽车销售详细信息汽车制造商,型号和子模型。因为它没有被标准化,所以它没有涉及汽车制造的标识,模型和子模型,而是具有真正的价值。这些值是由一名员工手动输入到将要迁移的旧应用程序中,因此可能会出现诸如拼写错误,类似的文字,空格,破折号等许多问题。数据从非标准化表格迁移到标准化表格

我创建了一个规范化表,我需要将现有数据从非规范化表迁移到新的规范化表。我需要找到与每个值对应的ID(汽车制造ID,型号和子模型)。但是,这并不容易,因为例如奥迪(汽车制造)A4(车型)1.8T(子型号)可以写成奥迪A4 1.8Turbo或奥迪A4 1.8Turbo Injection或奥迪A4 1.8 TFI等。所以,同一个实体的许多不同的文本值。 考虑到上面给出的上下文,我认为获取ID的最佳选择是为每个实体设置一个别名表。例如,CarSubModelAlias。这些表格将指定映射到相同实体的所有不同值。 不幸的是,我有超过3,500个子模型,并且很难填充这些表格。

任何意见或建议?

+1

它将永远是这种情况下涉及的数据清理元素。通过首先提取所有完美匹配,然后通过模糊查找来传递剩余行以找到最佳匹配,SSIS可能是一个不错的选择,可以逐步减少问题。 – Jayvee

回答

1

Jayvee是正确的,最好的方法是开发一个SSIS包。使用精确匹配和模糊匹配组件将源数据与目标匹配。这样你可以规范化数据。

+0

感谢您的快速回答。我不确定SSIS是否会在这种情况下工作,因为参考名称可能与文本值真的不同。例如: 参考值:1.8T 文本值:1.8 Turbo注入FI 我正在分析比较字符串的Levenshtein算法(该算法的.NET实现:http://www.dotnetperls.com/levenshtein)。我在想一个小的控制台应用程序,它获取文本值的前N个字符(N是参考值的长度),并使用此算法进行比较。 你觉得呢? –

+0

我检查了Levenshtein算法,但在某些情况下效果不佳。它使1.8与1.8T混淆,因为根据这个算法,距离只有1,1.8T和1.8T的距离为2.我想我会创建一个Windows应用程序,显示按距离排序的所有映射选项所以用户可以选择最佳选项(手动交互)。默认情况下,将选择距离最近的那个。 –

+0

我不确定你是否已经解决了这个问题,但是在SSIS中使用Script组件,你也可以编写自己的规则来匹配“1.8T”和“1.8 T”这两个关键字。为此,我们可以开发一个DLL并在SSIS脚本组件中添加对该DLL的引用,然后我们可以将最终结果分成好的和不好的匹配。 – Suresh