SSIS从数据流中的聚合中获取前N个记录

时间:2014-01-17 05:55:17

标签: ssis aggregate

我有一个数据流,我使用聚合控件对记录进行分组。 每个组都有一个类别和记录计数。

现在id就像采用前10个最高计数的类别并将它们存储在数据库中。

除了在脚本组件中循环它们并将它们插入到表中之外还有另一种方法可以实现这一点..通过一个抓住前10个的组件,比如百分比采样。

2 个答案:

答案 0 :(得分:1)

您可以在Sort transformation之后使用aggregate transformation。之后使用Row Sampling transformation获取前N行。

<强> 更新

如果它不能使用行采样转换'。用“脚本转换”替换这个转换。我们可以在其中生成RowNumber。之后,我们可以使用条件RowNumber <= 10的条件分裂变换。这样我们就可以过滤行了。

步骤:

  1. 添加Script component并将其选为“transformation
  2. 按照以下屏幕截图创建列,如下所示存储RowNumber
  3. 将这些内容添加到 代码库
  4. 添加Conditional Split transformation并具有类似RowNumber&lt; = 10
  5. 的条件

    enter image description here

    所以,现在只选择前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;
    
    }
    

    希望它有所帮助!

答案 1 :(得分:0)

我将汇总数据转储到表格&amp;使用T-SQL RANK()获得前10名。