SSIS 数据流:汇总任务 'hides' 我下游的其他列

SSIS Data Flow: Aggregate Task 'hides' my other columns downstream

我希望有人能帮我解决这个问题。

我有一个更新 table 的 SSIS 包,其中一列是 'current average'。在我的数据流任务中,我需要查看每条记录的 'tickets sold',汇总平均值,并将其添加为插入的一部分。

问题是,聚合任务隐藏了我所有的其他列。我有 'tickets' 和 'avg tickets'、'venue' 和 'time'。当我将记录放入我的数据库目标时,所有 3 个源列(地点、时间、门票)都不可见,唯一可用的是我的聚合。我的插入物需要全部四个。如何将这些其他列添加到 'pass through' 聚合任务以便我可以使用它们?

来源:Excel sheet

Venue, Tickets Sold, Show Time
Royal Oak Music Theatre, 300, 7:00 PM
Saint Andrew's Hall, 200, 9:00 PM
Fox Music Theatre, 700, 8:00 PM

目的地:SQLTable

Venue, Tickets Sold, Show Time, Average Tickets Sold Per Show
Royal Oak Music Theatre, 300, 7:00PM, 300
Saint Andrews Halls, 200, 9:00PM, 250
Fox Music Theatre, 700, 8:00PM, 400

根据您的示例数据,您似乎正在创建 运行 平均值。中的每一行都会添加一个新权重以计入平均值。

挑战在于,SSIS 中的聚合组件无法做到这一点。它将为您提供每个分组的平均值(或 none,在您的情况下)。

您将需要一个脚本组件来计算它。

检查“售出的门票”列作为脚本的输入(它可能被命名为 TicketsSold 或 Tickets_Sold 或它们的某些排列)

您需要在输出缓冲区中定义一个新列,我假设其名称为 runningAverage,类型为 dt_numeric,

我可以自由处理此代码,所以语法错误是我的,但逻辑是正确的 ;)

public class ScriptMain : SomeComponent
{
    int itemCount;
    int total;

    /// initialize members
    public override void PreExecute()
    {
       this.itemCount = 0;
       this.total = 0;
    }

    /// Process all the rows, one at a time
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        // accumulate
        this.itemCount++;
        this.total += Row.TicketsSold;

        // populate the new column
        // force the floating point division lest we truncate with integer division
        Row.runningAverage = this.total / (this.itemCount * 1.0);
    }

}