SSIS - 计算期初和期末余额

问题描述 投票:2回答:1

我需要在SSIS中计算期初余额和期末余额。我将以下数据作为输入。

invoice_date    amount
12/4/2016       4000
12/5/2016       5000
12/6/2016       7500
12/7/2016       5000
12/8/2016       8000

我想要输出如下:

Opening Balance    4000
Closing Balance    8000

有人可以帮助我在SSIS中实现这一目标吗?

注意:只需要使用转换。无需执行SQL任务或OLEDEB命令。

sql-server ssis etl ssis-2012 bids
1个回答
3
投票

在我的回答中,我将假设您的来源是OLEDB Source,而您的目的地是Flat File

您必须执行以下步骤:

  1. 添加另一个Dataflow Task(假设nema = DFT Import
  2. DFT Import添加你的OLEDB SourceScript Component和你的FlatFile Destination
  3. 在脚本组件中将invoice_dateamount列标记为输入列

enter image description here

  1. 在脚本中转到Inputs and Outputs Tab并使你的Output Buffer异步

enter image description here

  1. 创建2个输出列*(Desc类型的DT_STR和TYPE amountDT_I4

enter image description here

  1. 在您的脚本中编写以下代码:(Vb.net) Dim MinDate, MaxDate As Date Dim MinAmount, MaxAmount As Integer Dim intRowCount As Integer = 0 Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) intRowCount += 1 If intRowCount = 1 Then MinDate = Row.invoicedate MaxDate = Row.invoicedate MinAmount = Row.amount MaxAmount = Row.amount Else If Row.invoicedate < MinDate Then MinDate = Row.invoicedate MinAmount = Row.amount ElseIf Row.invoicedate > MaxDate Then MaxDate = Row.invoicedate MaxAmount = Row.amount End If End If End Sub Public Overrides Sub PostExecute() MyBase.PostExecute() Output0Buffer.AddRow() Output0Buffer.Desc = "Opening Balance" Output0Buffer.amount = MinAmount Output0Buffer.AddRow() Output0Buffer.Desc = "Closing Balance" Output0Buffer.amount = MaxAmount End Sub
  2. 将输出列映射到目标列

注意:如果源列数据类型不是datetimeinteger,则必须在脚本中执行某些转换方法

其他方法

  1. 添加qazxsw poi以获取源表的行数
  2. 将计数值(Resultset)存储到SSIS变量中(例如:Execute SQL Task

您可以使用包含User::intCountOLEDB Source组件的数据流任务而不是前两个步骤,并将rowcount结果存储到变量中

  1. 按照第一种方法执行相同的步骤
  2. 在脚本中添加Rowcount作为Readonly变量
  3. 在脚本中编写以下代码 User::intCount
© www.soinside.com 2019 - 2024. All rights reserved.