Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for 
Search instead for 
Did you mean: 
reivax31
Partner - Creator III
Partner - Creator III

12 month rolling rangesum in script

Hi Qlikers,

I have the following table and in the last column I'm showing the expected result. What It need is for each customers a cumulative sum of the costs (the first 11 month no calculation is performed). 

 CustomerCostSales12 month Cost
01/07/2012A2607,332716,08 
01/08/2012A2470,402621,17 
01/09/2012A3151,343256,64 
01/10/2012A3557,383796,53 
01/11/2012A3293,923545,28 
01/12/2012A6757,867095,38 
01/01/2013A3546,393877,51 
01/02/2013A3985,344089,04 
01/03/2013A3843,583990,89 
01/04/2013A3186,203215,56 
01/05/2013A2838,052964,63 
01/06/2013A2460,422508,17           41 698,21  
01/07/2013A2453,032501,81           41 543,91  
01/08/2013A1969,012017,42           41 042,52  
01/09/2013A2799,552820,12           40 690,72  
01/10/2013A3109,993788,99           40 243,33  
01/11/2013A5307,895437,45           42 257,30  
01/12/2013A5098,755122,93           40 598,19  
01/01/2014A5291,475449,31           42 343,26  
01/02/2014A6350,296374,41           44 708,21  
01/03/2014A3234,943261,26           44 099,56  
01/04/2014A2912,682923,78           43 826,05  
01/05/2014A4322,884469,30           45 310,88  
01/06/2014A2180,732555,43           45 031,19  
01/07/2014A2316,362345,31           44 894,52  
01/04/2012B2927,443093,66 
01/05/2012B1757,941757,94 
01/06/2012B1775,891880,59 
01/07/2012B1610,091701,12 
01/08/2012B1344,771489,80 
01/09/2012B990,371122,33 
01/10/2012B1528,671947,70 
01/11/2012B1478,401815,98 
01/12/2012B3183,183610,94 
01/01/2013B1660,141986,18 
01/02/2013B1617,741704,28 
01/03/2013B1513,941650,48           21 388,55  
01/04/2013B1219,861333,82           19 680,97  
01/05/2013B1242,821259,67           19 165,86  
01/06/2013B833,51862,74           18 223,48  
01/07/2013B688,73765,50           17 302,12  
01/08/2013B593,30708,01           16 550,65  
01/09/2013B1206,921265,18           16 767,20  
01/10/2013B1690,542154,54           16 929,07  
01/11/2013B2408,932457,90           17 859,59  
01/12/2013B2260,082436,08           16 936,49  
01/01/2014B2851,262856,03           18 127,61  

 

Thanks for your help

Labels (1)
1 Solution

Accepted Solutions
sunny_talwar

Try this

Table:
LOAD * INLINE [
    Date, Customer, Cost, Sales
    01/07/2012, A, 2607.33, 2716.08
    01/08/2012, A, 2470.40, 2621.17
    01/09/2012, A, 3151.34, 3256.64
    01/10/2012, A, 3557.38, 3796.53
    01/11/2012, A, 3293.92, 3545.28
    01/12/2012, A, 6757.86, 7095.38
    01/01/2013, A, 3546.39, 3877.51
    01/02/2013, A, 3985.34, 4089.04
    01/03/2013, A, 3843.58, 3990.89
    01/04/2013, A, 3186.20, 3215.56
    01/05/2013, A, 2838.05, 2964.63
    01/06/2013, A, 2460.42, 2508.17
    01/07/2013, A, 2453.03, 2501.81
    01/08/2013, A, 1969.01, 2017.42
    01/09/2013, A, 2799.55, 2820.12
    01/10/2013, A, 3109.99, 3788.99
    01/11/2013, A, 5307.89, 5437.45
    01/12/2013, A, 5098.75, 5122.93
    01/01/2014, A, 5291.47, 5449.31
    01/02/2014, A, 6350.29, 6374.41
    01/03/2014, A, 3234.94, 3261.26
    01/04/2014, A, 2912.68, 2923.78
    01/05/2014, A, 4322.88, 4469.30
    01/06/2014, A, 2180.73, 2555.43
    01/07/2014, A, 2316.36, 2345.31
    01/04/2012, B, 2927.44, 3093.66
    01/05/2012, B, 1757.94, 1757.94
    01/06/2012, B, 1775.89, 1880.59
    01/07/2012, B, 1610.09, 1701.12
    01/08/2012, B, 1344.77, 1489.80
    01/09/2012, B, 990.37, 1122.33
    01/10/2012, B, 1528.67, 1947.70
    01/11/2012, B, 1478.40, 1815.98
    01/12/2012, B, 3183.18, 3610.94
    01/01/2013, B, 1660.14, 1986.18
    01/02/2013, B, 1617.74, 1704.28
    01/03/2013, B, 1513.94, 1650.48
    01/04/2013, B, 1219.86, 1333.82
    01/05/2013, B, 1242.82, 1259.67
    01/06/2013, B, 833.51, 862.74
    01/07/2013, B, 688.73, 765.50
    01/08/2013, B, 593.30, 708.01
    01/09/2013, B, 1206.92, 1265.18
    01/10/2013, B, 1690.54, 2154.54
    01/11/2013, B, 2408.93, 2457.90
    01/12/2013, B, 2260.08, 2436.08
    01/01/2014, B, 2851.26, 2856.03
];

