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

Loading multiple files having same structure (except for a column)

Hi everyone,

I'm loading multiple files of a folder with this method:

 

For each vFileName in Filelist ('hello_*.xlsx')

LOAD

id,

name,

address,

.

.

.

Next vFileName

 

These files have the same structure, except for one column, "phone_number": some files have this column, others not. If I put phone_number as a loaded column, I have an error. Since I can't modify source files and add phone_number column to those missing, How can i behave? Is there a syntax like: If(filename = 'hello_1', phone_number, null)?

My goal is to load phone_number column if it is already in the file, otherwise to create the phone_number column and set it to a default value for files missing it.

Thank you in advance.

13 Replies
SerSwagster
Creator
Creator
Author

Hi, I don't understand how should I load phone_number column, that is missing in some input files and so it return me the error. I'm trying to follow your method in this way:

A:
LOAD * INLINE [

id, name, address, phone_number

];

 

For each vFileName in Filelist ('hello_*.xlsx')

User:

LOAD

id,

name,

address,

phone_number

FROM
[$(vFileName)]

(ooxml, embedded labels, table is [Sheet 1]);

 

I can't reach the last step of your method because phone_number column sometimes is missing. How can I overtake this issue?

mikaelsc
Specialist
Specialist

A:
LOAD * INLINE [

id, name, address, phone_number

];

 

For each vFileName in Filelist ('hello_*.xlsx')

concatenate(A)

LOAD

*

FROM
[$(vFileName)]

(ooxml, embedded labels, table is [Sheet 1]);

 

A_Reworked: 

load 

alt(phone_number,'555-555-...')  as FinalPhoneNo,

id,

name,

address

resident A; 

drop table A;

SerSwagster
Creator
Creator
Author

Yes, it is just what i wanted!!!

One last thing: i had another field common to every sheet (that i left out in the previous messages), which is insert_date. This is the code I used for it:

date(date#( LEFT(insert_date,10) & ' ' & mid(insert_date,12,8),'YYYY-MM-DD hh:mm:ss'),'YYYY-MM-DD hh:mm:ss') as insert_date

If I insert this code in the table A_reworked, the field is not recognized as a date, while using it in a simple LOAD it works. Can you tell me why?

mikaelsc
Specialist
Specialist

no idea... maybe one occurence not exactly in that format? 

also, there's a timestamp#() function that should do what you want: 

timestamp(timestamp#(insert_date,'YYYY-MM-DD hh:mm:ss'))