我有一个事实表和员工" 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
是的,你可以看到这非常笨拙。 我想也许我需要改变一下它的结构。
答案 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。
这也使您能够多次升级/降级。您只需按员工过滤并按日期排序即可查找当前层。