FinalTable:
LOAD *,
	 If(Customer = Previous(Customer), RangeSum(Peek('Count'), 1), 1) as Count,
	 If(Customer = Previous(Customer) and Peek('Count') >= 11, RangeSum(Cost, Peek('Cost'), Peek('Cost', -2), Peek('Cost', -3), Peek('Cost', -4), Peek('Cost', -5), Peek('Cost', -6),
	 																	Peek('Cost', -7), Peek('Cost', -8), Peek('Cost', -9), Peek('Cost', -10), Peek('Cost', -11))) as [12 month cost]
Resident Table
Order By Customer, Date;

DROP Table Table;
DROP Field Count;

View solution in original post

5 Replies
sunny_talwar

Try this

Table:
LOAD * INLINE [
    Date, Customer, Cost, Sales
    01/07/2012, A, 2607.33, 2716.08
    01/08/2012, A, 2470.40, 2621.17
    01/09/2012, A, 3151.34, 3256.64
    01/10/2012, A, 3557.38, 3796.53
    01/11/2012, A, 3293.92, 3545.28
    01/12/2012, A, 6757.86, 7095.38
    01/01/2013, A, 3546.39, 3877.51
    01/02/2013, A, 3985.34, 4089.04
    01/03/2013, A, 3843.58, 3990.89
    01/04/2013, A, 3186.20, 3215.56
    01/05/2013, A, 2838.05, 2964.63
    01/06/2013, A, 2460.42, 2508.17
    01/07/2013, A, 2453.03, 2501.81
    01/08/2013, A, 1969.01, 2017.42
    01/09/2013, A, 2799.55, 2820.12
    01/10/2013, A, 3109.99, 3788.99
    01/11/2013, A, 5307.89, 5437.45
    01/12/2013, A, 5098.75, 5122.93
    01/01/2014, A, 5291.47, 5449.31
    01/02/2014, A, 6350.29, 6374.41
    01/03/2014, A, 3234.94, 3261.26
    01/04/2014, A, 2912.68, 2923.78
    01/05/2014, A, 4322.88, 4469.30
    01/06/2014, A, 2180.73, 2555.43
    01/07/2014, A, 2316.36, 2345.31
    01/04/2012, B, 2927.44, 3093.66
    01/05/2012, B, 1757.94, 1757.94
    01/06/2012, B, 1775.89, 1880.59
    01/07/2012, B, 1610.09, 1701.12
    01/08/2012, B, 1344.77, 1489.80
    01/09/2012, B, 990.37, 1122.33
    01/10/2012, B, 1528.67, 1947.70
    01/11/2012, B, 1478.40, 1815.98
    01/12/2012, B, 3183.18, 3610.94
    01/01/2013, B, 1660.14, 1986.18
    01/02/2013, B, 1617.74, 1704.28
    01/03/2013, B, 1513.94, 1650.48
    01/04/2013, B, 1219.86, 1333.82
    01/05/2013, B, 1242.82, 1259.67
    01/06/2013, B, 833.51, 862.74
    01/07/2013, B, 688.73, 765.50
    01/08/2013, B, 593.30, 708.01
    01/09/2013, B, 1206.92, 1265.18
    01/10/2013, B, 1690.54, 2154.54
    01/11/2013, B, 2408.93, 2457.90
    01/12/2013, B, 2260.08, 2436.08
    01/01/2014, B, 2851.26, 2856.03
];

FinalTable:
LOAD *,
	 If(Customer = Previous(Customer), RangeSum(Peek('Count'), 1), 1) as Count,
	 If(Customer = Previous(Customer) and Peek('Count') >= 11, RangeSum(Cost, Peek('Cost'), Peek('Cost', -2), Peek('Cost', -3), Peek('Cost', -4), Peek('Cost', -5), Peek('Cost', -6),
	 																	Peek('Cost', -7), Peek('Cost', -8), Peek('Cost', -9), Peek('Cost', -10), Peek('Cost', -11))) as [12 month cost]
Resident Table
Order By Customer, Date;

DROP Table Table;
DROP Field Count;
reivax31
Partner - Creator III
Partner - Creator III
Author

I had an other solution that worked but not very clean. I prefer yours

 

DATA_PROD:

Load
*,
if(CUMUL_FLAG>=12,Cost
+ peek ('Cost',-1)
+ peek ('Cost',-2)
+ peek ('Cost',-3)
+ peek ('Cost',-4)
+ peek ('Cost',-5)
+ peek ('Cost',-6)
+ peek ('Cost',-7)
+ peek ('Cost',-8)
+ peek ('Cost',-9)
+ peek ('Cost',-10)
+ peek ('Cost',-11)
,0) as 12_month_cost
;

