Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

set分析における軸項目の値の利用

ver.:QlikView 11

count( {< 項目A = 軸項目 >} 集計対象 )

とした場合には、特定の軸の「値」ではなく、軸項目全体 と 項目A全体で

一致する要素で絞り込まれると認識していますが、

count( {< 項目A = 軸の「値」 >} 集計対象 )

のように項目Aの値が、軸項目の特定の「値」と一致する条件で、

情報を絞り込みたいと考えていますが、これは不可能でしょうか?

下記のような3つのテーブルが存在し、

「月」を軸にして、顧客状態別の販売数を集計したいと考えています。

▼販売テーブル

  販売月 ★

  顧客ID

▼状態テーブル ※ 月ごとに顧客の状態が変化

  状態月 ★

  顧客ID

  状態

▼顧客テーブル

  顧客ID

  顧客名

  ★ 上記「売上月」「状態月」を同名に(キーに)すると

     ループが発生するため、名称は分けています。

このときに「売上月」を軸とし、

count ( {< 属性月 = 売上月の「値」 > 顧客ID }  )

のようにすれば、実現したいと考えています。

また、上記方法でなくても、ロードスクリプト上で、

販売テーブルに対して、月と顧客IDが一致する条件にて、状態を

マージするような方法があれば実現できそうではありますが、

わからなくて困っていますので、お知恵をお借りできれば幸いです。

以上、よろしくお願い致します。

1 Solution

Accepted Solutions
hka
Employee
Employee

理解できました。

軸に状態月、状態の2項目を設定し、

数式は count(if(状態月=販売月, 顧客ID))にすることでいけると思います。

View solution in original post

11 Replies
hka
Employee
Employee

match関数を使用するのはどうでしょうか?

数式は cout(if(match(属性月,売上月)>0,顧客ID))  です。

サンプルデータがあれば検証できるのですが、ありますでしょうか。

Not applicable
Author

早速ありがとうございます!

申し訳ありません。サンプルデータがなく、提示した情報が足りなかったようです。

※ なお、ご提示いただいたmatchを利用する方法だと、莫大な数量になってしまいました。。

▼販売テーブル例 ※発生ベースであり、各月のレコード数はバラバラ。

2014-11 c00001

2014-11 c00003

2014-11 c00005

2014-12 c00003

2015-01 c00003

▼状態テーブル例 ※全月x全顧客のリスト

2014-11 c00001 D

2014-11 c00002 B

2014-11 c00003 D

2014-11 c00004 E

2014-11 c00005 D

2014-12 c00001 C

2014-12 c00002 B

2014-12 c00003 D

2014-12 c00004 E

2014-12 c00005 D

2015-01 c00001 B

2015-01 c00002 A

2015-01 c00003 D

2015-01 c00004 E

2015-01 c00005 D


▼顧客テーブル例

C00001 ○×商店

C00002 株式会社

C00003 ■■株式会社

C00004 やまだたろう

C00005 やまだはなこ



Not applicable
Author

すみません。補足です。

積み上げグラフを利用し、

数式としては下記のようにすることで、状態別の売上推移を表示したいと考えております。

count( {<状態={'A'},状態月 = 販売月の「値」>},顧客ID))

count( {<状態={'B'},状態月 = 販売月の「値」>},顧客ID))

count( {<状態={'C'},状態月 = 販売月の「値」>},顧客ID))

count( {<状態={'D'},状態月 = 販売月の「値」>},顧客ID))

count( {<状態={'E'},状態月 = 販売月の「値」>},顧客ID))

hka
Employee
Employee

出力したい結果を教えてください。

売上月に対してどのような件数が出ればよいのでしょう?

Not applicable
Author

わかりにくくてすみません。

※ なお、これまでの質問で表記揺れがございました。

     属性月=状態月

     販売月=売上月

    とお考えいただければ。


出力イメージとしては、状態別の販売数推移グラフであり、下記のようなイメージです。

sample.png

hka
Employee
Employee

理解できました。

軸に状態月、状態の2項目を設定し、

数式は count(if(状態月=販売月, 顧客ID))にすることでいけると思います。

Not applicable
Author

ありがとうございます!

こちらで想定のことが実現できそうなことを確認しました。

ただ、実データ構成で処理した場合に、 count(if(状態月=販売月, 顧客ID)) で出した値が、

実際の約50~800倍ほどの数値になってしまうことがあり、

テーブルボックスにて全ての項目をひとつに絞り込んでも変わらず巨大な数値がでてしまう状況です。

本件についてテストデータでは正常に動作してそうなので、

恐らくこちらの不備があるとおもいますので、実データの調査をすすめていますが、

count(if( )) の構文にて、こういった状況が発生するケースをご存じであれば

教えいただけますと幸いです。

まずはお礼まで。あらためてありがとうございました。

hka
Employee
Employee

属性月、顧客ID、属性の組合せがダブっていたりすると正しい値が出ない可能性があります。

また、同じ顧客ID、属性データが販売データの方に複数含まれている場合も正しく出ない可能性があります。

DISTINCTを使用してみても数値はおかしいでしょうか?

Not applicable
Author

ありがとうございます。

試してみましたが、下記のようにすると、正しいボリュームになりそうでした。

count(distinct(if(状態月=販売数,顧客ID))

まだ調査がきっちりとは進んでいませんが、販売テーブルにて、顧客IDが存在しないものがあり(会員登録されていない場合はnull)、それが影響しているような気がします。

また報告させていただきます。