Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
So I've been asked to provide cumulative count of our products we have installed by date. I need to to make sure we include date even if we haven't installed anything on that that. I already have a calendar QVD I can leverage.
This needs to be a script because I need to then link this new table to a different data set
Example of installed list
| Account | InstallDate | Serial Number |
| 12345 | 15/07/2017 | 10 |
| 12345 | 16/07/2017 | 11 |
| 12345 | 19/07/2017 | 12 |
| 12345 | 25//07/2017 | 13 |
| 12345 | 29/07/2017 | 14 |
| 12345 | 02/08/2017 | 15 |
| 12345 | 05/08/2017 | 16 |
| 12345 | 10/08/2017 | 17 |
| 12345 | 12/08/2017 | 18 |
Example of Output
| Date | Account | Count |
| 01/07/2017 | 12345 | 0 |
| 02/07/2017 | 12345 | 0 |
| 03/07/2017 | 12345 | 0 |
| 04/07/2017 | 12345 | 0 |
| 05/07/2017 | 12345 | 0 |
| 06/07/2017 | 12345 | 0 |
| 07/07/2017 | 12345 | 0 |
| 08/07/2017 | 12345 | 0 |
| 09/07/2017 | 12345 | 0 |
| 10/07/2017 | 12345 | 0 |
| 11/07/2017 | 12345 | 0 |
| 12/07/2017 | 12345 | 0 |
| 13/07/2017 | 12345 | 0 |
| 14/07/2017 | 12345 | 0 |
| 15/07/2017 | 12345 | 1 |
| 16/07/2017 | 12345 | 2 |
| 17/07/2017 | 12345 | 2 |
| 18/07/2017 | 12345 | 2 |
| 19/07/2017 | 12345 | 3 |
| 20/07/2017 | 12345 | 3 |
| 21/07/2017 | 12345 | 3 |
| 22/07/2017 | 12345 | 3 |
| 23/07/2017 | 12345 | 3 |
| 24/07/2017 | 12345 | 3 |
| 25/07/2017 | 12345 | 4 |
| 26/07/2017 | 12345 | 4 |
| 27/07/2017 | 12345 | 4 |
| 28/07/2017 | 12345 | 4 |
| 29/07/2017 | 12345 | 5 |
| 30/07/2017 | 12345 | 5 |
| 31/07/2017 | 12345 | 5 |
| 01/08/2017 | 12345 | 5 |
| 02/08/2017 | 12345 | 6 |
| 03/08/2017 | 12345 | 6 |
| 04/08/2017 | 12345 | 6 |
| 05/08/2017 | 12345 | 7 |
| 06/08/2017 | 12345 | 7 |
| 07/08/2017 | 12345 | 7 |
| 08/08/2017 | 12345 | 7 |
| 09/08/2017 | 12345 | 7 |
| 10/08/2017 | 12345 | 8 |
| 11/08/2017 | 12345 | 8 |
| 12/08/2017 | 12345 | 9 |
| 13/08/2017 | 12345 | 9 |
Any ideas on how to produce this would be great
Another approach could be by using fastest way of calculating Min and max Date
Data:
LOAD * Inline [
Account, InstallDate, Serial Number
12345, 15/07/2017, 10
12345, 16/07/2017, 11
12345, 19/07/2017, 12
12345, 25/07/2017, 13
12345, 29/07/2017, 14
12345, 02/08/2017, 15
12345, 05/08/2017, 16
12345, 10/08/2017, 17
12345, 12/08/2017, 18];
T1:
LOAD date(MinDate+IterNo()-1) as InstallDate
While MinDate+IterNo()-1<=MaxDate;
LOAD monthstart(min(Date)) as MinDate,
max(Date) as MaxDate;
LOAD FieldValue('InstallDate',RecNo()) as Date
AutoGenerate FieldValueCount('InstallDate');
Left Join(T1)
LOAD Distinct Account
Resident Data;
Left Join(T1)
LOAD *
Resident Data;
DROP Table Data;
Final:
LOAD *,
alt(if(AutoNumber([Serial Number],Account) >0,AutoNumber([Serial Number],Account) ,Peek('Cumulative')),0) as Cumulative
Resident T1
Order by Account,InstallDate;
DROP Table T1;

