SSIS 中的 UNPIVOT 转换用于将非规范化 (DE Normalized) 数据转换为更规范化的版本,这类似于 SQL 的 UNPIVOT。UNPIVOT 转换的作用与 Pivot 完全相反。
请参考 Pivot 转换 文章,了解如何将规范化数据转换为非规范化数据。
以下数据被视为我们的 SSIS unpivot 转换源数据。

SSIS UNPIVOT 转换示例
在此 SSIS UNPIVOT 转换示例中,我们将把 Employees 数据库中的 Pivot 表转换为常规表。
步骤 1:打开 BIDS,然后从工具箱将数据流任务拖放到控制流中。将其重命名为 UNPIVOT Transformation。

双击它将打开数据流选项卡。有关更多转换,请点击此处 >> 点击这里。
步骤 2:根据下图,从工具箱将 OLE DB 源和 UNPIVOT 转换拖放到数据流区域。

步骤 3:双击数据流区域中的 SSIS OLE DB 源以打开连接管理器设置。它提供了编写 SQL 语句的空间。在此示例中,我们将使用 Employees 数据库中的 PIVOT 表作为源。

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

此处,我们选择 ProductID、Name、2005、2006、2007 和 2008。
单击“确定”,然后从 OLE DB 源拖动蓝色箭头到 UNPIVOT 转换,对源数据执行转换。
步骤 5:双击 SSIS UNPIVOT 转换以配置它。

- 可用输入列 (Available Input Columns):通过勾选复选框选择要 UNPIVOT 的列。不要忘记为其余列选择“传递”(Pass Through) 选项。如果您错过了选择“传递”选项,这些列将无法用于目标。在此 SSIS 转换示例中,ProductID 和 Name 列是“传递”列,而 2005、2006、2007 和 2008 是我们要 UNPIVOT 的列。
- 输入列 (Input Column):在“可用输入列”选项中选择的所有列都会自动添加到此部分。因此,2005、2006、2007 和 2008 列是“输入列”。
- 目标列 (Destination Column):指定要在其中存储值或“输入列”中数据(例如 2005、2006、2007 和 2008)的目标列的名称。
- 透视键值 (Pivot Key Value):为透视值指定名称,这些值将作为列值存储在“日历年”(Pivot Key Value Column Name) 列中。默认值与输入列相同。但是,您可以根据需要进行更改。我们对 2005、2006、2007 和 2008 的值没有意见,因此我们没有更改这些值。
- 透视键值列名 (Pivot Key Value Column Name):指定您希望看到的透视值列的名称。由于我们的列数据是 2005、2006、2007 和 2008,我们将默认的“透视键值”更改为“日历年”。

在此 SSIS unpivot 转换示例中,我们将目标列命名为 Order Quantity,将透视键值列名命名为 Calendar Year。
步骤 6:现在,我们需要提供目标服务器、数据库和表详细信息。因此,双击 OLE DB 目标并提供所需信息。

此处,我们选择数据库作为我们的目标数据库,选择 [UNPIVOT Transformation] 表作为我们的目标表。
步骤 8:单击“映射”选项卡,检查 UNPIVOT 转换源列是否与目标列正确映射。

单击“确定”完成我们的 SSIS UNPIVOT 转换包设计。让我们运行该包。

在 Management Studio 中检查 UNPIVOT 转换结果。

评论已关闭。