我得到了下表,其中存在以下问题:
从数据集创建缓慢变化的维度类型 2。EMPLOYEE 表记录了每个员工的日常记录。类型 2 - 将具有有效数据和到期日期。
| 员工ID | 日期 | 姓名 | 经理ID |
|---|---|---|---|
| 123 | 3 月 1 日 | 约翰·史密斯 | 1 |
| 123 | 3月2日 | 约翰·史密斯 | 1 |
| 123 | 3月3日 | 约翰·史密斯 | 2 |
| 123 | 3 月 4 日 | 约翰·史密斯 | 3 |
| 123 | 3月5日 | 约翰·史密斯 | 3 |
我相信我的目标表应该如下所示:
| 员工ID | 姓名 | 经理ID | 生效日期 | 截止日期 |
|---|---|---|---|---|
| 123 | 约翰·史密斯 | 1 | 3 月 1 日 | 3月3日 |
| 123 | 约翰·史密斯 | 2 | 3月3日 | 3 月 4 日 |
| 123 | 约翰·史密斯 | 3 | 3 月 4 日 | 无效的 |
我尝试了以下查询:
SELECT employee_id, name, manager_id,
CASE
WHEN LAG(manager_id) OVER() != manager_id THEN e.date …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MERGE语句来插入/更新SCD2类型的维度表
我的源是一个Table var to Merge with Dimension表.
我的MERGE语句抛出一个错误:
当FROM子句包含嵌套的INSERT,UPDATE,DELETE或MERGE语句时,INSERT语句的目标表'DM.DATA_ERROR.ERROR_DIMENSION'不能位于(主键,外键)关系的任何一侧.找到参考约束'FK_ERROR_DIMENSION_to_AUDIT_CreatedBy'.
我的MERGE声明:
DECLARE @DATAERROROBJECT AS [ERROR_DIMENSION]
INSERT INTO DM.DATA_ERROR.ERROR_DIMENSION
SELECT ERROR_CODE,
DATA_STREAM_ID,
[ERROR_SEVERITY],
DATA_QUALITY_RATING,
ERROR_LONG_DESCRIPTION,
ERROR_DESCRIPTION,
VALIDATION_RULE,
ERROR_TYPE,
ERROR_CLASS,
VALID_FROM,
VALID_TO,
CURR_FLAG,
CREATED_BY_AUDIT_SK,
UPDATED_BY_AUDIT_SK
FROM (MERGE DM.DATA_ERROR.ERROR_DIMENSION ED USING @DATAERROROBJECT OBJ
ON(ED.ERROR_CODE = OBJ.ERROR_CODE AND ED.DATA_STREAM_ID = OBJ.DATA_STREAM_ID) WHEN NOT MATCHED THEN INSERT VALUES(
OBJ.ERROR_CODE
,OBJ.DATA_STREAM_ID
,OBJ.[ERROR_SEVERITY]
,OBJ.DATA_QUALITY_RATING
,OBJ.ERROR_LONG_DESCRIPTION
,OBJ.ERROR_DESCRIPTION
,OBJ.VALIDATION_RULE
,OBJ.ERROR_TYPE
,OBJ.ERROR_CLASS
,GETDATE()
,'9999-12-13'
,'Y'
,1
,1
) WHEN MATCHED AND ED.CURR_FLAG = 'Y'
AND ( ED.[ERROR_SEVERITY] <> OBJ.[ERROR_SEVERITY]
OR ED.[DATA_QUALITY_RATING] …Run Code Online (Sandbox Code Playgroud) 我正处于开始新任务的过程中,其中我需要加载带有SCD1和SCD2的混合维度表.这需要作为SSIS包实现.如果我使用SCD组件或有其他方法,有人可以指导在SSIS中处理此问题的最佳方法吗?有什么最好的做法.
对于SCD2类型,我使用Merge语句.
谢谢