or even more simpler
Data:
LOAD *, AutoNumber([Serial Number],Account) as Serial Inline [
Account, InstallDate, Serial Number
12345, 15/07/2017, 10
12345, 16/07/2017, 11
12345, 19/07/2017, 12
12345, 25/07/2017, 13
12345, 29/07/2017, 14
12345, 02/08/2017, 15
12345, 05/08/2017, 16
12345, 10/08/2017, 17
12345, 12/08/2017, 18];
T1:
LOAD date(MinDate+IterNo()-1) as InstallDate
While MinDate+IterNo()-1<=MaxDate;
LOAD monthstart(min(Date)) as MinDate,
max(Date) as MaxDate;
LOAD FieldValue('InstallDate',RecNo()) as Date
AutoGenerate FieldValueCount('InstallDate');
Left Join(T1)
LOAD Distinct Account
Resident Data;
Left Join(T1)
LOAD *
Resident Data;
DROP Table Data;
Final:
LOAD *,
alt(if(Serial>0,Serial,Peek('Cumulative')),0) as Cumulative
Resident T1
Order by Account,InstallDate;
DROP Table T1;
Hi Krushal
This was very useful and I almost have this working, the issue I was when I add an additional Account the Cumulative starts at 1 instead 0
Any ideas
Hi Mike,
This could happen because let's say for Account B, you have serial number starts from installdate 1-08-2017 which is minimum date then your Cummulative will start with one as I have used autonumber. Do you want the it to start from 0?
I need it to start at 0 for every account until it finds the first serial number ordered by date
try this
Data:
LOAD * Inline [
Account, InstallDate, Serial Number
12345, 15/07/2017, 10
12345, 16/07/2017, 11
12345, 19/07/2017, 12
12345, 25/07/2017, 13
12345, 29/07/2017, 14
12345, 02/08/2017, 15
12345, 05/08/2017, 16
12345, 10/08/2017, 17
12345, 12/08/2017, 18];
T1:
LOAD date(MinDate+IterNo()-1) as InstallDate
While MinDate+IterNo()-1<=MaxDate;
LOAD monthstart(min(Date)) as MinDate,
max(Date) as MaxDate;
LOAD FieldValue('InstallDate',RecNo()) as Date
AutoGenerate FieldValueCount('InstallDate');
Left Join(T1)
LOAD Distinct Account
Resident Data;
Left Join(T1)
LOAD *
Resident Data;
DROP Table Data;
Final:
LOAD *,
alt(if(Serial=0,Peek('Cumulative'),Serial),0) as Cumulative;
LOAD *,
autonumber(alt([Serial Number],'NA'),Account)-1 as Serial
Resident T1
Order by Account,InstallDate;
DROP Table T1;
I'm still struggling
example account 1234 has a date 10/08/2015
when I select account 12345 years 2015 upto 15/07/2017 so Cumulative value of 1 however it needs to be 0
Data:
LOAD * Inline [
Account, InstallDate, Serial Number
12345, 15/07/2017, 10
12345, 16/07/2017, 11
12345, 19/07/2017, 12
12345, 25/07/2017, 13
12345, 29/07/2017, 14
12345, 02/08/2017, 15
12345, 05/08/2017, 16
12345, 10/08/2017, 17
12345, 12/08/2017, 18
1234, 10/8/2015, 5];
T1:
LOAD date(MinDate+IterNo()-1) as InstallDate
While MinDate+IterNo()-1<=MaxDate;
LOAD monthstart(min(Date)) as MinDate,
max(Date) as MaxDate;
LOAD FieldValue('InstallDate',RecNo()) as Date
AutoGenerate FieldValueCount('InstallDate');
Left Join(T1)
LOAD Distinct Account
Resident Data;
Left Join(T1)
LOAD *
Resident Data;
DROP Table Data;
Final:
LOAD *,
alt(if(Serial=0,Peek('Cumulative'),Serial),0) as Cumulative;
LOAD *,
autonumber(alt([Serial Number],'NA'),Account)-1 as Serial
Resident T1
Order by Account,InstallDate;
DROP Table T1;
.. you asked for a script solution...
I think you need a frontend solution don't you?
I then need to join this to another table to compare with sales, I tried to a front end solution using set analysis but couldn't get that to work.
I spoke to a various people at my organization on how to do this.
Its driving m crazy ![]()
try this, seems to be working
Data:
LOAD * Inline [
Account, InstallDate, Serial Number
12345, 15/07/2017, 10
12345, 16/07/2017, 11
12345, 19/07/2017, 12
12345, 25/07/2017, 13
12345, 29/07/2017, 14
12345, 02/08/2017, 15
12345, 05/08/2017, 16
12345, 10/08/2017, 17
12345, 12/08/2017, 18
1234, 10/8/2015, 18
];
T1:
LOAD date(MinDate+IterNo()-1) as InstallDate
While MinDate+IterNo()-1<=MaxDate;
LOAD monthstart(min(Date)) as MinDate,
max(Date) as MaxDate;
LOAD FieldValue('InstallDate',RecNo()) as Date
AutoGenerate FieldValueCount('InstallDate');
Left Join(T1)
LOAD Distinct Account
Resident Data;
Left Join(T1)
LOAD *
Resident Data;
DROP Table Data;
Final:
LOAD *,
if(Serial=0,if(Account=peek(Account),Peek('Cumulative'),Serial),Serial) as Cumulative;
LOAD *,
autonumber(alt([Serial Number],'NA'),Account)-1 as Serial
Resident T1
Order by Account,InstallDate;
DROP Table T1;