2016-11-21 13 views
2

SSISプロジェクトでは、Excelファイルソースから行をフィルタリングしようとしています。ここで、列には文字で始まり値が続きます。一部のセルには1つ以上の値が含まれており、すべてのセルがデータ型の形式に従っているわけではありません。
Excel Source > Data Conversion > OLE DB Destination
Excelソースの後に条件付き分割を追加していますが、不要なレコードを除外する方法に問題があります。以下のデータ・フローの終了前に含まれるべきではない値の例である:ssisは、文字で始まる値を持つ行をフィルターにかける

Row  Value 
1  1234 
2  P123 
3  P1234, P456 
4  rec P678 

行1の宛先に流れなければならないだけであるべきです。各セルの値の数にかかわらず、「P」で始まり、その後に続くレコードを除外する方法はありますか?

更新:現在、FINDSTRING(値、 "P"、1)> 0 || FINDSTRING(値、 "p"、1)> 0です。出力は行2〜4をブロックしますが、行1の値は0に変更されました。

+1

を使用して条件付き分割を追加するだけで、要件を満たすことができます。https://www.simple-talk.com/sql/ssis/ssis-basics-using-the-conditional-split/ – mohan111

+0

こんにちは!応答をありがとうが、私は条件付き分割のためのより具体的なコーディングアドバイスを探しています。基本的には、Splitは、最初の文字としてPを含むレコードが含まれていますが、その後に数字が続くため、他の行を「ブロック」する必要があります。つまり、値が "Person Value 1234"の場合、 "P"の後に数字がないため、このレコードをブロックしないでください。現在のコード(まだ動作しません): FINDSTRING(値、 "P"、1)> 0 && CODEPOINT([値]、FINDSTRING(値、 "P"、1)、3)) > 47 && CODEPOINT(SUBSTRING(値、FINDSTRING(値、 "P"、1)、7))<58 – Steve

+0

私はあなたの最初の行の変更がExcelドライバの*ひどい*アプローチと関係があるかもしれないと推測していますデータ型を推測するデータ型が間違っていると推測され、それについてはあまりできません。このようにhttps://msdn.microsoft.com/en-us/library/ms141683.aspxに_Missing Values_というセクションを読んでください。この問題はインターネット上で発生しています。あなたの値がNULLではなくゼロである理由は分かりませんが、それは確かです。回避策のために* IMEX *を参照してください –

答えて

0

チェックする条件は、フィールドが数値かどうかを調べます。残念ながら、私たちはSSIS内で簡単なISNUMERIC機能を持っていません。

次のリンクからご覧ください。これは、派生した列を使用することで実現できます。

Check IsNumeric() with Derived Column Transform in SSIS Package

0

第一ソリューション

スクリプトコンポーネントの.NETメソッドでは、値が数値であるかどうかをチェックします。

1)スクリプトコンポーネント チェックを行う必要がある場所でスクリプトコンポーネント(タイプ:変換)を追加します。

2)入力列の選択 入力列としてチェックする必要がある列を追加します。

3)出力列を追加します。 [入力と出力]タブの[出力]列に新しい列を追加します。型式はブール値で、適切な名前を付けます。

4)スクリプト

'VB.Netコード は、' 文字列値が数 輸入システム 輸入System.Data 輸入System.Mathの 輸入Microsoft.SqlServer.Dts.Pipelineが含まれているかどうか確認してください。 輸入Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class ScriptMain 
Inherits UserComponent 

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
    ' Standard VB.net method, indicating whether 
    ' an expression can be evaluated as a number 
    If (IsNumeric(Row.InputCol)) Then 
     Row.IsNumeric = True 
    Else 
     Row.IsNumeric = False 
    End If 
End Sub 

End Class 

5ラッパー)行

をフィルタリングする条件分割を作成しますコラム

1派生

第二ソリューション

)あなたがチェックを行う必要があります派生列を追加します派生列 を追加します。

2)式を追加してください 新しい列を次の式で追加し、適切な名前を付けてください:!ISNULL((DT_I8)TextNumbers)。すべての数字はTrueになり、すべての数字以外はエラーになります。

3)エラーを無視する 派生列の[エラー出力の構成]ウィンドウに移動し、新しいフィールドのエラーを無視します。

4)結果 は、第二の溶液にISNULL発現

3ソリューションデータ変換 と

データ変換

1)の代替を使用して行をフィルタリングする条件分割を追加することができデータ変換変換を使用して値をintに変換しようとするとエラーを無視してください。 ISNULL

関連する問題