我需要帮助来理解一件事。
我有一个表,使用缓慢变化的维度,开始和结束日期和指示器,如果它是活动的或不:
<表类>
类型
开始结束 价值活动 tbody><<tr>0001/01/01 9999/12/31 10 1 B2015/03/18 2016-06-25 4 0 B2016-06-25 9999/12/31 7 1 C2017-05-07 9999/12/31 8 1 表类>
根据图表,假设日期范围为2016-04
~2017-12
,则
-
为上述日期范围生成
month
维度 -
将
month
维数与慢变维数slo_dim
交叉连接,得到有效期内的value
-
根据步骤2的结果绘制折线图
with cte_month (year_month, n) as (
select cast('2016-04-01' as date), 1
union all
select dateadd(month, 1, year_month), n+1
from cte_month
where n < 21)
select d.type,
m.year_month,
d.value
from cte_month m, slo_dim d
where m.year_month between d.start_dt and d.end_dt
order by d.type, m.year_month;
结果:
type|year_month|value|
----+----------+-----+
A |2016-04-01| 10|
A |2016-05-01| 10|
A |2016-06-01| 10|
A |2016-07-01| 10|
A |2016-08-01| 10|
A |2016-09-01| 10|
A |2016-10-01| 10|
A |2016-11-01| 10|
A |2016-12-01| 10|
A |2017-01-01| 10|
A |2017-02-01| 10|
A |2017-03-01| 10|
A |2017-04-01| 10|
A |2017-05-01| 10|
A |2017-06-01| 10|
A |2017-07-01| 10|
A |2017-08-01| 10|
A |2017-09-01| 10|
A |2017-10-01| 10|
A |2017-11-01| 10|
A |2017-12-01| 10|
B |2016-04-01| 4|
B |2016-05-01| 4|
B |2016-06-01| 4|
B |2016-07-01| 7|
B |2016-08-01| 7|
B |2016-09-01| 7|
B |2016-10-01| 7|
B |2016-11-01| 7|
B |2016-12-01| 7|
B |2017-01-01| 7|
B |2017-02-01| 7|
B |2017-03-01| 7|
B |2017-04-01| 7|
B |2017-05-01| 7|
B |2017-06-01| 7|
B |2017-07-01| 7|
B |2017-08-01| 7|
B |2017-09-01| 7|
B |2017-10-01| 7|
B |2017-11-01| 7|
B |2017-12-01| 7|
C |2017-06-01| 8|
C |2017-07-01| 8|
C |2017-08-01| 8|
C |2017-09-01| 8|
C |2017-10-01| 8|
C |2017-11-01| 8|
C |2017-12-01| 8|