Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
1_1
Partner - Contributor
Partner - Contributor

過去5年間の間に同項目内で同じ値がある場合、その最新の値にflgを立てたい

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

Qlik Senseの知識が乏しいため、皆様のお力添えいただけますと有難いです。

 

年月

A

flg

202303

1

1

202102

2

1

201901

1

 

201812

4

 

201711

2

 

 

上記の様なテーブルがある場合、項目[年月]の各値から過去5年間遡り、その間で項目[A]で同じ値の最新箇所

(上記テーブルでは項目[年月]=202303、項目[A]=1と項目[年月]=202102、項目[A]=2)

にflgを建てたいのですが、何か方法はありませんでしょうか?

 

データの取込はエクセルファイルからの取得を想定しております。

 

何卒宜しくお願い致します。

 

2 Solutions

Accepted Solutions
hka
Employee
Employee

添付のQVFファイルを参照ください。

A、年をOrder byでソートして1つ前のレコードとの差分を取り

5以下の場合に1を立てるようにしています。

サンプルデータも添付します。

View solution in original post

hka
Employee
Employee

年月の場合、年またぎなども考慮しないといけないので計算式が異なります。

年月を日付型にしていないのであれば下記で対応可能です。

 if(if(A = Peek('A'),(Left(年月,4)*12 + Right(年月,2)) - (Left(peek('年月'),4)*12 + Right(Peek('年月'),2))) <=6 ,1,0) as Flag

日付型にしている場合は以下の通りです。

 if(if(A = Peek('A'),(Year(年月)*12 + Month(年月)) - (Year(peek('年月'))*12 + Month(Peek('年月')))) <=6 ,1,0) as Flag

サンプルのQVFは日付型に変換しているので2番目の数式の方が良いです。

また6カ月ではなく180日で良いのであれば、年月を日付型にしている場合

差分は下記のようにすれば対応できます。

 if(if(A = Peek('A'),年月 - Peek('年月'))<=180,1,0) as Flag

View solution in original post

4 Replies
hka
Employee
Employee

添付のQVFファイルを参照ください。

A、年をOrder byでソートして1つ前のレコードとの差分を取り

5以下の場合に1を立てるようにしています。

サンプルデータも添付します。

1_1
Partner - Contributor
Partner - Contributor
Author

ありがとうございます。

希望通りのデータが作成できました!

大変助かりました。

 

後学のためにご教示いただきたいのですが、仮に各年月の値から年間単位で遡るのではなく、6ヵ月間など月単位で遡る場合は、どのようにロードスクリプトを記載すればよろしいでしょうか?

if(if(A = Peek('A'),年月 - Peek('年月'))<=6,1,0) as Flag

ご教示いただきましたスクリプトのフラグに使用している年を年月に置き換えましたが、上手く作動いたしませんでした。

 

何卒宜しくお願い致します。

hka
Employee
Employee

年月の場合、年またぎなども考慮しないといけないので計算式が異なります。

年月を日付型にしていないのであれば下記で対応可能です。

 if(if(A = Peek('A'),(Left(年月,4)*12 + Right(年月,2)) - (Left(peek('年月'),4)*12 + Right(Peek('年月'),2))) <=6 ,1,0) as Flag

日付型にしている場合は以下の通りです。

 if(if(A = Peek('A'),(Year(年月)*12 + Month(年月)) - (Year(peek('年月'))*12 + Month(Peek('年月')))) <=6 ,1,0) as Flag

サンプルのQVFは日付型に変換しているので2番目の数式の方が良いです。

また6カ月ではなく180日で良いのであれば、年月を日付型にしている場合

差分は下記のようにすれば対応できます。

 if(if(A = Peek('A'),年月 - Peek('年月'))<=180,1,0) as Flag

1_1
Partner - Contributor
Partner - Contributor
Author

詳細にご説明頂きありがとうございます。
大変勉強になりました。

 

peek関数の使い方も把握できましたので、今後の開発に活かしていきたいと思います。

ありがとうございました。