Informatica 中的 Rank 转换类似于 SQL 中的 RANK 函数,用于选择数据中的排名靠前或靠后的数据。在实际应用中,此转换将非常有用。
例如,您可以使用此 Informatica Rank 转换来选择销售额最高和最低的前 10 个地区,或者选择表现最差的 20 个产品或地区等。
在这个 Rank 转换示例中,我们将使用下图所示的数据。

配置 Informatica 中的 Rank 转换
在开始配置 Rank 转换之前,首先连接到存储库服务。为了连接到 Informatica 存储库服务,我们需要提供在 安装 服务器时指定的 管理员控制台 用户名和密码。接下来,单击“连接”按钮。
- 请使用 Group By 选项来检查 Rank 转换的分组。

在 Informatica 源定义中创建 Rank 转换
成功连接后,请导航到 Source Analyzer 并定义您的源。在此 Rank 转换示例中,我们使用 SQL Server 数据库中的 [Employ] 表作为源定义。请参考 数据库源 以了解创建源定义所涉及的步骤。

创建目标定义
请导航到 Target Designer 并定义目标。在此 Informatica Rank 转换示例中,我们使用已创建的 SQL 表作为目标定义。请参考 使用源定义创建目标表 以了解创建目标定义。

在 Informatica Mapping 中创建 Rank 转换
要创建新的 Mapping 来进行 Rank 转换,请导航到菜单栏中的 Mappings 菜单,然后选择“Create..”选项。这将打开如下所示的 Mapping 名称窗口。在这里,您需要为此 Mapping(m_Rank_Transformation)输入一个唯一的名称,然后单击“OK”按钮。

接下来,将 [Employ] 源定义从“Sources”文件夹拖放到 Mapping Designer。一旦您拖放了源,PowerCenter Designer 将自动创建一个名为“source qualifier”的默认转换。
在 Informatica 中创建 Rank 转换
要创建 Rank 转换,请导航到“Transformation”菜单,然后选择如下所示的“Create..”选项。

单击“Create..”选项后,将打开如下所示的“Create Transformation”窗口。请从下拉列表中选择“Rank Transformation”,为此转换指定一个唯一的名称(rnk_Income),然后单击“Create”按钮。

单击“Create”按钮后,Informatica Rank 转换将被添加到 Mapping Designer。
要对数据进行排名,需要一些数据。因此,我们必须通过拖放所需的字段来连接源定义和转换。

从上面的屏幕截图,您可以注意到一个名为 RANKINDEX 的新项,这是 Rank 转换创建的默认端口。此输出端口将保存排名编号,因此我们需要将此输出端口分配给目标表的排名列。
双击 Informatica Rank 转换以提供排名依据(您希望基于哪个列进行排名)。从下面的屏幕截图,您可以看到“Transformation”选项卡中可用属性的列表。
- 选择转换:默认情况下,它将选择您单击的转换。
- 重命名:此按钮可帮助您将其重命名为更有意义的名称。
- 设为可重用:如果您选中此选项,则此转换将成为可重用转换。
- 描述:请提供有效的描述。

下面的屏幕截图将显示 Informatica Rank 转换“Ports”选项卡中可用选项的列表。
- 端口名称:可用列名的列表。通过单击“New column”按钮,您可以添加新列,而剪刀按钮可以删除不需要的列。
- I:在此部分下勾选的列是输入列。
- O:在此部分下勾选的列是输出列。如果您取消勾选任何列,则该列将无法加载到目标表中。
- R:请勾选您要用作排名依据的列(您希望基于哪个列进行排名)。例如,如果您想按年收入对数据进行排名,则必须像下面所示那样勾选它。

下面的屏幕截图显示了 Rank 转换“Properties”选项卡中可用选项的列表。
- 缓存目录:集成服务将在此位置存储缓存文件。
- Top/Bottom:这将为用户提供两个选项,即 Top 和 Bottom。如果您想从上到下(Z 到 A)对数据进行排名,请使用“Top”选项;如果您想从下到上(A 到 Z)对数据进行排名,请使用“Bottom”选项。
- 排名数量:请输入您要排名的行数。默认值为 1,表示 Rank 转换仅选择 1 条记录。
- 区分大小写的字符串比较:如果您选中此选项,则在对数据进行排序时,转换将执行区分大小写的字符串比较。
在此 Informatica Rank 转换示例中,我们希望根据 Employ 表中所有记录的年收入(降序)进行排名,因此我们将 Top/Bottom 属性值选择为 Top,将排名数量属性值选择为 20(我们的最大记录数为 14)。

完成属性配置后,单击 OK 关闭转换窗口。
接下来,将目标定义(Rank Transformation)从“Targets”文件夹拖放到 Mapping Designer,并将转换与目标定义连接。请使用“Autolink..”选项连接它们。

在关闭 Mapping 之前,让我们通过转到“Mapping”菜单栏并选择“Validate”选项来验证 Mapping。
为 Rank 转换创建工作流
完成 Mapping 创建后,我们需要为其创建工作流。PowerCenter Workflow Manager 提供了两种创建工作流的方法。
在此 Informatica Rank 转换示例中,我们将手动创建工作流。要创建新的工作流,请导航到“Workflows”菜单并选择“Create”选项。这将打开“Create Workflow”窗口。请为此工作流(wf_Rank_Transformation)提供一个唯一的名称,并保留默认设置。

创建 工作流 后,下一步是为我们的 Rank 转换 Mapping 创建一个会话。
创建会话
有两种类型的会话
在此 Informatica Rank 转换示例中,我们将创建非可重用会话。请导航到“Tasks”菜单并选择“Create”选项以打开“Create Task”窗口。在这里,您需要选择“Session”作为任务类型(默认),并为此会话输入一个唯一的名称(S_Rank_Transformation)。
单击“Create”按钮后,将打开一个新的 Mappings 窗口。您必须选择要与此会话关联的 Mapping。
从下面的屏幕截图,您可以注意到我们正在选择我们之前(在第 3 步)创建的 Mapping(m_Rank_Transformation)。

双击 Session Task 进行配置。虽然我们需要配置源、目标和一些常用属性,但我们只解释其中的一些属性。我们强烈建议您访问 Session 文章以了解其余属性。
从下面的屏幕截图,您可以注意到我们已将 $target 变量分配给“Connection Value”,已将“Target Load Type”选项从“Bulk”更改为“Normal”模式,并勾选了“Truncate target table”选项以截断目标表中的现有数据。

从下面的屏幕截图,您可以注意到 Informatica 工作流中的 Rank 转换是有效的。让我们通过导航到“Workflows”菜单并选择“Start Workflow”选项来启动工作流。

选择“Start Workflow”选项后,将打开 PowerCenter Workflow Monitor 来监视工作流。从下面的屏幕截图,您可以注意到我们的 Rank 转换工作流已成功执行,没有任何错误。

让我们打开 SQL Server Management Studio,检查是否使用 Rank 转换成功按年收入对记录进行了排名。

我们可以使用以下查询来实现上述输出
SELECT [FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,RANK() OVER (
ORDER BY [YearlyIncome] DESC
) AS RANK
FROM [Customers]
让我们将 Top/Bottom 属性更改为 Bottom 并刷新 Mapping。这意味着 Informatica Rank 转换工作流将按年收入(升序)对 Employ 表进行排名(0 为 1,1 为 2……)。

让我们打开 SQL Server 来检查是否已按年收入(升序)成功对记录进行排名。请参考 函数 文章。
