SSIS 缓慢变化的维度类型 2

SSIS 缓慢变化的维度转换会协调数据仓库维度表中的记录的插入和更新。此转换支持四种类型的更改,在本文中,我们将解释 SSIS 缓慢变化的维度类型 2(也称为 SCD 历史属性或 SCD 2)。

SSIS 缓慢变化的维度类型 2(SCD 2):如果要维护列的历史数据,请将其标记为历史属性。如果您的维度表成员(或列)被标记为历史属性,它将维护当前记录。此外,它将创建一条具有更改详细信息的新记录。在实际中,此 SCD 2 或 SSIS 缓慢变化的维度类型 2 提供的更改类型非常有用。例如,如果我们想维护员工的过去和当前城市或员工的先前部门和当前部门,我们可以将这些列标记为历史属性。在输入示例之前,让我们看看我们 Employees Dimension 表中的数据。

注意:由于 SSIS 缓慢变化的维度类型 2 维护历史数据,随着数据的增长,SCD 将难以维护数据。

  1. SCD 类型 0
  2. SCD 类型 1

以下屏幕截图将向您展示我们 [Employees] 表中的数据。我们将使用此数据进行此次 SSIS SCD 2 或缓慢变化的维度类型 2 演示。您可以通过在 [AdventureWorksDW2014] 数据库的 [DimEmployee] 表中选择 TOP 10 条记录来获取相同的数据。

Employee Source 1

下图显示了 [EmployeeSource] 表中的数据;我们将更新或插入这两条记录到 [Employees] 表中。

Employee Source 2

如果您观察到上面的屏幕截图,员工 ID (253022876) 的部门名称与原始值不同。它已从“市场营销”更改为“销售”,我们有一条新员工 ID 为 253022870 的记录。我们的任务是插入新记录并更新第二条记录的部门名称。

SSIS 缓慢变化的维度类型 2 示例

步骤 1:打开 BIDS,从工具箱将数据流任务拖放到控制流中,并将其命名为 SSIS 缓慢变化的维度类型 2。

Data Flow Task

双击它将打开数据流选项卡。

步骤 2:将 OLE DB 源、缓慢变化的维度从 SSIS 工具箱拖放到数据流区域。

SSIS Slowly Changing Dimension Type 2 - 2

步骤 3:双击数据流区域中的 OLE DB 源。它将打开连接管理器设置,并提供编写语句的空间。在这里,我们使用已创建的 OLE DB 连接管理器 和 EmployeSource 表作为源表。如果您在配置时遇到任何困难,请参考 OLE DB 源

OLE DB Source Editor

步骤 4:单击列选项卡以验证列。在此选项卡中,我们还可以取消选中不需要的列。

Verify Source Columns 4

要使用 OLE DB 源数据,请将蓝色箭头从 OLE DB 源拖放到缓慢变化的维度转换,以连接数据。

SCD 2 步骤 5:双击 SSIS 缓慢变化的维度转换以使用 SCD 类型 2。单击后,它将打开缓慢变化的维度向导。第一页是欢迎页面。如果您不想再次看到此页面,请勾选“不再显示此页面”复选框。现在,单击下一步。

Slowly Changing Dimension Wizard

步骤 6:选择维度表和键:此页面配置维度表信息。

连接管理器:此选项提供到维度表的连接。这里我们使用已创建的 OLE DB 连接管理器,它连接到数据库。您可以单击“新建”按钮更改连接管理器设置。

SCD Type 2 Connection Manager

表或视图:此选项用于选择您要在其上操作的数据仓库维度表或视图。这里我们选择 Employees 表。

Slowly Changing Dimension Type 2 Table and Keys
  • 输入列:来自 OLE DB 源的列。
  • 维度列:Employees Dimension 表中可用的列。
  • 键类型:要执行 SSIS 缓慢变化的维度 2 或 SCD 2,我们需要至少一个业务键。这里,我们知道 Employee Alternative Key 是键列。请将键类型从“非键列”更改为“业务键”。
Business Key

步骤 7 – 列:这是此向导中创建 SSIS SCD 2 或缓慢变化的维度类型 2 的主要页面。这里我们有

  • 维度列:维度表中的所有列都将在该部分中提供。在这里,您必须选择要为更改类型选择的列。从下面的屏幕截图中,您可以观察到我们正在选择 Birthdate、Login ID 和 Department Name 列。
  • 更改类型:选择更改类型。在此示例中,我们将 Birthdate 和 Login ID 列的更改类型保留为默认的“固定属性”。我们要维护 Department Name 的历史数据。因此,我们将其选择为“历史属性”。
