2014-02-25 60 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