微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSIS数据流:聚合任务“隐藏”我的其他下游列

如何解决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 举报,一经查实,本站将立刻删除。