Qlik Community

Qlik Japan

Qlik Communityの日本語のグループです。 Qlik製品に関する日本語資料のダウンロードや質問を日本語で投稿することができます。質問に関する回答は基本的に日本語で行われます。 日本語資料はグループにJoinしなくてもダウンロード可能ですが、 質問を投稿したい場合は、CommunityへのログインをしてグループにJoin Requestを行って下さい。 承認を受けた後に質問を投稿することが可能になります。 ログインはQlikIDを登録してください。

Highlighted
KenK
New Contributor

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

購入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, 新規

Tags (1)
2 Solutions

Accepted Solutions
Employee
Employee

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

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


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;

Employee
Employee

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

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

こちらでFIXになります。

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

6 Replies
Employee
Employee

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

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


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
New Contributor

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

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

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

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

以下のように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, リピート

Employee
Employee

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

こちらで対応可能です。

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

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

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

Employee
Employee

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

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

こちらでFIXになります。

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

KenK
New Contributor

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

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