SQL Server - 慢慢更改维度连接

时间:2017-03-17 23:07:27

标签: sql-server scd

我有一个事实表和员工" tier"我们可以说吧。

所以事实表看起来像是

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月份的第1层指标,或2月份的第2层指标。显然,历史变化的层面维度必须相互关联。

我现在想到的最笨拙的方法就是使用employee_id简单地加入层表上的事实表。

然后,做一个更笨拙的案例陈述:

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

是的,你可以看到这非常笨拙。 我想也许我需要改变一下它的结构。

1 个答案:

答案 0 :(得分:1)

你可能最好将你的等级表分成两部分。

所以有这样的Tier表:

TierID    Tier
------------------
1         Tier 1
2         Tier 2
3         Tier 3

还有一个EmployeeTier表:

ID    EmpID    TierID    TierDate
---------------------------------------
1     1        1         Jun 1, 2016
2     1        3         Oct 2, 2016
3     2        1         Jul 10, 2016
4     2        2         Nov 11, 2016

现在您可以查询EmployeeTier表并过滤您正在寻找的TierID。

这也使您能够多次升级/降级。您只需按员工过滤并按日期排序即可查找当前层。