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

您必须执行以下步骤:

  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

以上是关于SSIS - 计算期初和期末余额的主要内容,如果未能解决你的问题,请参考以下文章

现金及现金等价物净增加额

nc65期初建账重分类

177_模型_Power BI 进销存6大日期维度期初与期末

从当前行和上一行计算 2 列

使用 SQL Server 从多个表中获取期初余额

期末结转