一、应用背景
帕累托法则往往称为二八原理,即百分之八十的问题是百分之二十的原因所造成的。帕累托图在项目管理中主要用来找出产生大多数问题的关键原因,用来解决大多数问题。本文利用Power BI进行帕累托分析销售情况,可视化直观找出明星产品。
二、示例数据
所有产品的销售额汇总数据,包括字段产品货号、类别、零售价、销量、销售额等。
三、构建度量值
(1)帕累托图需要的度量值
销售金额 = SUM('明细'[销售额])
累计销售额 =
CALCULATE (
[销售金额],
FILTER ( ALLSELECTED( '明细'), SUM ( '明细'[销售额] ) <= [销售金额] )
)
总销售额 = CALCULATE([销售金额],ALLSELECTED('明细'))
累计占比 = divide([累计销售额],[总销售额])
80%直线 = 0.8
(2)前20%销售占比矩阵的度量值
款式数量 = CALCULATE(DISTINCTCOUNT('明细'[货号]),'明细'[销售额]>0)
20%款式数量 = round([款式数量]*0.2,0)
前20%销售额 = SUMX(TOPN([20%款式数量],ALL('明细'[货号]),[销售金额],DESC),[销售金额])
前20%销售占比 = divide([前20%销售额],[销售金额])
四、帕累托分析可视化
(1)帕累托图
货号作为共享轴
销售金额作为列值
累计占比、80%直线作为行值
(2)前20%销售占比矩阵
类别为行
款式数量、20%款式数量、销售金额、前20%销售额、前20%销售占比为值
(3)添加切片器
添加:年份、季节、性别、类别的切片器
五、重点度量值分析
累计销售额 =
CALCULATE (
[销售金额],
FILTER ( ALLSELECTED( '明细'), SUM ( '明细'[销售额] ) <= [销售金额] )
)
前面构建的度量值“累计销售额”编写时容易出错,这里分析下度量值的计算方法。
度量值的工作原理分为筛选、计算两步。程序为根据上下文、筛选器函数确定计算范围,然后再执行计算器进行计算。
比如在前面的帕累托图的第一个产品“STY0388”,度量值“累计销售额”的工作过程如下:
(1)上下文。货号作为行上下文传入度量值“累计销售额”中。
(2)计算SUM ( '明细'[销售额] )。根据行上下文货号STY0248,计算STY0248所有的销售额总和。注意SUM在这里,并不会受到calculate,filter的上下文影响。
(3)计算与SUM结果比较的 [销售金额]。循环计算所有产品的 [销售金额]。注意行上下文“货号”并没有转换成筛选上下文来计算。
(4)生成Filter后的虚拟表。第(2)、(3)步的计算结果,得出销售金额比货号 STY0248大的所有产品的虚拟表。
(5)第四步计算CALCULATE。计算Filter后的虚拟表的累加[销售金额],得出累计销售金额。
延伸:
如果原始数据,并不是产品的销售额汇总,而是订单级的销售记录清单。那么“累计销售额”的编写如下。
累计销售额1 =
CALCULATE (
[销售金额],
FILTER ( ALLSELECTED('销售明细'),
SUM ( '销售明细'[销售额] ) <=
CALCULATE([销售金额],ALLEXCEPT('销售明细','销售明细'[货号])
)
)
)
可以看出这里变化了的是与SUM进行比较的部分
CALCULATE([销售金额],ALLEXCEPT('销售明细','销售明细'[货号]))
因为这里在计算[销售金额]时,只有行上下文货号,需要使用CALCULATE将行上下文,转换成筛选上下文进行计算,才能得出该货号的所有累加销售额。