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

Announcements
Join us in Bucharest on Sept 18th for Qlik's AI Reality Tour! Register Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Product not exists - add manual values zero

I have table

table1:

LOAD * INLINE [

month,rep,sales,product

Jan ,101,3000,p1

Jan,102,2340,p1

Jan,103,2450,p2

Jan,103,1200,p1

Jan,101,1211,p2

Jan,103,1111,p2

feb,102,5000,p1

feb,103,4000,p2

feb,102,2000,p3

feb,103,6543,p1

March,101,2310,p1

March,103,1200,p2

];

Rep 101 does not sell anything on month of Feb.

I have a list of products

p1,p2,p3,p4,p5

I want to add the product p1,p2,p3,p4,p5 value 0 for feb for Rep 101 and

March rep 101 already has sold product p1 -but I want to add p2,p3,p4,p5 for sales 0 for March.

I have millions of records. Looping will kill my performance  for comparing the products.

Please advice is there any better way to handle this situations.

6 Replies
Clever_Anjos
Employee
Employee

We should verify  the performance:

tab:

LOAD * INLINE [

month,rep,sales,product

Jan ,101,3000,p1

Jan,102,2340,p1

Jan,103,2450,p2

Jan,103,1200,p1

Jan,101,1211,p2

Jan,103,1111,p2

feb,102,5000,p1

feb,103,4000,p2

feb,102,2000,p3

feb,103,6543,p1

March,101,2310,p1

March,103,1200,p2

];

// a table with all months, all products, all reps

t:

     load Distinct month Resident tab;

join load Distinct rep   Resident tab;

join load Distinct product Resident tab;

Concatenate(tab)

load *, 0 as sales Resident t;

drop Table t;

Anonymous
Not applicable
Author

Are you sure you need all these 0's?  See how a pivot table may look like just with your sample data, zeroes are there:

petter
Partner - Champion III
Partner - Champion III

This should work in a load script:

table1:

LOAD

   AutoNumber( month & '|' & product & '|' & rep ) AS %Key,

   *

INLINE [

month,rep,sales,product

Jan ,101,3000,p1

Jan,102,2340,p1

Jan,103,2450,p2

Jan,103,1200,p1

Jan,101,1211,p2

Jan,103,1111,p2

feb,102,5000,p1

feb,103,4000,p2

feb,102,2000,p3

feb,103,6543,p1

March,101,2310,p1

March,103,1200,p2

];

Products:

LOAD DISTINCT

  product

RESIDENT

  table1;

Months:

LOAD DISTINCT

  month

RESIDENT

  table1;

Reps:

LOAD DISTINCT

    rep

RESIDENT

    table1;

   

nProds = NoOfRows('Products');

nMonths = NoOfRows('Months');

nReps = NoOfRows('Reps');

LOAD

  *

WHERE Not( Exists( %Key ));

LOAD

  AutoNumber(month & '|' & product & '|' & Peek(rep,IterNo()-1,'Reps')) AS %Key,

  month,

  product,

  Peek(rep,IterNo()-1,'Reps') AS rep,

  0 AS sales

WHILE IterNo()<=$(nReps);

LOAD

  month,

  Peek(product,IterNo()-1,'Products') AS product

WHILE IterNo()<=$(nProds);   

LOAD

  Peek(month,RecNo()-1,'Months') AS month

AUTOGENERATE

  $(nMonths);

// IF NOT NEEDED DROP THE HELPER TABLES...

DROP TABLES Products, Months, Reps;

Anonymous
Not applicable
Author

One more version, rather simple script additions, no loops, to make dimension selections mutually independent, so you can see more 0's

petter
Partner - Champion III
Partner - Champion III

that's how it should be done

Anonymous
Not applicable
Author