1

SSIS 派生列に入力できるようにする必要がある式があります...その下にあります..

if MONTH(Sls.SlsDt) + DAY(Sls.SlsDt) > MONTH(TODAY) + DAY(TODAY) then
    dYdtYr = 0.
  else
    dYdtYr = YEAR(Sls.SlsDt).

上記のビジネス ロジックを SQL SSIS ETL 派生列変換にどのように配置しますか?

派生列はこれを達成するための正しいオプションですか?

ETL パッケージは、CSV から SQL ステージング テーブルへのインポートです。このインポート中に、上記のロジックが実装された新しい列を出力する (または既存のものを置き換える) 必要があります。

入力行には、MONTH 列と DAY 列、および dYdtYr 列が含まれています。ある意味では、上記のロジックに基づいて、dYdtYr 値を新しい値でオーバーライドする必要があります。

4

2 に答える 2

2

置換列として設定された派生列は、dYtdYr を置換します。以下を式に入れます。

(MONTH(Sls.SlsDt) * 100 + DAY(Sls.SlsDT) > MONTH(getdate())*100 + DAY(getdate())) ? 0 : YEAR(Sls.SlsDt)

これは、月の値 (3 月の場合は 03) を 100 倍して 300 を取得し、それを日の値 (今日の場合は 04) に加算して、0304 のような値を生成します。この値はその数値よりも小さくなり、今日以降のどの日も大きくなります。これは年を考慮していないことに注意してください。これは、3 年前の 12 月 31 日は dYtdYr で 0 を取得しますが、3 年前の 3 月 3 日 (今日) は SlsDt の年を取得することを意味します。これがあなたの望む結果である場合、YTD の前年比を作成しようとしていると思います。

于 2013-03-04T20:26:17.737 に答える
0

使用TSQLできる場合は、CASEステートメントを使用できます

CASE 
 WHEN MONTH(Sls.SlsDt) + DAY(Sls.SlsDt) > MONTH(getDate()) + DAY(getDate()) 
 THEN dYdtYr = 0
ELSE
 dYdtYr = YEAR(Sls.SlsDt)
END AS ColumnName
于 2013-03-04T20:05:32.100 に答える