Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
KenK
Contributor II
Contributor II

リピータと新規を判断する方法

購入DBを読み込んだときに、

新規会員の購入なのか、リピータ会員の購入なのか、判断したいと考えています。

 

日付, 会員ID , 商品ID

2019/7/8 10:02, 100, A

2019/7/8 18:23, 101, B

2019/7/8 23:50, 102, B

2019/7/9 12:30, 100, B

2019/7/9 16:20, 103, A

 

購入会員はユニークで3名

新規が3名、リピータが1名

となります。

 

取得したデータのうち、一番若い日付を新規として扱い、

それ以外の日付はリピータとして扱いたいと思っています。

ロードスクリプト内で処理する方法はありますでしょうか?

 

このようなデータだったら良いのですが。。

 

日付, 会員ID , 商品ID, 新規・リピータ

2019/7/8 10:02, 100, A, 新規

2019/7/8 18:23, 101, B, 新規

2019/7/8 23:50, 102, B, 新規

2019/7/9 12:30, 100, B, リピータ

2019/7/9 16:20, 103, A, 新規

2 Solutions

Accepted Solutions
hka
Employee
Employee

下記スクリプトで対応可能です。


Temp:
Load * Inline [
日付, 会員ID , 商品ID
2019/7/8 10:02, 100, A
2019/7/8 18:23, 101, B
2019/7/8 23:50, 102, B
2019/7/9 12:30, 100, B
2019/7/9 16:20, 103, A];

Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;

Drop table Temp;

View solution in original post

hka
Employee
Employee

リピート時に複数の商品を購入した場合の動作が上手くいかないので修正しました。

こちらでFIXになります。

Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID) and (日付 <> Peek(日付) or Peek(リピート)='リピート'),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;

View solution in original post

6 Replies
hka
Employee
Employee

下記スクリプトで対応可能です。


Temp:
Load * Inline [
日付, 会員ID , 商品ID
2019/7/8 10:02, 100, A
2019/7/8 18:23, 101, B
2019/7/8 23:50, 102, B
2019/7/9 12:30, 100, B
2019/7/9 16:20, 103, A];

Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;

Drop table Temp;

KenK
Contributor II
Contributor II
Author

ありがとうございます。まさに希望通りです!
感謝致します。
KenK
Contributor II
Contributor II
Author

応用編になってしまいますが、

以下のように7/9 16:20にユーザー103が、商品AとBを同時購入していたとします(ショッピングカードなどを想定)

日付, 会員ID , 商品ID
2019/7/8 10:02, 100, A
2019/7/8 18:23, 101, B
2019/7/8 23:50, 102, B
2019/7/9 12:30, 100, B
2019/7/9 16:20, 103, A
2019/7/9 16:20, 103, B
2019/7/10 12:00, 103,C

上記の方法だと、このような結果になります。(同一日時に103に購入されたBがリピート扱い)

日付, 会員ID , 商品ID , リピート
2019/7/8 10:02, 100, A, 新規
2019/7/8 18:23, 101, B, 新規
2019/7/8 23:50, 102, B, 新規
2019/7/9 12:30, 100, B, リピート
2019/7/9 16:20, 103, A, 新規
2019/7/9 16:20, 103, B, リピート
2019/7/10 12:00, 103,C, リピート

 

同一日時は同じ扱いにすることは可能でしょうか?

Group by など試行錯誤してみたのですが、うまく行きませんでした。

 

日付, 会員ID , 商品ID , リピート
2019/7/8 10:02, 100, A, 新規
2019/7/8 18:23, 101, B, 新規
2019/7/8 23:50, 102, B, 新規
2019/7/9 12:30, 100, B, リピート
2019/7/9 16:20, 103, A, 新規
2019/7/9 16:20, 103, B, 新規   ※同一日時のため、新規として扱いたい。
2019/7/10 12:00, 103,C, リピート

hka
Employee
Employee

こちらで対応可能です。

判断部分のみの記述にしました。

会員IDが同じで日付が違う場合にリピートとしています。

Data:
Load
 日付,
 会員ID ,
 商品ID,
 if(会員ID=Peek(会員ID) and 日付 <> Peek(日付),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;

hka
Employee
Employee

リピート時に複数の商品を購入した場合の動作が上手くいかないので修正しました。

こちらでFIXになります。

Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID) and (日付 <> Peek(日付) or Peek(リピート)='リピート'),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;

KenK
Contributor II
Contributor II
Author

理想通りのアウトプットになりました。無事に解決です。
何から何までありがとうございました。