SSIS - 计算期初和期末余额
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSIS - 计算期初和期末余额相关的知识,希望对你有一定的参考价值。
我需要在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
异步
- 创建2个输出列*(
Desc
类型的DT_STR
和TYPEamount
的DT_I4
)
- 在您的脚本中编写以下代码:(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
- 将输出列映射到目标列
注意:如果源列数据类型不是datetime
和integer
,则必须在脚本中执行某些转换方法
其他方法
- 添加qazxsw poi以获取源表的行数
- 将计数值(Resultset)存储到SSIS变量中(例如:
Execute SQL Task
)
您可以使用包含User::intCount
和OLEDB Source
组件的数据流任务而不是前两个步骤,并将rowcount结果存储到变量中
- 按照第一种方法执行相同的步骤
- 在脚本中添加
Rowcount
作为Readonly变量 - 在脚本中编写以下代码
User::intCount
以上是关于SSIS - 计算期初和期末余额的主要内容,如果未能解决你的问题,请参考以下文章