Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
kenjiokamoto
Contributor II
Contributor II

ある商品を買った人のみの売上集計

こんにちわ。

以下のようなテーブルがあったときに、りんごもしくはぶどうを買ったとき日だけの

合計金額を出したいのですが、どのようにすればよろしいのでしょうか。

※りんごもしくはぶどうだけの合計金額ではなく、他商品を買った場合は、その金額も含めたい。

テーブルイメージ

--------------------------

購入日 購入者 購入品 金額

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品ですが、

「購入品」の種類が無数あり、合計する条件の「購入品」も複数であった場合でも対応できるような方法で教えていただきたいです。

よろしくお願いいたします。

Labels (2)
1 Solution

Accepted Solutions
hka
Employee
Employee

Qlik Senseで対応しました。

スクリプトで元データに新たにデータを追加しています。

質問1に関しては、元データとリンクしないデータの軸項目の購入品2を使用しています。

表では全て表示されていますが、購入品2で「ぶどう」と「りんご」を選択することでご要望の結果になります。

質問2に関しては、購入品を軸にするとSET分析で購入日と購入者の条件付けをしても

その購入品のみの結果しか表示されません。(アプリではりんごの軸でぶどうやみかんの結果は集計されない)

よって、購入品2を軸にして購入品の縛りを無くす必要があります。

その上で購入日と購入者を条件付けした集計をするのですが、単純なSET分析では1条件しか指定できないので

GetfieldObjectを使用したIF文を重ねて、各購入品2ごとに式を変更するようにします。

購入品、購入者の各条件はスクリプトで購入品2毎にSET購入者、SET購入日という項目を作成しています。

詳細は数式を参照ください。

必須条件は、数式を記述する際の最後の「)」はrepeat関数を使用して付けることです。

単純に「)」を追加すると上手く動作しませんのでご注意ください。

SET購入者、SET購入日はスクリプトで記載しなくても数式内で上手く記述すれば対応可能だと思います。

時間的な問題でスクリプトで対応しました。

データ量が増えた場合にどこまでパフォーマンスが落ちるかは実データで検証してください

View solution in original post

17 Replies
kentaroWakamatsu
Creator II
Creator II

方法はいろいろありますが、2種類ほど記載しておきます。

添付ファイルと合わせて確認して下さい。

事前準備として:購入日と購入者をつないだキー情報を作成します。

添付ファイルの「キー_購入日_購入者」がこれに該当します。

方法1:SET数式を利用する方法

 

      ・SET数式内に ' 購入品 ' を除外する記述を記載

 

 

 

      ・SET数式内に ' キー_購入日_購入者 '  へ 現在の絞込値をセットする記述を行なう

方法2: 購入日&購入者別で集計した別テーブル(ファイル内のテーブル2)を用意して

      集計値を単純にSUMで合計する

kenjiokamoto
Contributor II
Contributor II
Author

さっそくありがとうございます。

確認不足でしたら、申し訳ないのですが、「キー_購入日_購入者」で日別に合計していただいていますが、

そのなかで、「りんごもしくはぶどう」を購入していない日を除外したいです。

そのため、下記のキーは集計結果には出てこないようにしたいです。

20160101_b

20160103_a

20160103_b

よろしくお願いいたします。

kentaroWakamatsu
Creator II
Creator II

リストボックスで、りんごとぶどうを選択すると、これらの商品のみを購入した日「キー_購入日_購入者」だけが集計対象となり、アウトプットイメージと同じ計算結果が表示されます。

kentaroWakamatsu
Creator II
Creator II

最初に記載されていたアウトプットイメージととは別で、

20160101 a 110

20160102 a 200

20160102 b 100

ということでしょうか?

hka
Employee
Employee

固定的に指定する場合は、アプリの1数式目「固定指定」のようにSE分析で対応できます。

SET分析の中身は、購入品が「りんご」か「ぶどう」売上がある購入日を検索します。

 sum({<購入日={"=sum({<購入品={'りんご','ぶどう'}>}金額)>0"}>}金額)

任意の購入品で検索を掛けたい場合、通常のリストボックスでの対応でなく

