Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Want to see what's currently in public preview? We've pulled it all together in one place. Check it out here
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Previous()

I have a piece of script that looks at the values of a table, these values are completely random and have no set sequecne.

For example

Col A          Col B     Line_Number

45456464     8               1

45456464     45              2

45456464     21              3

102154          5               1

102154          3               2

324549          8               2

7878454         9               1

7878454         2               2

So the line number works fine when there is multiple occurances it resets to one which is great, however if you look at Col A value 324549  the line_number goes to 2.

How can I get the Line_number to reset to 1 in this instance while ensuring all other line_numbers are calculated as per above.

if(Previous(col_A)=col_A,numsum(peek('Line_Number'),1),1) As Line_Number

Thanks,

Aidan

Labels (1)
1 Solution

Accepted Solutions
tresB
Champion III
Champion III

Much simpler:

Load

          AutoNumber(RecNo(), ColA) as LineNo

View solution in original post

7 Replies
anbu1984
Master III
Master III

prev_res.png

Your code works correctly.

Prev:

Load *,if(Previous(col_A)=col_A,numsum(peek('Line_Number'),1),1) As Line_Number1 Inline [

col_A,col_B,Line_Number

45456464,8,1

45456464,45,2

45456464,21,3

102154,5,1

102154,3,2

324549,8,2

7878454,9,1

7878454,2,2 ];

MK_QSL
MVP
MVP

Temp:

Load * Inline

[

  Col A,        Col B

  45456464,     8

  45456464,     45

  45456464,     21

  102154,       5              

  102154,       3              

  324549,       8              

  7878454,      9              

  7878454,      2              

];

Final:

Load

  [Col A],

  [Col B],

  IF([Col A] = Previous([Col A]), RangeSum(Peek('Line_Number'),1),1) as Line_Number

Resident Temp

Order By [Col A], [Col B];

Drop Table Temp;

rubenmarin
MVP
MVP

Try using peek.

Maybe, if you have a 'where' or 'if' condition, previous will take the descarted register from source table, so it counts there is one previous register where Col_A='324549'.

if(Peek('col_A')=col_A,numsum(peek('Line_Number'),1),1) As Line_Number

tresB
Champion III
Champion III

Much simpler:

Load

          AutoNumber(RecNo(), ColA) as LineNo

maxgro
MVP
MVP

load

    ...,

  if([Col A]=peek([Col A]), peek(Line_Number)+1, 1 ) as Line_Number

Resident ......

Order By [Col A], [Col B];

Not applicable
Author

Thank you Massimo simple soultion in the end:)

Not applicable
Author

Thanks tresesco worked great