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
hic
Former Employee
Former Employee

A QlikView feature that is poorly known and brilliant in its simplicity is the Preceding Load.

 

If you don’t know what it is, then I strongly suggest that you read this blog post and find out. Because it will help you in your QlikView scripting.

 

So what is it?

 

It is a way for you to define successive transformations and filters so that you can load a table in one pass but still have several transformation steps. Basically it is a Load statement that loads from the Load/SELECT statement below.

 

Example: you have a database where your dates are stored as strings and you want to use the QlikView date functions to interpret the strings. But the QlikView date functions are not available in the SELECT statement. The solution is to put a Load statement in front of the SELECT statement: (Note the absence of “From” or “Resident”.)

 

Load Date#(OrderDate,’YYYYMMDD’) as OrderDate;
SQL SELECT OrderDate FROM … ;

 

What happens then is that the SELECT statement is evaluated first, and the result is piped into the Load statement that does the date interpretation. The fact that the SELECT statement is evaluated before the Load, is at first glance confusing, but it is not so strange. If you read a Preceding Load as

 

     Load From ( Select From ( DB_TABLE ) )

 

then it becomes clearer. Compare it with nested functions: How would you evaluate “Round( Exp( x ) )”. You would of course evaluate the Exp() function first and then the Round() function. That is, you evaluate it from right to left.

 

Input - Output.png

 

The reason is that the Exp() function is closest to the source data, and therefore should be evaluated first. It’s the same with the Preceding Load: The SELECT is closest to the source data and should therefore be evaluated first. In both cases, you can look at it as a transformation that has an input and an output and to do it correctly, you need to start with the part of the transformation closest to the input.

 

Any number of Loads can be “nested” this way. QlikView will start from the bottom and pipe record by record to the closest preceding Load, then to the next, etc. And it is almost always faster than running a second pass through the same table.

 

With preceding Load, you don’t need to have the same calculation in several places. For instance, instead of writing

 

Load  ... ,
   Age( FromDate + IterNo() – 1, BirthDate ) as Age,
   Date( FromDate + IterNo() – 1 ) as ReferenceDate
   Resident Policies
      While IterNo() <= ToDate - FromDate + 1 ;

 

where the same calculation is made for both Age and ReferenceDate, I would in real life define my ReferenceDate only once and then use it in the Age function in a Preceding Load:

 

Load  ..., ReferenceDate,
   Age( ReferenceDate, BirthDate ) as Age;
Load  *,
   Date( FromDate + IterNo() – 1 ) as ReferenceDate
   Resident Policies
      While IterNo() <= ToDate - FromDate + 1 ;

 

The Preceding Load has no disadvantages. Use it. You’ll love it.

 

HIC

96 Comments
Not applicable

Is it possible to aggregate in a preceding load ?

0 Likes
560 Views
chriscammers
Partner Ambassador
Partner Ambassador

One of the really nice features of preceding load is that you can set where clauses at each level of the load statement. This is how you would replicate the SQL "Having" clause.

Load

*

Where SomeValue > 1000;

Load

     F1,

     F2,

     Sum(F3) as SomeValue

From SomeTable

Group by

F1,

F2

560 Views
Not applicable

Thanks very helpful !

0 Likes
560 Views
Not applicable

I, too, observed this behavior that resident load is far efficient in processing time.

For now, my opinion that the best use case for applying preceding load is at something like

LOAD

(transformation steps here)

;

SQL SELECT a, b, c

FROM xxx;

This keeps script clean and manageable, i.e.the SQL part being SQL and Qlik transforming script separate.

560 Views
Not applicable

here's my problem, i have two excel files, every file has a lot of fields for example,

first file,

file 1;

load

A

B

C

D

E

FROM file1;


second file

X

H

J

G

M

N

FROM FILE 2

what i want to do is:

take the field B and the field M and make the sum.

that's all.

thank's for help

0 Likes
526 Views
rajkumarb
Creator II
Creator II

Thank You, Very Helpful

0 Likes
526 Views
naziralala
Creator
Creator

Hello Henric,

I found all the posts very helpful.

Thanks.

0 Likes
526 Views
jchoucq
Partner - Creator III
Partner - Creator III

Dear All,

preceding load is a concept i love but i don't understand the performance difference explained below.

this code

TableA:

LOAD

  *,

  Field1 & '|' & Field2& '|' & MonthStart(_KeyDate) as _KeyObj

;

LOAD

  Field1,

  ApplyMap('MapTable', _Key) as Field2,

  _KeyDate

Resident MyTable;

is much slower than

TableA:

LOAD

  Field1,

  ApplyMap('MapTable', _Key) as Field2,

  _KeyDate,

  Field1 & '|' & ApplyMap('MapTable', _Key)& '|' & MonthStart(_KeyDate) as _KeyObj

Resident MyTable;

Best regards.

Johann

0 Likes
526 Views
naziralala
Creator
Creator

Hi Johann,

I am trying to connect phpmyadmin - mysql database to qlikview using the odbc connector?

Can you assist in the steps to achieve this?

Can QVSource API connector be used to achieve this?

Thanks.

0 Likes
526 Views
stevedark
Partner Ambassador/MVP
Partner Ambassador/MVP

This is not really the place for the question, suggest asking the question elsewhere. You should be able to use the ODBC connector, and QVSource is not required. What error message are you getting? Do you have the right drivers installed? Can you connect in the Windows ODBC Admin?

Steve

0 Likes
526 Views