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: 
rob_vander
Creator
Creator

Complex scenario generating records based on sequence

Hi All,

I have below source table

1 Alive 1 100
2 Sleep 10 25
3 Sleep 50 60
4 Sleep 70 81

 

Based on the state of sleep i need to fill in alive state matching with start seq & end seq so that it avoids any overlapping which should create below table

Row state start seq end seq
1 Alive 1 9
2 Sleep 10 25
3 Alive 26 49
4 Sleep 50 60
5 Alive 61 69
6 Sleep 70 81
7 Alive 82 100

 

I don't know how do I start writing script for this scenario. If someone could point me to the right direction would be helpful

Labels (3)
1 Solution

Accepted Solutions
Kushal_Chawda
MVP
MVP

@rob_vander  try below

Data:
Load * Inline [
Row	state	start_seq	end_seq
1	Alive	1	100
2	Sleep	10	25
3	Sleep	50	60
4	Sleep	70	81 ] (delimiter is '\t');

max_seq:
Load max(FieldValue('end_seq',RecNo())) as max_seq
AutoGenerate FieldValueCount('end_seq');

let vMax_Seq = Peek('max_seq');

Drop Table max_seq;

Final:
Load state,
     start_seq,
     if(state='Alive',Peek(start_seq)-1 ,end_seq) as end_seq,
     end_seq+1 as start_seq2,
     alt(Peek(start_seq)-1,$(vMax_Seq)) as end_seq2
Resident Data
Order by start_seq desc;

Drop Table Data;

Concatenate(Final)
Load 'Alive' as state,
      start_seq2 as start_seq,
      end_seq2 as end_seq
Resident Final
where state='Sleep';

Drop Fields start_seq2,end_seq2;

 

Kushal_Chawda_0-1733680157508.png

 

 

 

View solution in original post

3 Replies
ChannaK
Creator
Creator

bro try this

Base:
load * inline [Sno,Name,Start,end
1,Alive,1,100
2,Sleep,10,25
3,Sleep,50,60
4,Sleep,70,81];
NoConcatenate

Sleep:
load Sno,'Alive'as Name,(end)+1 as Start resident Base where Name='Sleep';

load Sno-1 as Sno,'Alive'as Name,(Start)-1 as End resident Base where Name='Sleep';
drop table Base;

 

later you try to concatenate with original table

 

ChannaK_0-1733565727369.png

 

 

 

 

rob_vander
Creator
Creator
Author

@ChannaK  This is helpful but not quite working fully.  I can't do Sno-1 because it's just the example. Actually there is no such column in data.

Kushal_Chawda
MVP
MVP

@rob_vander  try below

Data:
Load * Inline [
Row	state	start_seq	end_seq
1	Alive	1	100
2	Sleep	10	25
3	Sleep	50	60
4	Sleep	70	81 ] (delimiter is '\t');

max_seq:
Load max(FieldValue('end_seq',RecNo())) as max_seq
AutoGenerate FieldValueCount('end_seq');

let vMax_Seq = Peek('max_seq');

Drop Table max_seq;

Final:
Load state,
     start_seq,
     if(state='Alive',Peek(start_seq)-1 ,end_seq) as end_seq,
     end_seq+1 as start_seq2,
     alt(Peek(start_seq)-1,$(vMax_Seq)) as end_seq2
Resident Data
Order by start_seq desc;

Drop Table Data;

Concatenate(Final)
Load 'Alive' as state,
      start_seq2 as start_seq,
      end_seq2 as end_seq
Resident Final
where state='Sleep';

Drop Fields start_seq2,end_seq2;

 

Kushal_Chawda_0-1733680157508.png