Data-Warehouse
在 CRM 和 ERP 中映射產品程式碼
我正在將數據載入到數據倉庫中。客戶/交易來自 ERP 和 Salesforce。系統之間的產品程式碼不匹配。
有解決這個問題的標準模式嗎?
我試圖小心避免基於意見的大問題/答案。我真的只是在尋找通常如何解決此問題的**事實。**也許就像“在倉庫中放置一些交叉引用表或在您的 ETL 作業中轉換產品程式碼”一樣簡單。但也許倉庫專家可以分享他們的經驗。
是的:您需要的模式是“合成鍵”。對於每個傳入的邏輯產品,您將分配一個鍵,僅在數據倉庫中使用。如果兩個源系統引用相同的產品,您可以為它們提供相同的合成密鑰 (SK)。如果您的源系統對兩個不同的產品使用相同的 ID,您可以為它們分別指定一個不同的密鑰。因此,在您的倉庫中,您有一個乾淨的產品清單。
例如,我目前
SyntheticKeys.Products
表的架構如下所示:CREATE TABLE SyntheticKeys.Products ( SourceSystem VARCHAR(30) NOT NULL, ProductID VARCHAR(30) NOT NULL, ProductSK INT NOT NULL IDENTITY (2, 1), -- Housekeeping ETLCreated INT NOT NULL, ETLModified INT NOT NULL )
在這種情況下,產品在到達此表之前會進行重複數據刪除,因此我可以使用它來分配合成鍵,但是當記錄被辨識為真正的新產品時
IDENTITY
,您可能更願意設置一個對象並從中獲取 ID。SEQUENCE
使用合成密鑰的幾個額外好處:
- 您可以使用 32 位甚至 16 位整數,而不是 144 位 Salesforce ID 或其他寬鍵。這使您的事實表保持狹窄和快速。
- 您可以為特殊記錄預留空間。我的約定是 SK #-1 表示“不適用”,SK #0 表示“未知”;因此,從未購買過產品的客戶可能有
FirstPaidOrderSK
-1,而不是NULL
,這是模棱兩可的。
這是一個主數據管理 (MDM) 問題。
上一個答案包括這一行:“如果兩個源系統引用相同的產品,您可以給它們相同的合成密鑰 (SK)。” 我當然同意這個想法。但在我看來,這忽略了複雜性的一個重要部分。
建造倉庫的人(你!)並不知道產品之間的所有映射。相反,定義這些映射是具有產品知識的數據管理員的工作。然後,您的工作就是將來自 ERP 的交易和來自 MDM 的產品程式碼映射載入到倉庫中。
然後事務系統可以管理事務。MDM 管理產品主數據(也許還有客戶數據!)。您的 ETL 作業將這兩個都用作倉庫的輸入。倉庫管理使數據可用於報告和分析的任務。