我有一個事實表和員工「層」表,比方說。SQL Server - 緩慢更改維度加入
所以事實表看起來像八九不離十
employee_id call date
Mark 1 1-1-2017
Mark 2 1-2-2017
John 3 1-2-2017
再就是需要爲「層級」的數據結構 - 一個緩慢變化的維度表。我想保持這種簡單 - 我可以將此表的結構更改爲任何內容,但現在我已經創建了它。
employee_id tier1_start ... tier2_start ... tier3_start
Mark 5-1-2016
John 6-1-2016 8-1-2016
Lucy 6-1-2016 10-1-2016
兩個重要注意事項。這種表格的運作假定促銷活動只會發生一次 - 也就是說不會發生降級和再促銷。另外,有可能可以從第1層跳到第3層。
我試圖想出一個可能的最佳查詢來爲事實表提供'層'維(非規範化)。
例如,我想查看2月份的Tier 1指標或2月份的Tier 2指標。顯然,歷史性變化的層級維度必須聯繫起來。
我現在可以想到的最笨的方法就是使用employee_id在層表上簡單地加入事實表。
然後,做一個甚至笨拙case語句:
case
when isnull(tier3_start,'0') < date then 'T3'
when isnull(tier2_start, '0') < date then 'T2'
when isnull(tier1_start, '0') < date then 'T1'
else 'other'
end as tier_level
是的,正如你可以看到這是很笨拙。 我在想也許我需要改變這一點的結構。
是否會有超過3層?您已經描述了3型SCD,您可能更適合2型SCD(添加了行而非列)https://en.wikipedia.org/wiki/Slowly_changing_dimension。這允許捕獲任何更改的屬性 –
不回答將實際數據與維度數據實際結合在一起的實際簡化且一致的查詢的問題。例如,一個電話是在10月3日或任何時候發出的。這個屬於什麼層次?類型3無效,它實際上破壞了歷史有效日期。這是很多SCD討論的問題。每個人都在談論如何構建維度表 - 沒有人會談論真正解除查詢的問題!我真正擁有的是2型SCD表。寫入最有效。我需要將其轉換爲類型6.對於事實表連接最有效。 – user45867
您的維度不會爲每個狀態更改添加行,因此它不是類型2.Dw通過使ETL變得複雜來簡化查詢。看起來你已經知道了這一切。我不確定這裏的問題是什麼。 –