比方说,我有一个事实表和员工“层”表。
所以事实表看起来有点像
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 语句:
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
是的,正如您所看到的,这非常笨拙。我在想也许我需要稍微改变一下它的结构。