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);
}
}
我希望有人能帮我解决这个问题。
我有一个更新 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);
}
}