Skip to main content
Announcements
SYSTEM MAINTENANCE: Thurs., Sept. 19, 1 AM ET, Platform will be unavailable for approx. 60 minutes.
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

適用日を持つデータとの結合の方法について

お世話になっております。

データの取り込み処理で詰まってしまい、お知恵を借りたく質問いたしました。

下図のように日付をもつトランザクションのテーブル(出荷明細テーブル)と、

トランザクションテーブルに対して適用日を持つマスタ(単価適用テーブル)があります。

分析のために、1つのテーブルにしようとロードスクリプトで試行錯誤したのですが、

上手な結合方法がわからず、今に至っています。

適用日と出荷日の関係では、製品の出荷日の直前(出荷日含む)の適用日の単価がその製品の単価となります。

最終的には一番したのテーブルのように結合したいと考えています。

よい結合方法につきまして、ぜひアドバイスお願いいたします。

■単価適用テーブル

製品
適用日
単価
A2012/6/110
A2012/7/115
B

2012/6/15

20
B2012/8/1030

■出荷明細テーブル

製品出荷日

A2012/7/110
A2012/7/2020
B2012/8/110

上記2つの表から、以下のようなデータとして取り扱いたいと考えています。

製品出荷日
単価
A2012/7/11015
A2012/7/202015
B2012/8/11020
Labels (2)
1 Solution

Accepted Solutions
tsuyoshi
Partner - Creator
Partner - Creator

数行追加しました。

単価適用テーブル:
LOAD * INLINE [
A製品,適用日,単価
A,2012/07/01,15
A,2012/06/01,10
B,2012/08/10,30
B,2012/06/15,20];

単価適用開始終了テーブル:
LOAD
A製品 As A1製品,
適用日 As 適用開始日,
if(previous(A製品)=A製品,date(previous(適用日)-1,'YYYY/MM/DD'),date(makedate(2999,12,31),'YYYY/MM/DD')) As 適用終了日,
単価 As 単価2

Resident 単価適用テーブル;

Drop Table 単価適用テーブル;

単価適用テーブル:
LOAD
A1製品 As A製品,
適用開始日,
適用終了日,
単価2 As 単価

Resident 単価適用開始終了テーブル;

Drop Table 単価適用開始終了テーブル;


出荷明細テーブル:
LOAD * INLINE [
B製品,出荷日,数
A,2012/07/01,10
A,2012/07/20,20
B,2012/08/01,10];


left join(出荷明細テーブル)
IntervalMatch( 出荷日,B製品 )
load
適用開始日 As 適用開始日2,
適用終了日 As 適用終了日2,

A製品 As B製品

Resident 単価適用テーブル;

//*** ↓↓ 今回追加

left join(出荷明細テーブル)
load
適用開始日 As 適用開始日2,
適用終了日 As 適用終了日2,

A製品 As B製品,
単価

Resident 単価適用テーブル;

DROP Field 適用開始日2,適用終了日2;
RENAME Field B製品 to 製品;
DROP Table 単価適用テーブル;

View solution in original post

5 Replies
tsuyoshi
Partner - Creator
Partner - Creator

単価適用開始(&終了)テーブルの作り方からの全ソースは下記になります。

//******* START

単価適用テーブル:
LOAD * INLINE [
A製品,適用日,単価
A,2012/07/01,15
A,2012/06/01,10
B,2012/08/10,30
B,2012/06/15,20];

単価適用開始終了テーブル:
LOAD
A製品 As A1製品,
適用日 As 適用開始日,
if(previous(A製品)=A製品,date(previous(適用日)-1,'YYYY/MM/DD'),date(makedate(2999,12,31),'YYYY/MM/DD')) As 適用終了日,
単価 As 単価2

Resident 単価適用テーブル;

Drop Table 単価適用テーブル;

単価適用テーブル:
LOAD
A1製品 As A製品,
適用開始日,
適用終了日,
単価2 As 単価

Resident 単価適用開始終了テーブル;

