Qlik Community

New to Qlik Sense

Discussion board where members can get started with Qlik Sense.

expeditor
New Contributor

How to use a "left join Load with peek()" inside an if/else and for/next loop?

Hello,

Please help.

I have a Table ( 'Quelle' ) as Source. There are two fields in it ( 'Erster' , 'Zweiter' ), which should be compared.

I need the field with more characters as return ( 'BestOf' ). If both fields ( 'Erster' , 'Zweiter' ) have an evan count of characters then take 'Erster' as return.

Zwischenablage01.jpg

Up to now I have the following Code in my Skript:

--------------------------------------------------------------------------------------------

Quelle:

LOAD * INLINE [

    Erster, Zweiter, Primärschlüßel

    a, 22, aaa

    ab, 333, bbb

    abc, 4444, ccc

    abcd, 4444, ddd

    abcde, 4444, eee

    ab, 55555, fff,

    ab, 1, ggg

    ab, 22, hhh

];

Ergebniss:

LOAD

Primärschlüßel as Sekundärschlüßel

Resident Quelle;

for i = 0 to (NoOfRows('Quelle'))-1;

    let vLänge_Erster = len(peek('Erster',$(i),'Quelle'));

    let vLänge_Zweiter = len(peek('Zweiter',$(i),'Quelle'));

   

    Trace Durchgang i:  $(i);

    Trace Länge von 'Erster': $(vLänge_Erster);

    Trace Länge von 'Zweiter': $(vLänge_Zweiter);

       

    if vLänge_Erster >= vLänge_Zweiter     Then

        Trace genommern wird Wert aus Feld:'Erster';

           left Join (Ergebniss)

            load

            peek('Erster',$(i),'Quelle') as BestOf,

            $(i) as i,

            peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

            Resident Ergebniss;

        else

        Trace genommern wird Wert aus Feld: 'Zweiter';

            left Join (Ergebniss)

            load

            peek('Zweiter',$(i),'Quelle') as BestOf,

            $(i) as i,

            peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

            Resident Ergebniss;

       

    ENDIF

    Trace -----------;

next

--------------------------------------------------------------------------------------------

I think somewhere in the red parts is a Bug, but I can't find it.

Can anyone help me?

THX

1 Solution

Accepted Solutions
bhasker_smu
Contributor II

Re: How to use a "left join Load with peek()" inside an if/else and for/next loop?

Hi,

please find the attached solution Qvw.

Sol.PNG

** Modified Script****

Quelle:

LOAD * INLINE [

Erster, Zweiter, Primärschlüßel

a, 22, aaa

ab, 333, bbb

abc, 4444, ccc

abcd, 4444, ddd

abcde, 4444, eee

ab, 55555, fff,

ab, 1, ggg

ab, 22, hhh

];

Ergebniss:

LOAD

Primärschlüßel as Sekundärschlüßel

Resident Quelle;

for i = 0 to (NoOfRows('Quelle'))-1;

    let vLänge_Erster = len(peek('Erster',$(i),'Quelle'));

    let vLänge_Zweiter = len(peek('Zweiter',$(i),'Quelle'));

    Trace Durchgang i:  $(i);

    Trace Länge von 'Erster': $(vLänge_Erster);

    Trace Länge von 'Zweiter': $(vLänge_Zweiter);

    

//    if vLänge_Erster >= vLänge_Zweiter    Then

//

//        Trace genommern wird Wert aus Feld:'Erster';

//          left Join (Ergebniss)

Table:

            load

            if( $(vLänge_Erster) >= $(vLänge_Zweiter),peek('Erster',$(i),'Quelle'), peek('Zweiter',$(i),'Quelle')) as BestOf,

            $(i) as i,

            peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

            Resident Ergebniss;

//

//        else

//

//        Trace genommern wird Wert aus Feld: 'Zweiter';

//

//            left Join (Ergebniss)

//

//            load

//

//            peek('Zweiter',$(i),'Quelle') as BestOf,

//

//            $(i) as i,

//

//            peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

//

//            Resident Ergebniss;

//

//    ENDIF

//

//    Trace -----------;

next

//NoConcatenate

left Join (Ergebniss)

LOAD

*

Resident Table;

DROP Table Table,Quelle;

********************************************* SCRIPT END ***********************************************

Regards,

Bhasker Kumar

3 Replies
bhasker_smu
Contributor II

Re: How to use a "left join Load with peek()" inside an if/else and for/next loop?

Hi,

please find the attached solution Qvw.

Sol.PNG

** Modified Script****

Quelle:

LOAD * INLINE [

Erster, Zweiter, Primärschlüßel

a, 22, aaa

ab, 333, bbb

abc, 4444, ccc

abcd, 4444, ddd

abcde, 4444, eee

ab, 55555, fff,

ab, 1, ggg

ab, 22, hhh

];

Ergebniss:

LOAD

Primärschlüßel as Sekundärschlüßel

Resident Quelle;

for i = 0 to (NoOfRows('Quelle'))-1;

    let vLänge_Erster = len(peek('Erster',$(i),'Quelle'));

    let vLänge_Zweiter = len(peek('Zweiter',$(i),'Quelle'));

    Trace Durchgang i:  $(i);

    Trace Länge von 'Erster': $(vLänge_Erster);

    Trace Länge von 'Zweiter': $(vLänge_Zweiter);

    

//    if vLänge_Erster >= vLänge_Zweiter    Then

//

//        Trace genommern wird Wert aus Feld:'Erster';

//          left Join (Ergebniss)

Table:

            load

            if( $(vLänge_Erster) >= $(vLänge_Zweiter),peek('Erster',$(i),'Quelle'), peek('Zweiter',$(i),'Quelle')) as BestOf,

            $(i) as i,

            peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

            Resident Ergebniss;

//

//        else

//

//        Trace genommern wird Wert aus Feld: 'Zweiter';

//

//            left Join (Ergebniss)

//

//            load

//

//            peek('Zweiter',$(i),'Quelle') as BestOf,

//

//            $(i) as i,

//

//            peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

//

//            Resident Ergebniss;

//

//    ENDIF

//

//    Trace -----------;

next

//NoConcatenate

left Join (Ergebniss)

LOAD

*

Resident Table;

DROP Table Table,Quelle;

********************************************* SCRIPT END ***********************************************

Regards,

Bhasker Kumar

expeditor
New Contributor

Re: How to use a "left join Load with peek()" inside an if/else and for/next loop?

Thank you Bhasker, that worked.

bhasker_smu
Contributor II

Re: How to use a "left join Load with peek()" inside an if/else and for/next loop?

Always welcome

Community Browser