Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
kenjiokamoto
Contributor II
Contributor II

累積合計での判別

こんにちわ

累積合計での判別についてお伺いさせて下さい。

下記のようなテーブルがあります。

※テーブルは、key→Dateの昇順で並んでいる前提。

IDDateVolume
12018/1/11
12018/1/21
12018/1/31
12018/1/41
12018/1/51
22018/1/11
22018/1/21
22018/1/31
22018/1/41
22018/1/51

ロードスクリプト上で下記のような条件でVolumeを置き換えたいです。

条件:ID別でVolumeの累積合計が5になったときVolumeは0とする。

IDDateVolume累積合計Volume_New
12018/1/1111
12018/1/2121
12018/1/3131
12018/1/4141
12018/1/5150
22018/1/1111
22018/1/2121
22018/1/3131
22018/1/4141
22018/1/5150

上記を行うためのロードスクリプトを教えて頂けますでしょうか。

※QlikSenseでの作成をお願い致します。

※QlikSenseでの作成が難しい場合は、ロードスクリプトをそのまま教えて頂けますでしょうか。

どうぞよろしくお願いいたします。

Labels (4)
1 Solution

Accepted Solutions
kentaroWakamatsu
Creator II
Creator II

QlikSenseで使えるかわからないですが、QlikViewで記述する場合は下記のようになります。

Peek関数やPrevious関数がSenseにもあれば、同じような記述が出来ると思います。

6日以降、累計合計が1に戻るのかと思い、これを想定した記述ですので、違う場合は6日以降のデータがどのようになるのかご返信下さい。

(スクリプト)

TEMP:
LOAD * INLINE [
    ID, Date, Volume
    1, 2018/01/01, 1
    1, 2018/01/02, 1
    1, 2018/01/03, 1
    1, 2018/01/04, 1
    1, 2018/01/05, 1
    1, 2018/01/06, 1
    1, 2018/01/07, 1
    1, 2018/01/08, 1
    1, 2018/01/09, 1
    2, 2018/01/01, 1
    2, 2018/01/02, 1
    2, 2018/01/03, 1
    2, 2018/01/04, 1
    2, 2018/01/05, 1
    2, 2018/01/06, 1
    2, 2018/01/07, 1
    2, 2018/01/08, 1
    2, 2018/01/09, 1
];

TABLE:
LOAD ID,
    Date,
    Volume,
    IF(ID=Previous(ID),IF(Peek(累積合計)=5,Volume,Peek(累積合計)+Volume)
          ,Volume) as 累積合計,
    IF(ID=Previous(ID),IF(Peek(累積合計)+Volume=5,Num(0),Volume)
          ,Volume) as Volume_New
Resident TEMP
Order By ID,Date;
DROP Table TEMP;


(作成後のデータ)

IDDateVolume累積合計Volume_New
12018/01/01111
12018/01/02121
12018/01/03131
12018/01/04141
12018/01/05150
12018/01/06111
12018/01/07121
12018/01/08131
12018/01/09141
22018/01/01111
22018/01/02121
22018/01/03131
22018/01/04141
22018/01/05150
22018/01/06111
22018/01/07121
22018/01/08131
22018/01/09141

View solution in original post

4 Replies
kentaroWakamatsu
Creator II
Creator II

QlikSenseで使えるかわからないですが、QlikViewで記述する場合は下記のようになります。

Peek関数やPrevious関数がSenseにもあれば、同じような記述が出来ると思います。

6日以降、累計合計が1に戻るのかと思い、これを想定した記述ですので、違う場合は6日以降のデータがどのようになるのかご返信下さい。

(スクリプト)

TEMP:
LOAD * INLINE [
    ID, Date, Volume
    1, 2018/01/01, 1
    1, 2018/01/02, 1
    1, 2018/01/03, 1
    1, 2018/01/04, 1
    1, 2018/01/05, 1
    1, 2018/01/06, 1
    1, 2018/01/07, 1
    1, 2018/01/08, 1
    1, 2018/01/09, 1
    2, 2018/01/01, 1
    2, 2018/01/02, 1
    2, 2018/01/03, 1
    2, 2018/01/04, 1
    2, 2018/01/05, 1
    2, 2018/01/06, 1
    2, 2018/01/07, 1
    2, 2018/01/08, 1
    2, 2018/01/09, 1
];

TABLE:
LOAD ID,
    Date,
    Volume,
    IF(ID=Previous(ID),IF(Peek(累積合計)=5,Volume,Peek(累積合計)+Volume)
          ,Volume) as 累積合計,
    IF(ID=Previous(ID),IF(Peek(累積合計)+Volume=5,Num(0),Volume)
          ,Volume) as Volume_New
Resident TEMP
Order By ID,Date;
DROP Table TEMP;


(作成後のデータ)

IDDateVolume累積合計Volume_New
12018/01/01111
12018/01/02121
12018/01/03131
12018/01/04141
12018/01/05150
12018/01/06111
12018/01/07121
12018/01/08131
12018/01/09141
22018/01/01111
22018/01/02121
22018/01/03131
22018/01/04141
22018/01/05150
22018/01/06111
22018/01/07121
22018/01/08131
22018/01/09141
hka
Employee
Employee

Qlik Senseでも同じ関数が使用可能です。

kenjiokamoto
Contributor II
Contributor II
Author

若松さま Kawahataさま

いつもお返事有難うございます。

実際のテーブルはもう少し複雑で、うまく機能してくれていません。

要因がわかったら、改めて質問させて頂けますでしょうか。

少しお時間を頂けますと幸いです。

kenjiokamoto
Contributor II
Contributor II
Author

若松さま Kawahataさま

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

頂いたスクリプトで無事出来ました。

有難うございます。

上手く行っていなかった理由は、実際のテーブルではデータが重複していたためだと思われます。

データのロードを

Load distinct ...

にしたら無事出来ました。