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

Announcements
Discover how organizations are unlocking new revenue streams: Watch here
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

How to insert missing dates

I have a table with some missing days:


INPUT:

LOAD * INLINE [

Company, Day, Product, Value

Comp_1,   02.12.2014,   Product_1,  100

Comp_1,   02.12.2014,   Product_2,  100

Comp_1,   03.12.2014,   Product_1,  100

Comp_1,   03.12.2014,   Product_2,  100

Comp_1,   04.12.2014,   Product_1,  100

Comp_2,   02.12.2014,   Product_1,  200

Comp_2,   02.12.2014,   Product_2,  200

Comp_2,   04.12.2014,   Product_1,  200

Comp_2,   04.12.2014,   Product_2,  200

];


Comp_1,   04.12.2014,   Product_2

Comp_3,   03.12.2014,   Product_1

Comp_3,   03.12.2014,   Product_2

Is missing


I want to add this strings with value = 0 to my table.

How can I acheive this?

1 Solution

Accepted Solutions
MarcoWedel

QlikCommunity_Thread_144689_Pic2.JPG.jpg

INPUT:

LOAD *,

    AutoNumberHash128(Company, Day, Product) as ID

INLINE [

Company, Day, Product, Value

Comp_1,  02.12.2014,  Product_1,  100

Comp_1,  02.12.2014,  Product_2,  100

Comp_1,  03.12.2014,  Product_1,  100

Comp_1,  03.12.2014,  Product_2,  100

Comp_1,  04.12.2014,  Product_1,  100

Comp_1,  05.12.2014,  Product_1,  150

Comp_1,  06.12.2014,  Product_2,  300

Comp_2,  02.12.2014,  Product_1,  200

Comp_2,  02.12.2014,  Product_2,  200

Comp_2,  04.12.2014,  Product_1,  200

Comp_2,  04.12.2014,  Product_2,  200

];

tabTemp:

LOAD Distinct Company Resident INPUT;

Join

LOAD Distinct Day Resident INPUT;

Join

LOAD Distinct Product, 0 as Value Resident INPUT;

Concatenate (INPUT)

LOAD * Resident tabTemp

Where not Exists (ID, AutoNumberHash128(Company, Day, Product));

DROP Table tabTemp;

Left Join (INPUT)

LOAD Company,

    Max(Day) as MaxDay

Resident INPUT

Where Value > 0

Group By Company;

Right Join (INPUT)

LOAD Distinct

  Company,

  Day

Resident INPUT

Where Day <= MaxDay;

DROP Field MaxDay;

hope this helps

regards

Marco

View solution in original post

7 Replies
Anonymous
Not applicable
Author

HI Oleg,

Please elaborate more,so can help!!

Regards

Neetha

mato32188
Specialist
Specialist

Hi...

first table as you wrote

...

concatenate //autoconcatenate would be performed anyway

Load * inline [

Company, Day, Product, Value

Comp_1,04.12.2014, Product_2, 0

...

...etc.

];

BR

M

ECG line chart is the most important visualization in your life.
MarcoWedel

Hi,

one solution could be:

QlikCommunity_Thread_144689_Pic1.JPG.jpg

INPUT:

LOAD *,

     AutoNumberHash128(Company, Day, Product) as ID

INLINE [

Company, Day, Product, Value

Comp_1,   02.12.2014,   Product_1,  100

Comp_1,   02.12.2014,   Product_2,  100

Comp_1,   03.12.2014,   Product_1,  100

Comp_1,   03.12.2014,   Product_2,  100

Comp_1,   04.12.2014,   Product_1,  100

Comp_2,   02.12.2014,   Product_1,  200

Comp_2,   02.12.2014,   Product_2,  200

Comp_2,   04.12.2014,   Product_1,  200

Comp_2,   04.12.2014,   Product_2,  200

];

tabTemp:

LOAD Distinct Company Resident INPUT;

