1

幕后故事:

我有一个将医生人口统计数据加载到我们系统中的过程。这些数据可以在任何时间和更新之间的任何间隔进入。数据就是我们所说的“Term-by-Exclusion”,意思是源文件优先,数据库中任何不在源文件中的医生记录都被标记为“Termed”或Inactive。

问题:

我需要能够将源数据中的数据输出到平面文件目标中,作为每日报告给配套的 COBOL 系统。源数据在处理之前加载到 ETL.PhysicianLoad 表中,并且在每个新的处理事务之前擦除 ETL 表,因此如果没有输出文件,就不可能像现在这样保留一整天的记录。

示例:ProcessOutput_10152013.txt

理想情况下,输出文件需要全面包含一整天的处理。这意味着我想不断地附加到那一天的文件,直到那一天结束,然后通过电子邮件发送通知,说明该文件已准备好提取。任何在一天之内进入的数据都应该放在新创建的文件中。

输出应如下所示(无标题)

BatchID | LastName | FirstName | MiddleInitial | Date
0001    | Smith    | John      | A             | 10/15/13
0001    | Smith    | Sue       | R             | 10/15/13
0001    | Zeller   | Frank     | L             | 10/15/13
0002    | Peters   | Paula     | D             | 10/15/13
0002    | Rivers   | Patrick   | E             | 10/15/13
0002    | Waters   | Oliver    | G             | 10/15/13

我在想什么:

我正在考虑使用 CurrentDate 变量,该变量将保存当前日期,并将其与基于表达式的名为 FileName 的变量进行比较,该变量会将当前 mmddyyyy 连接到“ProcessOutput_.txt”。我的想法是我应该能够在目标文件夹中找到一个具有该名称的文件,如果它存在,我应该能够写入它。否则我将不得不创建一个新文件。然后我可以通过表达式将我的平面文件目标设置为 FileName 变量。

任何人都可以看到更好的方法或我没有看到的此解决方案可能出现的任何问题吗?

4

1 回答 1

2

我的思维过程是在正确的地方,但有缺陷。

这是我解决问题的方法。

在尝试使用原始问题中的逻辑构建我的控制/数据流之后,我发现自己陷入了困境。

所以这让我再次思考,我怎样才能以最简单的方式做到这一点

首先,我是否定义了正确的变量?不..

  • CurrentDate - 必须在那里定义文件名的日期部分。
  • FileName - 出于明显的原因必须存在。

那么我错过了什么?

  • FileExists (Type: boolean) - 识别文件存在的东西。
  • PlaceholderFile(类型:字符串) - 通用文件名变量

现在该怎么办?

  • 将 VB 脚本任务添加到控制流,设置 FileExists 标志。

    'Check to see if ProspectivePhysician_<currentdate>.txt exists.
    Dts.Variables("User::FileExists").Value = File.Exists(Dts.Variables("User::FileName").Value.ToString)
    
  • 现在我们已经定义了目标文件的存在,从源表创建数据流对象。在条件拆分中检查 FileExists 变量。将数据流分成两个分支。创建两个名为“Existing”和“New”的平面文件目标,暂时将它们设置为相同的平面文件位置。

如果您此时尝试运行包,您将收到来自两个目的地之一的验证错误,因为第一个目的地持有文件的所有权,并且不允许第二个目的地验证文件。

如何解决这个问题...使用表达式来回交换实际的 FileName 值。

  • 对于现有平面文件连接字符串值,请使用以下表达式:

    @[User::FileExists] == 真?@[用户::文件名]:@[用户::占位符文件]

  • 对于新平面文件连接字符串值,使用以下表达式:

    @[User::FileExists] == 真?@[用户::占位符文件] : @[用户::文件名]

  • 最后,右键单击数据流中的每个平面文件目标对象,并在新平面文件目标上将覆盖属性设置为 True,在现有目标上设置为 False。这将确保在现有文件上使用附加操作。

于 2013-10-18T20:04:01.187 回答