我需要在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命令。
在我的回答中,我将假设您的来源是OLEDB Source
,而您的目的地是Flat File
您必须执行以下步骤:
Dataflow Task
(假设nema = DFT Import
)DFT Import
添加你的OLEDB Source
,Script Component
和你的FlatFile Destination
invoice_date
和amount
列标记为输入列Inputs and Outputs
Tab并使你的Output Buffer
异步Desc
类型的DT_STR
和TYPE amount
的DT_I4
)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
注意:如果源列数据类型不是datetime
和integer
,则必须在脚本中执行某些转换方法
其他方法
Execute SQL Task
)您可以使用包含User::intCount
和OLEDB Source
组件的数据流任务而不是前两个步骤,并将rowcount结果存储到变量中
Rowcount
作为Readonly变量User::intCount