LOAD
*,
if(Peek('Customer')<>Customer,
FLAG, FLAG+ peek ('CUMUL_FLAG')) AS CUMUL_FLAG
;

LOAD
*,
if(Cost>0, 1 ,0) AS FLAG 
resident DATA_PROD_TEMP
order by Customer,MEASURE_DATE ;

drop table DATA_PROD_TEMP;

awp2020
Contributor III
Contributor III

Hi,

could you explain me how to modify the script to get a cumulative value when it's less than 12 months like below  ? :

thank you for your help 

  Customer Cost Sales 12 month Cost
01/07/2012 A 2607,3 2716,1 2607,3
01/08/2012 A 2470,4 2621,2 5077,7
01/09/2012 A 3151,3 3256,6 8229,1
01/10/2012 A 3557,4 3796,5 11786
01/11/2012 A 3293,9 3545,3 15080
01/12/2012 A 6757,9 7095,4 21838
01/01/2013 A 3546,4 3877,5 25385
01/02/2013 A 3985,3 4089 29370
01/03/2013 A 3843,6 3990,9 33214
01/04/2013 A 3186,2 3215,6 36400
01/05/2013 A 2838,1 2964,6 39238
01/06/2013 A 2460,4 2508,2 41698

 

 

 

awp2020
Contributor III
Contributor III

Hi, no one to help me ?

awp2020
Contributor III
Contributor III

Hello,

I found it !

 

Table:
LOAD * INLINE [
Date, Customer, Cost, Sales
01/07/2012, A, 2607.33, 2716.08
01/08/2012, A, 2470.40, 2621.17
01/09/2012, A, 3151.34, 3256.64
01/10/2012, A, 3557.38, 3796.53
01/11/2012, A, 3293.92, 3545.28
01/12/2012, A, 6757.86, 7095.38
01/01/2013, A, 3546.39, 3877.51
01/02/2013, A, 3985.34, 4089.04
01/03/2013, A, 3843.58, 3990.89
01/04/2013, A, 3186.20, 3215.56
01/05/2013, A, 2838.05, 2964.63
01/06/2013, A, 2460.42, 2508.17
01/07/2013, A, 2453.03, 2501.81
01/08/2013, A, 1969.01, 2017.42
01/09/2013, A, 2799.55, 2820.12
01/10/2013, A, 3109.99, 3788.99
01/11/2013, A, 5307.89, 5437.45
01/12/2013, A, 5098.75, 5122.93
01/01/2014, A, 5291.47, 5449.31
01/02/2014, A, 6350.29, 6374.41
01/03/2014, A, 3234.94, 3261.26
01/04/2014, A, 2912.68, 2923.78
01/05/2014, A, 4322.88, 4469.30
01/06/2014, A, 2180.73, 2555.43
01/07/2014, A, 2316.36, 2345.31
01/04/2012, B, 2927.44, 3093.66
01/05/2012, B, 1757.94, 1757.94
01/06/2012, B, 1775.89, 1880.59
01/07/2012, B, 1610.09, 1701.12
01/08/2012, B, 1344.77, 1489.80
01/09/2012, B, 990.37, 1122.33
01/10/2012, B, 1528.67, 1947.70
01/11/2012, B, 1478.40, 1815.98
01/12/2012, B, 3183.18, 3610.94
01/01/2013, B, 1660.14, 1986.18
01/02/2013, B, 1617.74, 1704.28
01/03/2013, B, 1513.94, 1650.48
01/04/2013, B, 1219.86, 1333.82
01/05/2013, B, 1242.82, 1259.67
01/06/2013, B, 833.51, 862.74
01/07/2013, B, 688.73, 765.50
01/08/2013, B, 593.30, 708.01
01/09/2013, B, 1206.92, 1265.18
01/10/2013, B, 1690.54, 2154.54
01/11/2013, B, 2408.93, 2457.90
01/12/2013, B, 2260.08, 2436.08
01/01/2014, B, 2851.26, 2856.03
];

DATA_1:
LOAD *,
year(Date) as Year,
month(Date) as Month

Resident Table;
DROP Table Table;

FinalTable:
LOAD *,


If(Customer = Previous(Customer), RangeSum(Peek('Count'), 1), 1) as Count,
If(Customer = Previous(Customer) and Peek('Count') >= 11, RangeSum(Cost, Peek('Cost'), Peek('Cost', -2), Peek('Cost', -3),
Peek('Cost', -4), Peek('Cost', -5), Peek('Cost', -6),Peek('Cost', -7), Peek('Cost', -8), Peek('Cost', -9), Peek('Cost', -10), Peek('Cost', -11))) as [12 month cost],

If(Peek('Year')=Year, RangeSum(Peek('YTD_COST'), Cost), Cost) as YTD_COST

Resident DATA_1
Order By Customer,Date,Year,Month;

Drop table DATA_1;
DROP Field Count;