範囲を持つDataSetとの JOINをETLで実現したい
「1件データ」と「日付の範囲を持つDataSet」との JOINを ETLで実現したいです。
ある店の「販売履歴DataSet」は次の通りです。
販売日 |品名 |個数
3月01日|りんご|1個
3月01日|みかん|1個
3月15日|りんご|2個
3月15日|みかん|2個
3月25日|りんご|3個
3月25日|みかん|3個
3月31日|りんご|4個
3月31日|みかん|4個
りんごは通常1個300円ですが、3月11日から20日までは200円に値下げしました。また31日は特売で100円で売りました。
みかんは通常1個250円ですが、月の後半は150円に値下げしました。
この情報を持つ「単価DataSet」は次の通りです。
品名|開始日 | 終了日|単価
りんご|3月01日|3月10日|300円
りんご|3月11日|3月20日|200円
りんご|3月21日|3月30日|300円
りんご|3月31日|3月31日|100円
みかん|3月01日|3月15日|250円
みかん|3月16日|3月31日|150円
売上金額を求めるロジックは
【販売履歴DataSetと「品名が同じ」かつ「販売日が開始日と終了日の間に含まれる」単価DataSetのレコードを JOINして単価と数量を乗算する】
となります。
開始日以降かつ終了日以前のような SQL文での BETWEEN演算子に当たる複数条件フィルタは ETLでは同一DataSetでしか掛けらないようで、また 複数条件での JOINでは範囲指定が出来ないようで いい方法が浮かびません。
ETLでの実現アイデアをご教示頂けると幸いです。
コメント
-
落とし穴はあるかもしれませんが、思いついたので共有しますね!
①品名のみで結合 ※多対多の結合なので行が増幅する
②行をフィルタで以下条件をすべてに一致するを指定
(1)販売履歴Datasetの日付が単価DataSetの開始日以上(列からの値)
(2)販売履歴Datasetの日付が単価DataSetの終了日以下(列からの値)
でも、やっぱりこの手の処理はSQLでやりたいですね。笑
1