Ssis SSI从数据流中的聚合中获取前N个记录
我有一个数据流,其中我使用聚合控件对记录进行分组。 每个组都有一个类别和一个记录计数 现在,我只想将排名前10位的类别存储在数据库中Ssis SSI从数据流中的聚合中获取前N个记录,ssis,aggregate,Ssis,Aggregate,我有一个数据流,其中我使用聚合控件对记录进行分组。 每个组都有一个类别和一个记录计数 现在,我只想将排名前10位的类别存储在数据库中 除了在纸条组件中循环它们并将它们插入表格之外,还有另一种方法可以做到这一点,即通过一个占据前10名的组件。类似于百分比采样。您可以在聚合转换之后使用排序转换。之后,使用行采样转换获得前N行 更新: 如果不使用行采样转换'。只需将此转换替换为“脚本转换”。我们可以在其中生成行数。之后,我们可以使用条件行数的条件拆分转换,我会将聚合数据转储到一个表中,并使用T-SQL
除了在纸条组件中循环它们并将它们插入表格之外,还有另一种方法可以做到这一点,即通过一个占据前10名的组件。类似于百分比采样。您可以在
聚合转换之后使用排序转换
。之后,使用行采样转换
获得前N行
更新:
如果不使用行采样转换'。只需将此转换替换为“脚本转换”。我们可以在其中生成行数。之后,我们可以使用条件行数的条件拆分转换,我会将聚合数据转储到一个表中,并使用T-SQL RANK()获得前10行。sampling似乎会随机选择前10行。即使使用随机种子选项,也不会选中。数据查看器显示,当数据点击采样控件时,数据是正确的,并且顺序正确,但随后它选择了10条随机记录。我确实使用了转换脚本,但最终创建了读取前10行数据并将其通过缓冲区的代码。一旦有10条记录通过,就没有更多的记录进入输出缓冲区,因此只有10条记录从另一端出来。但是谢谢你的帮助。你删除行采样转换了吗?是的。我做了一个聚合,然后选择它创建的前10个排序值,然后传递给脚本。
//variable to store row number
private int counter
//Add this method, which is automatically called once.
public void New()
{
counter = 0;
}
//Edit the following to increment the counter
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
counter += 1;
Row.RowNumber = counter;
}