65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Pivot 和 UnPivot 转换

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (13投票s)

2011 年 5 月 10 日

CPOL

4分钟阅读

viewsIcon

94112

downloadIcon

2153

本文将以简单的方式介绍如何使用 Pivot 和 Unpivot 转换组件。

使用 Pivot 和 UnPivot 转换

目录

  1. 什么是透视(Pivoting)?
  2. 透视示例 
  3. 什么是逆透视(UnPivoting)?
  4. 逆透视示例
  5. 结论

什么是透视(Pivoting)?

透视是一种将行转换为列的机制。在 SSIS 中,Pivot Transformation 组件可以执行相同的任务。在这篇简短的文章中,我们将通过分步方法来探讨这个转换。

透视示例

给定一个结构如下的平面文件作为数据源

Month		DayOfWeek	Expenses
January		Sunday		200
January		Monday		100
January		Tuesday		123
January		Wednesday	154
.......................................
.......................................

April 		Saturday	344

该记录集应该有如下输出

1.jpg

完成工作的步骤

步骤 1: 打开 Bids。从可用的项目类型中选择 Integration Services Project。将一个 Dataflow Task 拖放到控制流设计器中。

2.jpg

步骤 2: 将一个平面文件源拖放到数据流中。在连接管理器中,指定数据源并选中 **第一数据行包含列名** 复选框。

3.jpg

确保“列”选项卡中的“列分隔符”设置为 Tab {t}。单击“确定”。

步骤 3: 将 Pivot transformation 拖放到数据流区域。

4.jpg

步骤 4: 将数据流从 Flat file Source 指定到 Pivot 组件,然后双击 Pivot 组件。Pivot 的高级编辑器将打开。

5.jpg

步骤 5: 单击“输入列”选项卡并选择所有列。

6.jpg

步骤 6: 接下来,我们需要转到“输入和输出属性”选项卡,并展开“Pivot Default Input”树。

7.jpg

将 Month 列的 Pivot Usage 设置为 1,DayOfWeek 设置为 2,Expenses 设置为 3。

接下来,在“Pivot Default Output”树中,我们需要创建 8 个名为 Month、Sunday、Monday、Tuesday、Wednesday、Thrusday、Friday、Sarurday 的列。

对于 Month 列,将 Source column 设置为 Input 列的 Month Column 的 Lineage ID。

8.jpg

接下来,对于其他 Output 列,Source column 应与 Expenses 的 Lineage ID 匹配。此后,Output 列将如下所示:

9.jpg

在 Sunday Output 列上,将 **PivotKeyValue** 设置为 Sunday。

10.jpg

同样,Monday 为 Monday,Tuesday 为 Tuesday,依此类推。完成所有这些设置后,我们需要单击“确定”按钮。

步骤 7: 添加一个 Row Sampling 并启用数据查看器。最终的包设计如下:

11.jpg

运行应用程序,我们将获得所需的输出。希望这个小实验能帮助我们理解如何使用 Pivot Transformation。我们可以继续使用这个强大的组件进行更复杂的转换。在下一节中,我们将研究硬币的另一面,即 UnPivot。

什么是逆透视(UnPivoting)?

如果透视意味着行到列的转换,那么逆透视就是它的反面。 在 SSIS 中,UnPivot Transformation 组件可以执行相同的任务。在这篇简短的文章中,我们将通过分步方法来探讨这个转换。

逆透视示例

给定一个结构如下的平面文件作为数据源

Month	Sunday	 Monday  Tuesday  Wednesday	Thrusday  Friday  Saturday
January	  200	100	   123		154	50	  110	   600
February  400	200	   523	        754	450	  1810     6800
March	  2900	1900      1923		1954	590	  1910     6900
April	  800	10	   12		15	 5	  11	   60

期望的输出应该是

12.jpg

完成工作的步骤

遵循透视转换示例中的步骤 1 和 2。

步骤 3: 将 Pivot transformation 拖放到数据流区域。

13.jpg

将数据流从 Flat file Source 指定到 UnPivot 组件,然后双击 UnPivot 组件。UnPivot Transformation Editor 将打开。

14.jpg

步骤 4: 在 **输入列部分** 添加所有星期几的名称(即 Sunday、Monday 等)(在下图中编号为 1)。在 **目标列部分**,键入 **Expense**(在下图中编号为 2)。

注意:Pivot Key Value 列将具有与 Input 列相同的值。

在 **Pivot key value column name** 中,将 Pivot key value 指定为 Weekdays(在下图中编号为 3)。

15.jpg

完成设置后,我们必须单击“确定”按钮。

步骤 5: 向数据流路径添加一个 Row Sampling 并添加数据查看器。最终的包设计如下:

16.jpg

运行应用程序,我们将获得所需的输出。希望这个小实验能帮助我们理解如何使用 UnPivot Transformation。我们可以继续使用这个强大的组件进行更复杂的转换。

结论

Pivot 和 UnPivot 是非常有用的且不可或缺的转换。希望本文能帮助理解它们。我们还学习了如何配置这些组件,以及 Pivot 转换中 Lineage ID 的重要性等。感谢阅读本文。

© . All rights reserved.