Drop Table 単価適用開始終了テーブル;


出荷明細テーブル:
LOAD * INLINE [
B製品,出荷日,数
A,2012/07/01,10
A,2012/07/20,20
B,2012/08/01,10];


left join(出荷明細テーブル)
IntervalMatch( 出荷日,B製品 )
load
適用開始日 As 適用開始日2,
適用終了日 As 適用終了日2,

A製品 As B製品

Resident 単価適用テーブル;

Not applicable
Author

tsuyoshi様

返信おそくなりすみません。

詳細なアドバイスありがとうございます。大変助かります。

前段previousにつきましては、リンク先も含め内容を理解しました。

(peek,previousの使い方など参考になります)

また、日中考えていたソースとほぼ同じ内容で安心しました。

--

後段のIntervalMatchについてマニュアルを読んで概要は理解したのですが、

上記サンプルスクリプトの結果から、結合イメージがつきません。

すみません。IntervalMatch使用後のデータソースイメージが沸かず。。。

不明な点は、上記スクリプトを実行した際のテーブルビューアです。

出荷明細テーブルと単価適用テーブルが存在しているのですが、紐つきがないように見えます。

(サンプルスクリプト実行後のテーブルビューアを添付します)

添付はサンプルスクリプト実行時のものですが、出荷明細と単価が紐づいているのでしょうか?

すみませんが、もう少しお付き合いください。

最終的には、私の最初の書き込みの一番下のテーブルを目指しています。

WS000006.JPG

tsuyoshi
Partner - Creator
Partner - Creator

数行追加しました。

単価適用テーブル:
LOAD * INLINE [
A製品,適用日,単価
A,2012/07/01,15
A,2012/06/01,10
B,2012/08/10,30
B,2012/06/15,20];

単価適用開始終了テーブル:
LOAD
A製品 As A1製品,
適用日 As 適用開始日,
if(previous(A製品)=A製品,date(previous(適用日)-1,'YYYY/MM/DD'),date(makedate(2999,12,31),'YYYY/MM/DD')) As 適用終了日,
単価 As 単価2

Resident 単価適用テーブル;

Drop Table 単価適用テーブル;

単価適用テーブル:
LOAD
A1製品 As A製品,
適用開始日,
適用終了日,
単価2 As 単価

Resident 単価適用開始終了テーブル;

Drop Table 単価適用開始終了テーブル;


出荷明細テーブル:
LOAD * INLINE [
B製品,出荷日,数
A,2012/07/01,10
A,2012/07/20,20
B,2012/08/01,10];


left join(出荷明細テーブル)
IntervalMatch( 出荷日,B製品 )
load
適用開始日 As 適用開始日2,
適用終了日 As 適用終了日2,

A製品 As B製品

Resident 単価適用テーブル;

//*** ↓↓ 今回追加

left join(出荷明細テーブル)
load
適用開始日 As 適用開始日2,
適用終了日 As 適用終了日2,

A製品 As B製品,
単価

Resident 単価適用テーブル;

DROP Field 適用開始日2,適用終了日2;
RENAME Field B製品 to 製品;
DROP Table 単価適用テーブル;

Not applicable
Author

tsuyoshi様

お世話になります。

再度ご返信いただきありがとうございます。

結論から申しますと、上記方法で期待する値が取れました!

今朝方追記いただきました、「//*** ↓↓ 今回追加 」で気づきましたが、

昨日時点で単価適用テーブルと出荷明細テーブルの紐付けができていましたね。

私の上記添付でもしっかり適用開始日「2」がありました。。

(適用開始日 As 適用開始日2で2を見落としていました。)

IntervalMatchについてはマニュアルを読んでも、いまいち実行結果がつかめず

上記サンプルは大変参考になりました。

このたびは有難うございました。

tsuyoshi
Partner - Creator
Partner - Creator

どういたしまして。私もintervalmatchが始め分かりませんでした・・・ これって第5キーまで定義できるみたいなので非常に強力ですね