1

バックストーリー:

医師の人口統計データをシステムにロードするプロセスがあります。このデータは、いつでも、どの更新間隔でも入ってくる可能性があります。データは「Term-by-Exclusion」と呼ばれるものです。つまり、ソース ファイルが優先され、ソース ファイルにないデータベース内の医師のレコードは「Termed」または Inactive としてマークされます。

問題:

コンパニオン COBOL システムへの日次レポートとして、ソース データからフラット ファイルの出力先にデータを出力できる必要があります。ソース データは処理前に ETL.PhysicianLoad テーブルにロードされ、ETL テーブルは新しい処理トランザクションごとに消去されるため、現在の状態では、出力ファイルがなければ 1 日分のレコードを保持することはできません。

例: ProcessOutput_10152013.txt

出力ファイルは、理想的には、1 日の処理全体を包括している必要があります。つまり、その日の終わりまでその日のファイルに継続的に追加し、ファイルの受け取り準備が整ったことを示す通知を電子メールで送信します。一日の変わり目に入ってくるデータは、新しく作成されたファイルに配置する必要があります。

出力は次のようになります (ヘッダーなし)

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 変数を使用して、現在の mmddyyyy を「ProcessOutput_.txt」に連結する FileName と呼ばれる式ベースの変数と比較することを考えています。私の考えでは、宛先フォルダーでその名前のファイルを見つけることができ、存在する場合はそれに書き込むことができるはずです。それ以外の場合は、新しいファイルを作成する必要があります。次に、式を介してフラット ファイルの送信先を FileName 変数に設定できます。

これを行うためのより良い方法や、私が見ていないこのソリューションから発生する可能性のある問題を誰かが見ることができますか?

4

1 に答える 1

2

私の思考プロセスは適切な場所にありましたが、欠陥がありました。

これが私が問題を解決した方法です。

元の質問のロジックを使用して制御/データ フローを構築しようとした後、自分が隅に追いやられていることに気付きました。

それで、私はもう一度考えました。これを可能な限り簡単な方法で行うにはどうすればよいですか

まず、正しい変数が定義されていますか? いいえ..

  • CurrentDate - ファイル名の日付部分を定義するために存在する必要があります。
  • FileName - 明らかな理由で存在する必要があります。

それで、私は何を逃したのですか?

  • FileExists (Type: boolean) - ファイルの存在を識別するもの。
  • PlaceholderFile (型: 文字列) - ジェネリック FileName 変数

今それをどうするか?

  • FileExists フラグを設定する VB スクリプト タスクを制御フローに追加します。

    'Check to see if ProspectivePhysician_<currentdate>.txt exists.
    Dts.Variables("User::FileExists").Value = File.Exists(Dts.Variables("User::FileName").Value.ToString)
    
  • これで宛先ファイルが定義されたので、ソース テーブルからデータ フロー オブジェクトを作成します。条件付き分割で FileExists 変数を確認します。データ フローを 2 つの分岐に分離します。「既存」と「新規」という 2 つのフラット ファイルの宛先を作成し、当面は両方を同じフラット ファイルの場所に設定します。

この時点でパッケージを実行しようとすると、2 つの宛先のいずれかから検証エラーが返されます。これは、最初の宛先がファイルの所有権を保持しており、2 番目の宛先がファイルを検証できないためです。

これを修正する方法... 式を使用して、実際の FileName 値を前後に入れ替えます。

  • 既存のフラット ファイル接続文字列値には、次の式を使用します。

    @[User::FileExists] == True ? @[ユーザー::ファイル名] : @[ユーザー::プレースホルダーファイル]

  • 新しいフラット ファイル接続文字列の値には、次の式を使用します。

    @[User::FileExists] == True ? @[ユーザー::プレースホルダーファイル] : @[ユーザー::ファイル名]

  • 最後に、データ フロー内の各フラット ファイル送信先オブジェクトを右クリックし、新しいフラット ファイル送信先では Overwrite プロパティを True に設定し、既存の送信先では False に設定します。これにより、既存のファイルに追加アクションが確実に使用されます。

于 2013-10-18T20:04:01.187 に答える