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

Announcements
Independent validation for trusted, AI-ready data integration. See why IDC named Qlik a Leader: Read the Excerpt!
cancel
Showing results for 
Search instead for 
Did you mean: 
Navars
Creator
Creator

populate the data for missing years

Hello Everyone,

i have a requirement like, i have 6 years data in that couple of years data not there, for missing years data need to populate the average of other years data.

data is like below , here 2015 and 2018 are missing for that two years i need to populate the sales as 300 (average of remaining Years sales)

Year, sales
2020,100
2019,200
2017,300
2016,400
2014,500

Thanks in Advance...

Labels (1)
1 Solution

Accepted Solutions
stevejoyce
Specialist II
Specialist II

Try this:

 

 

data:
load * inline [
Year, sales
2020,100
2019,200
2017,300
2016,400
2014,500
]
;

//get average of all years and store in variable
data_avg_sales:
load avg(sales) as avg_sales
resident data;

let vavgsales = peek('avg_sales', 0, 'data_avg_sales');


//get min max years to fill in all years
data_min_max_year:
load max(Year) as maxYear
,min(Year) as minYear
resident data
;

 

let vmaxyear = peek('maxYear', 0, 'data_min_max_year');
let vminyear = peek('minYear', 0, 'data_min_max_year');


all_years:
load
$(vminyear) + rowno() as Year_all
autogenerate($(vmaxyear) - $(vminyear));


//for missing years, set sales to average sales
concatenate(data)
load
$(vavgsales) as sales,
Year_all as Year
resident all_years
where not exists(Year ,Year_all)
;

//cleanup
drop tables all_years, data_min_max_year, data_avg_sales;

exit script;

View solution in original post

1 Reply
stevejoyce
Specialist II
Specialist II

Try this:

 

 

data:
load * inline [
Year, sales
2020,100
2019,200
2017,300
2016,400
2014,500
]
;

//get average of all years and store in variable
data_avg_sales:
load avg(sales) as avg_sales
resident data;

let vavgsales = peek('avg_sales', 0, 'data_avg_sales');


//get min max years to fill in all years
data_min_max_year:
load max(Year) as maxYear
,min(Year) as minYear
resident data
;

 

let vmaxyear = peek('maxYear', 0, 'data_min_max_year');
let vminyear = peek('minYear', 0, 'data_min_max_year');


all_years:
load
$(vminyear) + rowno() as Year_all
autogenerate($(vmaxyear) - $(vminyear));


//for missing years, set sales to average sales
concatenate(data)
load
$(vavgsales) as sales,
Year_all as Year
resident all_years
where not exists(Year ,Year_all)
;

//cleanup
drop tables all_years, data_min_max_year, data_avg_sales;

exit script;