SSIS Slowly Changing Dimension Type 2 - 9

提示:默认情况下,向导会将“固定属性”分配为“更改类型”。但您可以更改它们。

步骤 8 – 固定和变化属性选项:此页面有两个选项,我们在 类型 0 文章中已解释了第一个选项。我们将在下一节中介绍第二个选项。

Fixed and Changing Attribute

步骤 9 – SSIS 缓慢变化的维度历史属性选项:我们需要配置以下选项来维护历史数据。首先,我们将向您展示第二个选项的配置设置,然后展示其他选项。

SSIS 缓慢变化的维度或 SCD 类型 2 使用开始日期和结束日期:请使用“使用开始和结束日期来标识当前和过期记录”选项来使用开始和结束日期。

  • 开始日期列:在这里,您必须选择记录的开始日期。例如,员工入职日期或生产开始日期等。
  • 结束日期列:在这里,您必须选择记录的结束日期(通常,值为 NULL)。例如,员工结束日期。
  • 用于设置日期值的变量:请指定新插入记录的开始日期和当前记录的结束日期。
SSIS Slowly Changing Dimension Type 2 - 11

从下面的屏幕截图中,您可以观察到我们选择 StartDate 作为开始日期列,EndDate 作为结束日期列。容器的开始时间是新插入记录的开始日期。

SSIS Slowly Changing Dimension Type 2 - 12

推断的维度成员:我们将在推断的维度文章中讨论此选项。对于此 SSIS 缓慢变化的维度或 SCD 类型 2 示例,我们取消选中此选项并单击“下一步”按钮。

SSIS Slowly Changing Dimension Type 2 - 13

步骤 10 – 完成向导:单击“完成”按钮以完成 SSIS 缓慢变化的维度、SCD 类型 2 的配置。

单击完成按钮后,我们的数据流将自动更改。如果您观察到下面的屏幕截图,它添加了 派生列转换 来设置结束日期为容器的开始时间。OLE DB 命令 以容器开始时间更新结束日期(NULL 值)。

Union All 组合了历史数据和新输入。派生列转换用于设置新记录开始日期为容器开始时间。然后 OLE DB 目标 将新记录插入维度表。

Slowly Changing Dimension Type 2 - 15

(可选步骤):让我们双击 派生列转换 来检查用于设置结束日期的自动生成表达式。

Derived Column Transformation Editor

(可选步骤):让我们双击 OLE DB 命令转换来检查自动创建的 Update 语句。

OLE DB Command Transformation Update

(这是可选步骤):让我们双击派生列来检查用于设置新记录开始日期的自动生成表达式。

Derived Column Expression

(可选步骤):让我们双击 OLE DB 目标。检查自动创建的目标,包括表名、连接管理器设置和映射。

OLE DB Destination

单击 OK 完成我们的 SSIS 缓慢变化的维度类型 2 包设计并运行 SCD 2 包。

SSIS Slowly Changing Dimension Type 2 - 20

从上图可以看出,有两个行来自 OLE DB 源。一行直接插入,另一行则保留历史信息后再插入。

让我们打开 Management Studio 并检查结果。如果您观察到下面的记录,我们的包

  • 添加了员工替代键 253022870 的新记录。
  • 为员工替代键 253022876 设置了结束日期,并
  • 为员工替代键 253022876 添加了部门名称更新的新记录。
Destination Table

让我们看看当我们在 SSIS 缓慢变化的维度类型 2 中选中“使用单列显示当前和过期记录”选项时会发生什么。

  • 指示当前记录的列:请指定当前和过期记录的列名。这里我们选择 Status 列。
  • 当前值:在这里,您必须指定当前记录的值。
  • 结束日期列:在这里,您必须指定过期记录的值。
SSIS Slowly Changing Dimension Type 2 - 22

单击 OK 完成 SCD 2 或 SSIS 缓慢变化的维度类型 2 包设计,然后运行该包。

SSIS-Slowly-Changing-Dimension-Type-2-23

让我们打开 Management Studio 并检查结果。如果您观察到下面的记录,我们的 SSIS 缓慢变化的维度类型 2 包。

  • 添加了员工替代键 253022870 的新记录。
  • 为员工替代键 253022876 将 Status 设置为 Expired,并
  • 为员工替代键 253022876 添加了部门名称更新的新记录,并将 Status 设置为 Current。
Destination Table

评论已关闭。