Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
CarlosEduardoZ
Contributor
Contributor

I would like to replace Nested "previous" (script function)

Hi,

I'd like to replace in my script some nested previous used to find the last value for a field (in this case, the supply source) in a table that have values similar to:

Tab:
Load *,
If(len(trim(Source2))= 0 or Source2='NULL' or Source2='-', Null(), Source2 ) as Source
INLINE [Trip Stop Type Source2 Pickup Delivered
a1 1 1 a 20 -
a1 2 2 - - 11
a1 3 2 - - 6
a1 4 2 - - 2
a1 5 3 b 18 -
a1 6 2 - - 16
a1 7 4 - - 3
](delimiter is ' ');

This would be a tipical trip, in which there are 4 types of Stops: 1 for initial product pickup, 2 for delivery to customers, 3 for others product pickup (e.g. in a provider) and 4 for product returned to plant.

I need to identify the source for each stop (that would be the previous source untill the truck stop in a provider, changing the source, type 3) and I solve this situation by using nested "previous" function as follow. Could you help me to simplify this scrip? (maybe with peek function or using other one).

My initial solution was:

Source:
Load
Trip&Stop as TripStop,
        if(isNull(Source),
    if(isnull(Previous(Source)),
        if(isnull(previous(Previous(Source))),
            if(isnull(previous(previous(Previous(Source)))),
                if(isnull(previous(previous(previous(Previous(Source))))),
                    if(isnull(previous(previous(previous(Previous(previous(Source)))))),
                        if(isnull(previous(previous(previous(Previous(previous(previous(Source))))))),
                            if(isnull(previous(previous(previous(Previous(previous(previous(previous(Source)))))))),
                                if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(Source))))))))),
                                    if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(Source)))))))))),
                                        if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(Source))))))))))),
                                            if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(Source)))))))))))),
                                                if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))),
                                                    if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source)))))))))))))),
                                                    if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))))),
                                                        if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source)))))))))))))))),
                                    if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))))))),
                                                                if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source)))))))))))))))))),
                                                                if(isnull(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))))))))),
                                                                previous(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))))))))),
                                                                                  previous(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source)))))))))))))))))))
                                                            ,previous(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))))))))             
                                                            ,previous(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source)))))))))))))))))   
                                                            ,previous(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))))))
                                                            ,previous(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(previous(Source)))))))))))))))
                                                            ,previous(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))))     
                                    ,previous(previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(Source)))))))))))))
                                    ,previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(previous(Source))))))))))))
                                    ,previous(previous(previous(Previous(previous(previous(previous(previous(previous(previous(Source)))))))))))
                                    ,previous(previous(previous(Previous(previous(previous(previous(previous(previous(Source))))))))))
                                    ,previous(previous(previous(Previous(previous(previous(previous(previous(Source)))))))))
                                      ,previous(previous(previous(Previous(previous(previous(previous(Source))))))))
                            ,previous(previous(previous(Previous(previous(previous(Source)))))))
                                ,previous(previous(previous(Previous(previous(Source))))))
                        ,previous(previous(previous(Previous(Source)))))
                       ,previous(previous(Previous(Source))))
                   ,previous(Previous(Source)))
                ,Previous(Source))
            ,Source) as SourceOk

RESIDENT Tab;

DROP TABLE Tab;

Labels (1)
1 Solution

Accepted Solutions
MATC
Contributor III
Contributor III

You can try this solution

Tab:
Load *,
If(len(trim(Source2))= 0 or Source2='NULL' or Source2='-', Null(), Source2 ) as Source
INLINE [Trip Stop Type Source2 Pickup Delivered
a1 1 1 a 20 -
a1 2 2 - - 11
a1 3 2 - - 6
a1 4 2 - - 2
a1 5 3 b 18 -
a1 6 2 - - 16
a1 7 4 - - 3
](delimiter is ' ');

Tab2:
load distinct
TripStop,
if(len(trim(Source))=0, peek(Source), Source) as Source;
load distinct
Trip&Stop as TripStop,
Source
Resident Tab;

View solution in original post

2 Replies
MATC
Contributor III
Contributor III

You can try this solution

Tab:
Load *,
If(len(trim(Source2))= 0 or Source2='NULL' or Source2='-', Null(), Source2 ) as Source
INLINE [Trip Stop Type Source2 Pickup Delivered
a1 1 1 a 20 -
a1 2 2 - - 11
a1 3 2 - - 6
a1 4 2 - - 2
a1 5 3 b 18 -
a1 6 2 - - 16
a1 7 4 - - 3
](delimiter is ' ');

Tab2:
load distinct
TripStop,
if(len(trim(Source))=0, peek(Source), Source) as Source;
load distinct
Trip&Stop as TripStop,
Source
Resident Tab;

CarlosEduardoZ
Contributor
Contributor
Author

Thanks for your support.

I have learned that I could use the "Load" function more than one time when I'm loading data from a resident table 🙂

Thanks a lot!