アプリの2数式目「並列ステート指定」のようにSET分析と並列ステートを使用することで対応できます。

ドキュメントプロパティで並列ステート「G1」を追加し、並列ステートG1の購入品のリストボックスを作成します。

SET分析の中身は、購入品がG1:購入品リストボックスで選択された品物の売上がある購入日を検索します。

 sum({<購入日={"=sum({<購入品=G1::購入品>}金額)>0"}>}金額)

設定はサンプルを参照してください。

kenjiokamoto
Contributor II
Contributor II
Author

wakahataさま、kawahataさま

ありがとうございます。

アウトプットイメージが変わって、下記のように集計したい場合はどうすればよろしいでしょうか。

商品 金額 購入者数

りんご 310 2

ぶどう 160 2

金額:特定の商品を購入された日の金額の合計(特定の商品以外にも購入していたら、その金額も含める)

   →りんごの場合、りんごが購入された①aの20160101の合計金額110円 ②aの20160102の合計金額200円

    の合計

購入者数:りんごが購入された上記①と②をcountする。

また並列ステートはQlik Senseでは出来ないと思いますが、Qlik Senseで同内容を行う場合は、行いたいと思っています。

もし可能でしたら、Qliksenseでサンプルを作って頂けると幸いです。

よろしくお願いいたします。

kentaroWakamatsu
Creator II
Creator II

最初に添付したファイルに、「方法3」でチャートを追加しています。

「購入品」のリストボックスで、ぶどうとりんごを選択して利用して下さい。

テーブル構成は変更無く、金額は、「方法2」で利用するために別途作成したテーブル2の値を利用しています。

購入者数は、記載のあったアウトプットイメージにあわせると「購入者1」の方かと思いますが、同一の購入者は1名として計算するのであれば「購入者2」の方を利用して下さい。

kenjiokamoto
Contributor II
Contributor II
Author

wakamatsuさま

返事が遅くなり申し訳ございません。

私のやり方が良くないと思うのですが、Qlikviewで開くと、作成して頂いたチャートがエラーになって表示されません。

プロパティで計算式を拝見し、再現しようとしているのですが、出来ておりません。

申し訳ないのですが、Qliksenseで同様のサンプルを作成して頂くことは出来ませんでしょうか。

よろしくお願いいたします。

kentaroWakamatsu
Creator II
Creator II

すみません。

Qliksenseは利用していないです。

一度利用を検討しましたが、レポートやトリガーなどQlikviewと比較すると全体的に軟弱なイメージを感じたので、やめました。

個人的感想でいうと、Qlikviewを使いたおしていく方が、できる事も多そうなのでおすすめです。

VBSも併用すると、正直なんでも出来る(少し言いすぎですが)といった感覚を持っています。

エラーがかかるということでしたので、QlikViewのスクリプトとチャートの仕様を記載しておきます。

スクリプト部分をコピペしてロード後、チャートを作成してみて下さい。

【スクリプト】::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Temp:
LOAD * INLINE [
    データ
    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
];

テーブル1:
LOAD SubField(データ,chr(32),1) as 購入日,
     SubField(データ,chr(32),1)&'_'&SubField(データ,chr(32),2) as キー_購入日_購入者,
     SubField(データ,chr(32),2) as 購入者,
     SubField(データ,chr(32),3) as 購入品,
     SubField(データ,chr(32),4) as 金額,
     RecNo() as 行数
Resident Temp;
DROP Table Temp;

テーブル2:
LOAD キー_購入日_購入者,
     SUM(金額) as 合計金額_日別購入者別
Resident テーブル1
Group By キー_購入日_購入者;

【チャート】::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

(軸)購入品

(数式①) ラベル:金額

       定義=SUM(合計金額_日別購入者別)

(数式②) ラベル:購入者数1

       定義=COUNT(DISTINCT キー_購入日_購入者)

(数式③) ラベル:購入者数2

       定義=COUNT(DISTINCT 購入者)

購入者1と2の違いは、前回のコメントを確認して下さい。

「購入品」リストボックスを作成し、対象を絞り込んで利用して下さい。