Join

LOAD Distinct Day Resident INPUT;

Join

LOAD Distinct Product, 0 as Value Resident INPUT;

Concatenate (INPUT)

LOAD * Resident tabTemp

Where not Exists (ID, AutoNumberHash128(Company, Day, Product));

DROP Table tabTemp;

hope this helps

regards

Marco

Not applicable
Author

Thank you. This is almost exactly what I'm looking for.

In case, when maximum date for "Comp_1" is 04.12.2014 and maximum date for "Comp_2" is 01.03.2013 we receive a lot of zero values for "Comp_2". Can we remove all this values that exceed the maximum date for each company?

Not applicable
Author

Thank you for your answer. But in this case I have to make a table with missing values manually. This is impossible when we have a large amount of data.

MarcoWedel

QlikCommunity_Thread_144689_Pic2.JPG.jpg

INPUT:

LOAD *,

    AutoNumberHash128(Company, Day, Product) as ID

INLINE [

Company, Day, Product, Value

Comp_1,  02.12.2014,  Product_1,  100

Comp_1,  02.12.2014,  Product_2,  100

Comp_1,  03.12.2014,  Product_1,  100

Comp_1,  03.12.2014,  Product_2,  100

Comp_1,  04.12.2014,  Product_1,  100

Comp_1,  05.12.2014,  Product_1,  150

Comp_1,  06.12.2014,  Product_2,  300

Comp_2,  02.12.2014,  Product_1,  200

Comp_2,  02.12.2014,  Product_2,  200

Comp_2,  04.12.2014,  Product_1,  200

Comp_2,  04.12.2014,  Product_2,  200

];

tabTemp:

LOAD Distinct Company Resident INPUT;

Join

LOAD Distinct Day Resident INPUT;

Join

LOAD Distinct Product, 0 as Value Resident INPUT;

Concatenate (INPUT)

LOAD * Resident tabTemp

Where not Exists (ID, AutoNumberHash128(Company, Day, Product));

DROP Table tabTemp;

Left Join (INPUT)

LOAD Company,

    Max(Day) as MaxDay

Resident INPUT

Where Value > 0

Group By Company;

Right Join (INPUT)

LOAD Distinct

  Company,

  Day

Resident INPUT

Where Day <= MaxDay;

DROP Field MaxDay;

hope this helps

regards

Marco

Not applicable
Author

It's exactly what I need. Thanks a lot.

I little bit changed the order in JOINs for better performance.

INPUT:

LOAD *,

    AutoNumberHash128(Company, Day, Product) as ID

INLINE [

Company, Day, Product, Value

Comp_1,  02.12.2014,  Product_1,  100

Comp_1,  02.12.2014,  Product_2,  100

Comp_1,  03.12.2014,  Product_1,  100

Comp_1,  03.12.2014,  Product_2,  100

Comp_1,  04.12.2014,  Product_1,  100

Comp_1,  05.12.2014,  Product_1,  150

Comp_1,  06.12.2014,  Product_2,  300

Comp_2,  02.12.2014,  Product_1,  200

Comp_2,  02.12.2014,  Product_2,  200

Comp_2,  04.12.2014,  Product_1,  200

Comp_2,  04.12.2014,  Product_2,  200

];

tabTemp:

LOAD Distinct Company Resident INPUT;

Join

LOAD Distinct Day Resident INPUT;

Join

LOAD Distinct Product, 0 as Value Resident INPUT;

     Left Join (tabTemp)

     LOAD Company, Max(Day) as MaxDay

     Resident INPUT

     Group By Company;

     Right Join (tabTemp)

     LOAD DISTICNT Company, Day

     Resident tabTemp

     Where Day <= MaxDay;

Concatenate (INPUT)

LOAD * Resident tabTemp

Where not Exists (ID, AutoNumberHash128(Company, Day, Product));

DROP Table tabTemp;

What do you think?