检查渐变维度 2
Posted
技术标签:
【中文标题】检查渐变维度 2【英文标题】:Checking Slowly Changing Dimension 2 【发布时间】:2021-02-02 16:33:35 【问题描述】:我有一张如下所示的表格:
根据 Kimball 的说法,一种缓慢变化的维度类型 2。
Key 只是一个代理键,一个使行唯一的键。
如您所见,产品 A 共有三行。 该产品的时间表还可以。随着时间的推移,产品的描述会发生变化。 从 2020 年 1 月 1 日到 2020 年 4 月 1 日,该产品的描述为 ProdA1。 从 2020 年 5 月 1 日到 2020 年 12 月 2 日,此产品的描述为 ProdA2 等。
如果您查看产品 B,您会发现时间线上存在间隙。
我们使用 DB2 V12 z/O。如何检查每个产品的时间表是否存在差距?
试过了,还是不行
with selectie (key, tel) as
(select product, count(*)
from PROD_TAB
group by product
having count(*) > 1)
Select * from
PROD_TAB A
inner join selectie B
on A.product = B.product
Where not exists
(SELECT 1 from PROD_TAB C
WHERE A.product = C.product
AND A.END_DATE + 1 DAY = C.START_DATE
)
有人知道答案吗?
【问题讨论】:
同一产品有重叠的句点(键 6 和键 7)。这是故意的吗?顺便说一句,请不要张贴图片来显示您的数据。请改用纯文本。 嗨,马克,这也可能是数据质量问题 【参考方案1】:以下查询返回所有产品的所有空白。 想法是在 START_DATE 之前枚举(RN 列)每个产品中的所有期间,并将每条记录与其下一个期间记录连接起来。
WITH
/*
MYTAB (PRODUCT, DESCRIPTION, START_DATE, END_DATE) AS
(
SELECT 'A', 'ProdA1', DATE('2020-01-01'), DATE('2020-01-04') FROM SYSIBM.SYSDUMMY1
UNION ALL SELECT 'A', 'ProdA2', DATE('2020-01-05'), DATE('2020-02-12') FROM SYSIBM.SYSDUMMY1
UNION ALL SELECT 'A', 'ProdA3', DATE('2020-02-13'), DATE('2020-12-31') FROM SYSIBM.SYSDUMMY1
UNION ALL SELECT 'B', 'ProdB1', DATE('2020-01-05'), DATE('2020-01-09') FROM SYSIBM.SYSDUMMY1
UNION ALL SELECT 'B', 'ProdB2', DATE('2020-01-12'), DATE('2020-03-14') FROM SYSIBM.SYSDUMMY1
UNION ALL SELECT 'B', 'ProdB3', DATE('2020-03-15'), DATE('2020-04-18') FROM SYSIBM.SYSDUMMY1
UNION ALL SELECT 'B', 'ProdB4', DATE('2020-04-16'), DATE('2020-05-03') FROM SYSIBM.SYSDUMMY1
)
,
*/
MYTAB_ENUM AS
(
SELECT
T.*
, ROWNUMBER() OVER (PARTITION BY PRODUCT ORDER BY START_DATE) RN
FROM MYTAB T
)
SELECT A.PRODUCT, A.END_DATE + 1 START_DT, B.START_DATE - 1 END_DT
FROM MYTAB_ENUM A
JOIN MYTAB_ENUM B ON B.PRODUCT = A.PRODUCT AND B.RN = A.RN + 1
WHERE A.END_DATE + 1 <> B.START_DATE
AND A.END_DATE < B.START_DATE;
结果是:
|PRODUCT|START_DT |END_DT |
|-------|----------|----------|
|B |2020-01-10|2020-01-11|
可能是更有效的方式:
WITH MYTAB2 AS
(
SELECT
T.*
, LAG(END_DATE) OVER (PARTITION BY PRODUCT ORDER BY START_DATE) END_DATE_PREV
FROM MYTAB T
)
SELECT PRODUCT, END_DATE_PREV + 1 START_DATE, START_DATE - 1 END_DATE
FROM MYTAB2
WHERE END_DATE_PREV + 1 <> START_DATE
AND END_DATE_PREV < START_DATE;
【讨论】:
【参考方案2】:Thnx Mark,这几天会试试这个。 从未听说过 DB2 V12 for z/O 中的 LAG 会读到它
谢谢
【讨论】:
以上是关于检查渐变维度 2的主要内容,如果未能解决你的问题,请参考以下文章
Keras 嵌入层 - ValueError:检查输入时出错:预期有 2 个维度,但得到了 (39978, 20, 20)
model.predict() == ValueError:检查输入时出错:预期 flatten_input 有 3 个维度,但得到的数组形状为 (1, 2)