Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
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: 
haji
Contributor
Contributor

QlikSense 数値レンジ毎にランク項目を作成する 方法

初歩的な質問なのかもしれず、大変恐縮ですが、ご教示ください。

顧客のID,購買金額、購買日付…といった項目で構成されるデータセットの中で、
本来参照元データには存在していませんが、
 ・月、500万円以上の購買している顧客をランク7
 ・月、100万以上、500万未満の購買をしている顧客をランク6
 …
といったように顧客を月次購買金額ごとにランク付けをする項目をQlikSense内で新規作成する際、
どのような手順でデータセットに項目追加を行えばいいでしょうか。

SQLライクにいえばCASE式分岐で表示項目を作成するイメージなのですが、
勝手がわからず…なにかリファレンスがあればそちらのリンクをご教示いただけますと幸いです。


最終的には シート内に購買日付(月次)のフィルタを作成し
選択した月の前月→選択した月で 作成したランクの分布がどう変動したか…といったイメージの
チャートが作れないか検討しています。

2 Solutions

Accepted Solutions
ShoNakajima
Employee
Employee

ロードスクリプトではなくチャート上の計算軸で対応しています。

AGGR関数にてソースデータの顧客ID・年月・sum(購買金額)で途中集計テーブルをチャート上で作成し、if文でランク分けをすることで1つ目の軸としています。

それらに対して2つ目の軸で年月を、メジャーにCount(distinct 顧客ID)を指定することで、月ごとの購買金額に応じた顧客ランクを表現しています。(棒チャート、折れ線チャート、ピボットテーブル、ストレートテーブルは何れも同様の軸メジャー定義です。)

年月をシート上でフィルタ選択することなく一連の推移が見れますし、左の年月フィルタ選択による絞り込みも機能するかと思います。

View solution in original post

ShoNakajima
Employee
Employee

「顧客ID別ランク上下」のシートを確認ください。

取り急ぎ、ロードスクリプト側の集計処理にて、顧客IDにつき購買が無い月は無視して前回購買月のランクと比較しアップ、ダウン、維持、新規とフラグを立てています。

※チャート側でのIF+AGGRの多用は、柔軟性が高いというメリットがある一方、ネストしすぎるとパフォーマンス低下と処理の可読性低下の懸念が生じます。顧客別に前回購買の状況と比較してフラグを付ける処理をロードスクリプト側に吸収させました。

 

また、もし購買が無い月に前月の金額を埋めるなどの処理が必要な場合、もう少し複雑な処理を考える必要が出てくるかと思います。

View solution in original post

6 Replies
ShoNakajima
Employee
Employee

ロードスクリプトではなくチャート上の計算軸で対応しています。

AGGR関数にてソースデータの顧客ID・年月・sum(購買金額)で途中集計テーブルをチャート上で作成し、if文でランク分けをすることで1つ目の軸としています。

それらに対して2つ目の軸で年月を、メジャーにCount(distinct 顧客ID)を指定することで、月ごとの購買金額に応じた顧客ランクを表現しています。(棒チャート、折れ線チャート、ピボットテーブル、ストレートテーブルは何れも同様の軸メジャー定義です。)

年月をシート上でフィルタ選択することなく一連の推移が見れますし、左の年月フィルタ選択による絞り込みも機能するかと思います。

haji
Contributor
Contributor
Author

ShoNakajima 様

回答ありがとうございました。
内容拝見して、ランク分けをすることは実際のデータでも同様にランキングすることができました。

最終的には シート内に購買日付(月次)のフィルタを作成し
>選択した月の前月→選択した月で 作成したランクの分布がどう変動したか…といったイメージの…

についても併せてご回答いただき、ありがとうございました。

こちらの説明不足で恐縮ですが、
詳細のイメージとしては

顧客、月毎のランクを顧客毎につけ、 それを選択した年月の前月のランクと比較して、
アップした顧客の数、そのままの顧客の数、ダウンした顧客の数…といった
顧客軸のランクアップダウンの推移を考えています。

若干Subjectと趣旨は変わってしまいますが、添付のような式を組んで表現しようかなと考えております。
[前月]の表現の仕方として添付の内容だとエラーは出ないのですが、うまく
値が出てないような気がしており、前月の出し方を追加でご教示いただけますでしょうか。

ShoNakajima
Employee
Employee

ありがとうございます。ちなみに、純粋にひと月の売上のみを考慮し、あるユーザについて購買が無い月は必然的にランク1(最低ランク)にダウンということでしょうか?(購買が無い月はトランザクションレコードが存在しないため、なにがしかの例外処理や中間集計をする必要がある気がしています。)

ShoNakajima
Employee
Employee

「顧客ID別ランク上下」のシートを確認ください。

取り急ぎ、ロードスクリプト側の集計処理にて、顧客IDにつき購買が無い月は無視して前回購買月のランクと比較しアップ、ダウン、維持、新規とフラグを立てています。

※チャート側でのIF+AGGRの多用は、柔軟性が高いというメリットがある一方、ネストしすぎるとパフォーマンス低下と処理の可読性低下の懸念が生じます。顧客別に前回購買の状況と比較してフラグを付ける処理をロードスクリプト側に吸収させました。

 

また、もし購買が無い月に前月の金額を埋めるなどの処理が必要な場合、もう少し複雑な処理を考える必要が出てくるかと思います。

haji
Contributor
Contributor
Author

ShoNakajima様

回答ありがとうございます。

現在試用期間なので、そこまで深くは考えておりませんでしたが、
、純粋にひと月の売上のみを考慮し、あるユーザについて購買が無い月は必然的にランク1(最低ランク)にダウンということでしょうか?

は仮に本格実装する場合の想定は
【購買がない月は必然的にランク1】の想定にしようかと思っておりました。
としますと、

(購買が無い月はトランザクションレコードが存在しないため、なにがしかの例外処理や中間集計をする必要がある気がしています。)

の通り、エラーキャッチをするのか、
月次で該当顧客がトランザクションレコードをもっていない場合、
顧客・月次・0円購買のレコードを作成しないと、ランクアップ~ダウンが正しくとれない気がします。

シート、拝見します。引き続きお付き合いいただき、ありがとうございます。

取り急ぎお礼まで。

haji
Contributor
Contributor
Author

ShoNakajima様

ご回答ありがとうございます。
添付に記載いただいたデータロードエディタを参考に、弊社データ項目にあてはめ、
実装が無事できました。

いったん当QAとしてはクローズさせてください。