Data-Warehouse
擷取維度層次結構中級別之間歷史變化的最佳方法
捕捉維度層次結構中級別之間變化的最簡潔的方法是什麼?
我有維度層次結構
$$ Area $$>$$ Region $$>$$ Location $$,其中 Area 是 Region 的父級,Region 是 Location 的父級。位置是層次結構的最低級別,並與事實表相關聯。 業務規則是: 位置能夠根據業務需要更改分配到的區域。此外,區域能夠更改它們分配到的區域。
我們希望擷取這些變化,以便在進行歷史分析時,我們可以比較位置更改其區域之前和之後的業務指標,以及區域更改其區域之前和之後的業務指標。
做這個的最好方式是什麼?
我提出的四種方法似乎都有很大的缺點:
- 在層次結構級別之間使用橋接表要求您使用時間界限(有效開始/結束日期)在您向上走層次結構時正確辨識孩子屬於哪個父級。這使得查詢容易出錯,尤其是對於具有多個級別的層次結構。
- 每當子記錄與父記錄的關係發生變化時,對子記錄進行版本控制(例如,當區域 A 從區域 A 移動到區域 B 時對區域 A 進行版本控制),然後將更改一直沿層次向下級聯(例如,創建與區域 A 相關聯的位置的新版本以便它們與新的區域 A) 相關聯。
- 更新子記錄對父記錄的引用,使您使用時間限制來重新組裝正確的歷史記錄(容易出錯)。
- 在向上查詢層次結構時始終使用時間界限,以確保在分析事實時位置 A 與正確的區域相關聯(同樣,區域 A 與正確的區域相關聯)。
這些對我來說似乎都不干淨。
有沒有更好的辦法?
非常感謝
我強烈推薦橋接表的第一個選項。如果您確保您在所有三個表上都擷取了可以正常工作的歷史變化,儘管我同意您的觀點,即 JOIN’ing 是一個問題。只需確保(在 JOIN 子句中) DateInserted 和 ValidTill 與事實表中的匹配即可。更多關於這裡的橋牌桌 - 金博爾大學
或者:在事實表中保留對所有三個維度(區域、區域、位置)的引用。因為無論如何您都需要在事實表上有一個 DATE,您可以輕鬆地映射更改,並且因為 - 正如您所說 - 位置可能是 A 用於一個事務,但 B 用於不同的事務,您最好採用這種方式進行 GROUPing通過並看到趨勢和變化。不利的一面:它會使事實表變得更胖。
如果您正在使用 SSAS(或打算將其用於數據建模),我建議您閱讀非常好的閱讀多對多革命,它解釋瞭如何向最終使用者實施它。