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

Announcements
Qlik Open Lakehouse is Now Generally Available! Discover the key highlights and partner resources here.
cancel
Showing results for 
Search instead for 
Did you mean: 
chriys1337
Creator III
Creator III

Max In Date with a group by in load script

Hi,

I want to find the maximum Date for each Customer (Code) on a specific route (From, To).

Unfortunately the debugger is throwing out an "Invalid Expression" - error.

I don't know what is wrong with my script, any ideas? Thx a lot ! ! ! !

main:
LOAD * INLINE [
Customer, Code, From, To, In, Out, Revenue
DHL, DHL001, Asia, Europe, 201701, 201705, 10
DHL, DHL001, Asia, Europe, 201706, 201710, 20
DHL, DHL001, Africa, Europe, 201707, 201720, 1
HSBC, HSBC002, Asia, Europe, 201708, 201710, 22
]
;

main2:
NoConcatenate Load *, max(In) as Max_In_Date Resident main group by Code, From, To;

Drop Table main;
!

6 Replies
srivastalans
Partner - Contributor III
Partner - Contributor III

Hi,

In main2, Remove * and load only required fields in group by


main2:
NoConcatenate Load Code, From, To, max(In) as Max_In_Date Resident main group by Code, From, To;


Instead of


main2:
NoConcatenate Load *, max(In) as Max_In_Date Resident main group by Code, From, To;

avinashelite

You cannot use the * on the grouping table...and you need to mention the specific filed names on which you need the grouping

antoniotiman
Master III
Master III

Try this

main:
LOAD * INLINE [
Customer, Code, From, To, In, Out, Revenue
DHL, DHL001, Asia, Europe, 201701, 201705, 10
DHL, DHL001, Asia, Europe, 201706, 201710, 20
DHL, DHL001, Africa, Europe, 201707, 201720, 1
HSBC, HSBC002, Asia, Europe, 201708, 201710, 22
]
;
Left Join
Load Code,From,To,max(In) as Max_In_Date Resident main group by Code, From, To
;

sunny_talwar

Here is another way and may work better with large dataset

main:

LOAD AutoNumber(Code&From&To) as Key,

*;

LOAD * INLINE [

    Customer, Code, From, To, In, Out, Revenue

    DHL, DHL001, Asia, Europe, 201701, 201705, 10

    DHL, DHL001, Asia, Europe, 201706, 201710, 20

    DHL, DHL001, Africa, Europe, 201707, 201720, 1

    HSBC, HSBC002, Asia, Europe, 201708, 201710, 22

];

main2:

LOAD *,

If(Key = Previous(Key), Peek('Max_In_Date'), In) as Max_In_Date

Resident main

Order By Key, In desc;

Drop Table main;

chriys1337
Creator III
Creator III
Author

Hi Sunny,

it seem to work, two questions:

If(Key = Previous(Key), Peek('Max_In_Date'), In) as Max_In_Date

What is this doing?

Where do you have this Peek('Max_In_Date') from? Its not obvious for me.

Thx a lot,



Chris

sunny_talwar

1) If Key is equal to Key in the previous row, then Peek the value of Max_In_Date from previous row... if not, then use In

2) Peek() function is unique in a sense that it can be used in the table where it is getting created... so although Max_In_Date doesn't exists before.... it can still be used within the Peek() function of the same load. the reason to use this is that as a row get populated, peek can look at the newly created value in the previous row.