Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
こんにちわ。
以下のようなテーブルがあったときに、りんごもしくはぶどうを買ったとき日だけの
合計金額を出したいのですが、どのようにすればよろしいのでしょうか。
※りんごもしくはぶどうだけの合計金額ではなく、他商品を買った場合は、その金額も含めたい。
テーブルイメージ
--------------------------
購入日 購入者 購入品 金額
20160101 a りんご 100
20160101 a みかん 10
20160102 a りんご 100
20160102 a りんご 100
20160103 a みかん 10
20160103 a みかん 10
20160101 b ぶどう 50
20160101 b みかん 10
20160102 b ぶどう 50
20160102 b ぶどう 50
20160103 b みかん 10
20160103 b みかん 10
--------------------------
アウトプットイメージ
--------------------------
購入日 購入者 合計金額
20160101 a 110
20160102 a 200
20160101 b 60
20160102 b 100
--------------------------
■お願いしたいこと
例では「購入品」の種類は全3品、合計する条件の「購入品」は2品ですが、
「購入品」の種類が無数あり、合計する条件の「購入品」も複数であった場合でも対応できるような方法で教えていただきたいです。
よろしくお願いいたします。
wakamatsuさま
ご丁寧に教えて頂き、誠にありがとうございます。
やはりQlikviewがおすすめなんですね。
スクリプトをあまり書きたくないと思い、GUIでjoinが出来るQlikSenseにしましたが、結局スクリプトを書かないと処理できないことが多く、Senseにした意味がなくなってきました、、、
改めてViewに変更することを、検討したいと思います!
さて、スクリプトとチャートを記載して頂きありがとうございます。
テーブル2で「合計金額_日別購入者別」で集計していますが、
「購入品」リストボックスから対象を絞り込みが出来る方法で
テーブル1から直接集計する方法はありますでしょうか。
実際のデータでは、テーブル1は他テーブルと関連付け(joinではなく)しているので、
新しくテーブルを作成するのは控えたいと思っています。
それともテーブル2を作っても、テーブル1をDrop tableしていなければ、問題なかったでしょうか。
初心者なため、ずれた質問をしておりましたら、申し訳ございません。
よろしくお願いいたします。
テーブル1をドロップしなければ大丈夫です。
テーブル1の値を利用してもKawahataさんが記載されているように、SET文やステートを利用すれば可能です。
ただ、それぞれ注意点もありますので以下に記載しておきます。
①テーブルを追加する場合(上記のテーブル2作成の事です)
テーブル1のデータ量が少ない場合は、目に見える程の影響はないですが、ロード処理時間やファイルサイズが増加します。
②SET文を利用する場合
テーブル構成や選択を許可している内容(リストボックスの設置内容)によっては、他の絞込条件の影響を考慮しないといけないケースがあります。
③ステートを利用する場合
データ量、ファイルサイズが小さい場合は、目に見える程の影響はないですが、ファイルオープン時の時間やリストボックスでの選択・クリア時などの処理時間が長くなるケースがあります。これはステートや変数が増えれば増えるほど同じデータ量やファイルサイズでも増加します。特にV12ではV11の時よりも影響が大きくなっています。
初心者という事であれば、データ取込後、何も気にせずに利用できる①の方法が、まずの取り組みとしては良いのではないかと思います。
すいません、回答は少々お待ち下さい。
1つめの質問は並列ステートを使わなくても対応可能です。
また、Qlik Senseでも並列ステートは使えます。
集計用の別テーブルなど作らなくても2つめもできると思いますが、ちょっと時間下さい。
集計用の別テーブルを作ると管理が大変になるのと、
データの粒度が大きくなることがあるので、
Qlik製品の良さがなくなることもあります。
パフォーマンス対策以外で
集計テーブルをスクリプトで安易に作成するのはお奨めできません。
wakamatsuさま kawahataさま
返事ありがとうございます。
>wakamatsuさま
ご丁寧に注意点を教えて頂きありがとうございます。
SET分析の場合、他の絞込条件の影響を考慮しないといけないのは気をつけないといけないですね。
ステートは動作が重くなってしまう傾向があるんですね。
データ量が20GBぐらいあるので、環境によっても違うかもしれませんが、実際作業すると大変そうかもしれないですね、、、
>kawahataさま
回答お待ちしております。
集計テーブルを作成すると、要望としては書いておりませんでしたが、ドリルダウンは出来なくなるのではないかなと思っていました。
それではサンプルよろしくお願いいたします。
Qlik Senseで対応しました。
スクリプトで元データに新たにデータを追加しています。
質問1に関しては、元データとリンクしないデータの軸項目の購入品2を使用しています。
表では全て表示されていますが、購入品2で「ぶどう」と「りんご」を選択することでご要望の結果になります。
質問2に関しては、購入品を軸にするとSET分析で購入日と購入者の条件付けをしても
その購入品のみの結果しか表示されません。(アプリではりんごの軸でぶどうやみかんの結果は集計されない)
よって、購入品2を軸にして購入品の縛りを無くす必要があります。
その上で購入日と購入者を条件付けした集計をするのですが、単純なSET分析では1条件しか指定できないので
GetfieldObjectを使用したIF文を重ねて、各購入品2ごとに式を変更するようにします。
購入品、購入者の各条件はスクリプトで購入品2毎にSET購入者、SET購入日という項目を作成しています。
詳細は数式を参照ください。
必須条件は、数式を記述する際の最後の「)」はrepeat関数を使用して付けることです。
単純に「)」を追加すると上手く動作しませんのでご注意ください。
SET購入者、SET購入日はスクリプトで記載しなくても数式内で上手く記述すれば対応可能だと思います。
時間的な問題でスクリプトで対応しました。
データ量が増えた場合にどこまでパフォーマンスが落ちるかは実データで検証してください
kawahataさま
ご丁寧に教えて頂きありがとうございます。
無事出来ました。
また購入者数も出したいのですが、どのように出せばよろしいでしょうか。
アウトプットイメージ
商品 金額 購入者数
りんご 310 2
ぶどう 160 2
金額:特定の商品を購入された日の金額の合計(特定の商品以外にも購入していたら、その金額も含める)
→りんごの場合、りんごが購入された①aの20160101の合計金額110円 ②aの20160102の合計金額200円
の合計
購入者数:りんごが購入された上記①と②をcountする。
よろしくお願いいたします。
以下の数式を追加すれば大丈夫と思います。
購入日&購入者をCountするようにしてます。
$(=
Concat(DISTINCT 'IF([$(=GetObjectField(0))] = ' & CHR(39) & [$(=GetObjectField(0))] & CHR(39) &
',count({<購入者={'& SET購入者 &'},購入日={'& [SET購入日] &'}>}DISTINCT 購入日&購入者)', ',') &
Repeat(')', Count(DISTINCT [$(=GetObjectField(0))]))
)
kawamataさま
お世話になっております。
作成して頂きありがとうございます。
無事出来ました。
GetObjectFieldは条件設定するときにも使えそうなので、とても勉強になりました。