如何解决SSIS数据流:聚合任务“隐藏”我的其他下游列
我希望有人可以帮助我。
我有一个更新表的SSIS程序包,其中一列是“当前平均值”。在我的数据流任务中,我需要查看每条记录的“售出门票”,汇总平均值,并将其添加为插入内容的一部分。
问题是,聚合任务隐藏了我所有其他列。我有“门票”和“平均门票”,“场地”和“时间”。当我将记录放入“数据库目标”时,所有3个源列(地点,时间,票证)都不可见,唯一可用的是我的汇总。我需要全部四个插入。如何使其他列“通过”聚合任务,以便可以使用它们?
来源:Excel工作表
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
目标:sql表
Venue,Show Time,Average Tickets Sold Per Show
Royal Oak Music Theatre,7:00PM,300
Saint Andrews Halls,9:00PM,250
Fox Music Theatre,8:00PM,400
解决方法
给出示例数据,似乎您正在创建一个运行平均值。每一行都会添加一个新的权重,以计入平均值。
挑战在于,SSIS中的Aggregate组件无法做到这一点。它将为您提供每个分组的平均值(对于您的情况,则为零)。
您将需要一个脚本组件来计算它。
选中“已售票”列作为脚本的输入(可能会被命名为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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。