Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
hic
Former Employee
Former Employee

“Which products contribute to the first 80% of our turnover?”

This type of question is common in all types of business intelligence. I say “type of question” since it appears in many different forms: Sometimes it concerns products, but it can just as well concern customers, suppliers or sales people. It can really be any dimension. Further, here the question was about turnover, but it can just as well be number of support cases, or number of defect deliveries, etc. It can in principle be any additive measure.

 

It is called Pareto analysis. Sometimes also known as 80/20 analysis or ABC analysis.

 

The logic is that you first sort the products according to size, then accumulate the numbers, and finally calculate the accumulated measure as a percentage of the total. The products contributing to the first 80% are your best products; your “A” products. The next 10% are your “B” products, and the last 10% are your “C” products.

 

Pareto chart.png

 

And here’s how you do it in QlikView:

 

  1. Create a pivot table and choose your dimension and your basic measure. In my example, I use Product and Sum(Sales).

  2. Sort the chart descending by using the measure Sum(Sales) as sort expression. It is not enough just to check “Sort by Y-value”.

  3. Add a second expression to calculate the accumulated sales value:
         RangeSum(Above(Sum(Sales), 0, RowNo()))
    Call this expression Accumulated Sales. The Above() function will return an array of values – all above values in the chart – and the RangeSum() function will sum these numbers.

  4. Create a third expression from the previous one; one that calculates the accumulated sales in percent:
         RangeSum(Above(Sum(Sales), 0, RowNo())) / Sum(total Sales)
    Format it as a percentage and call it Inclusive Percentage.

  5. Create a fourth expression from the previous one; one that calculates the accumulated sales in percent, but this time excluding the current row:
          RangeSum(Above(Sum(Sales), 1, RowNo())) / Sum(total Sales)
    Format it as a percentage and call it Exclusive Percentage.

  6. Create a fifth expression for the ABC classification:
          If([Exclusive Percentage] <= 0.8, 'A', If([Exclusive Percentage] <= 0.9, 'B', 'C'))
    Call this expression Pareto Class. The reason why the Exclusive Percentage is used, is that the classification should be determined by the lower bound of a product’s segment, not the upper.

  7. Create a conditional background color, e.g.
          If([Pareto Class] = 'C', LightRed(), If([Pareto Class] = 'B', Yellow()))

 

You should now have a table similar to the following. In it you can clearly see the classification of different products.

 

Table.png

 

In this table, there are five different expressions that you can use for Pareto analysis. The graph in the beginning of this post uses Sales and Inclusive Percentage for the bars and the line, respectively; and Pareto Class for the coloring of the bars.

 

Further, you may want to combine the Pareto Class and the Exclusive Percentage into one expression:

 

     Pareto Class =
         If(RangeSum(Above(Sum(Sales),1,RowNo())) / Sum(total Sales) <= 0.8, 'A',
         If(RangeSum(Above(Sum(Sales),1,RowNo())) / Sum(total Sales) <= 0.9, 'B', 'C'))

 

Good luck in creating your Pareto chart.

 

HIC

 

Further reading related to this topic:

Recipe for an ABC Analysis

Recipe for a Pareto Analysis – Revisited

128 Comments
Not applicable

I'm also looking for a solution such as Rameen. Based on the 80-20-Analysis I want to know what number of products/customers etc. belong to Category A, B and C. Any suggestions/solutions?

0 Likes
482 Views
davdiste
Partner - Creator
Partner - Creator

thanks very much!

0 Likes
482 Views
Marcio_Campestrini
Specialist
Specialist

Henric, thanks for the information.

0 Likes
482 Views
male_carrasco
Creator
Creator

Its great!

0 Likes
482 Views
valerio_fatatis
Partner - Creator
Partner - Creator

very good example!

Great

0 Likes
482 Views
Not applicable

Thanks a lot for posting such a useful tip. I tried every thing and succeded but i am unable to set the conditional background colour. Could you please let me know where exactly i need to write the cnditional background color for A. B and C values?

0 Likes
482 Views
hic
Former Employee
Former Employee

Colors.png

0 Likes
485 Views
Not applicable

Thanks a lot for the quick reply 🙂

0 Likes
485 Views
carolin01
Luminary Alumni
Luminary Alumni

Hi,

I´m currently trying to copy this but I´m unable to adjust my formula:

I´m using a variable called vCalcTotalYear1 to usually calculate my sums.

Therefore I´m struggling with point number three. I tried to adjust my formula as follows:

RangeSum(Above(=$(=vCalcTotalYear1)), 0, RowNo()))

My question is maybe not just related to the pareto recipe. But I thought you could help me the best as you know what I´m trying to do. I appreciate very much that you shared this document with the community. This makes easy for new users to get started quickly with smart analysis.

Best regards,

Carolin

0 Likes
485 Views
hic
Former Employee
Former Employee

It depends on what you have in the variable. If it contains the text string 'Sum(Sales)' or similar, then you should use

   RangeSum(Above($(vCalcTotalYear1), 0, RowNo()))

I.e. you have two equal signs and one bracket too much in your expression.

HIC

0 Likes
485 Views