Qlik Community

Japan

Announcements
Submit your remarkable customer story for the Global Transformation Awards at QlikWorld Denver 2022. SUBMIT A STORY
cancel
Showing results for 
Search instead for 
Did you mean: 
yuktayukata
Contributor II
Contributor II

全体の中の上位40%の平均値の求め方

QlikViewで下記のような5人分の売上高を示したデータを入力とし、
各月の上位40%の売上平均を数式(チャートオブジェクト)で実現するにはどのような方法があるでしょうか。
スクリプト上でRankを入れる等の対応が必要となるでしょうか。

■input

名前売上
A110
B120
C130
D140
E150
A2100
B290
C280
D270
E260
■作成したいオブジェクト
12
上位 40% 平均45%95%
Labels (1)
1 Solution

Accepted Solutions
kentaroWakamatsu
Creator II
Creator II

計算式だけではなく、変数との併用となってしまいますが、添付しておきます。

集計軸があるので、SET文で単純に軸ごとに集計範囲を変更するという事は、おそらく出来ないと思います。

該当の数式は、ファイル内の「サンプルチャート」に組み込んでいます。

変数は2つで、「Variable1」は、集計対象の割合で、こちらは入力ボックス「変数」で変更すると、集計結果が変わります。(初期値は40%でセットしています)

「Variable2」は、計算式のPick関数内で利用する値のリストを作成しています。

ここが少しややこしいので、右側に変数「Variable2」とサンプルチャートの計算式を段階的に説明したチャートを用意していますので、上から順に計算式の内容を確認して下さい。

View solution in original post

9 Replies
kentaroWakamatsu
Creator II
Creator II

計算式だけではなく、変数との併用となってしまいますが、添付しておきます。

集計軸があるので、SET文で単純に軸ごとに集計範囲を変更するという事は、おそらく出来ないと思います。

該当の数式は、ファイル内の「サンプルチャート」に組み込んでいます。

変数は2つで、「Variable1」は、集計対象の割合で、こちらは入力ボックス「変数」で変更すると、集計結果が変わります。(初期値は40%でセットしています)

「Variable2」は、計算式のPick関数内で利用する値のリストを作成しています。

ここが少しややこしいので、右側に変数「Variable2」とサンプルチャートの計算式を段階的に説明したチャートを用意していますので、上から順に計算式の内容を確認して下さい。

View solution in original post

yuktayukata
Contributor II
Contributor II
Author

若松さん

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

サンプル拝見しました。

複数の項目に対してやレコード数が多い場合にはあまり向かないようですね。

別の方法も検討してみます。

変数の使い方など、とても勉強になりました。また何かあればよろしくお願いいたします。

kentaroWakamatsu
Creator II
Creator II

はい、おっしゃるとおり、Concat関数の表示文字数の限界(限界は不明)を超えると、ダメですね。

スクリプト側でフラグをたてるのが、一番シンプルでわかりやすいかもしれません。

いい方法があれば、共有してください。

hka
Employee
Employee

上位20%平均の1月45%、2月95%になる算出方法を教えて頂けますか。

月に売り上げた人数の上位20%ということで1月なら5人の20%でトップ1人の売上50で

その人の全体位の売上に対する割合ということでしょうか。

Eの場合50/110=45.5%

ということで合ってますでしょうか。

yuktayukata
Contributor II
Contributor II
Author

はい。投稿した後に誤りがあることに気付きましたが、そのままにしておりました。

誤解させてしまい申し訳ございません。

単純に上位の平均を知りたいだけですので、今回のサンプルでは上位40%としての数字となるので、改めて修正させていただきました。

hka
Employee
Employee

スクリプトで月毎の上位40%の値を算出する必要はありますが、添付のような形で実現できました。

数式内の条件が可変になるのはできないので、スクリプトで固定値を算出しています。

yuktayukata
Contributor II
Contributor II
Author

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

このような使い方ができることは考えていませんでしたのでとても勉強になりました。

複数項目に対しても使えそうですし、こちらの内容で試してみたいと思います。

kentaroWakamatsu
Creator II
Creator II

Concat関数の限界が気になったので1~1億までの1億通りのデータを用意して調べてみましたが、さすがに1億通りはConcat関数で表示出来ません(カンマも含めた文字数は9億弱)が、この計算結果に対してSubField関数で1億個目の値を取得すると、きちんと1億が返ってきたので、Concat関数でセル内に表示出来なくても、計算式は有効なようです。

QVの保障している同一項目に対してのデータの種類(または個数?)の限界は明確に記されていたと思う(20億強くらいだったような?)ので、このあたりまではひょとしたら大丈夫かもしれませんが、実際はサーバーのメモリ次第といったところだと思います。


ただ計算式が有効でも、IFも使っているので実運用では非常に計算時間がかかると思いますので、私もスクリプト内でデータを用意する方が良いと思います。

yuktayukata
Contributor II
Contributor II
Author

億単位データのご用意や検証まで実施いただきありがとうございます。

サーバのメモリにあまり余裕はありませんので、スクリプトで試してみます。

どうもありがとうございました