数据可视化之PowerQuery篇(十一)使用Power BI进行动态帕累托分析

https://zhuanlan.zhihu.com/p/57763423

上篇文章介绍了帕累托图的用处以及如何制作一个简单的帕累托图,在 PowerBI 中可以很方便的生成,但若仅止于此,并不足以体现 PowerBI 的强大。现实中的分析很多数据维度交织在一起,若要一个一个的生成帕累托图进行分析,就显得太繁臃和低级。

通过简单的点击交互,就能进行动态分析发现见解,才是我们需要的,恰好这也是 PowerBI 所擅长的。

就帕累托分析来说,能从不同的角度快速发现关键因素、以及可以动态设定关键因素的阈值,就是我们需要的。本文通过一个示例来看看如何生成一个动态的帕累托图,先看看最终效果,

 

这样分析是不是很简单,下面就来看看是如何制作的。

数据为虚拟的某连锁店的电子产品销售明细,以及与之关联的产品和销售地点维度,和一个对应的日期表,建立关系图如下,

 

要分析的维度:

1,时间维度:年份

2,财务指标:收入和利润

3,销售细分:按地区和产品明细


 

时间维度

 

年度指标比较简单,销售明细表中有日期数据,直接根据日期表中的年度创建一个切片器就行了。

财务指标

先建两个度量值:

 

收入 = SUM('销售明细'[销售额])
利润贡献 = SUM('销售明细'[毛利])

 

然后在PowerBI Desktop中新建表,只有一个字段[财务指标],数据为收入和利润,

 

按字段[财务指标]制作切片器,然后写度量值[指标数据],

 

指标数据 =
SWITCH(TRUE(),
SELECTEDVALUE('财务指标'[财务指标])="收入",[收入],
SELECTEDVALUE('财务指标'[财务指标])="利润",[利润贡献],
BLANK()
)

 

该度量值判断切片器的选择,如果选择的是收入,就汇总收入数据;如果选择的是利润,就汇总利润。

 

产品和地区维度

 

同上面的思路类似,把产品明细和地区明细整合到一起,如下图,

 

如果数据量很小,手工整理也很快,不过在这里依然可以用DAX实现,在【建模】选项卡下,点击"新表"(参考:PowerBI Desktop中新建表的使用场景),在编辑栏输入:

 

分析维度 =
VAR item1 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '城市'[城市] ) , "分析维度" , "地区" ) , "分析维度" , [分析维度],"维度明细",[城市] )
VAR item2 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '产品明细'[产品名称]) , "分析维度" , "产品" ) ,"分析维度" , [分析维度], "维度明细" , [产品名称] )
RETURN UNION( item1 , item2 )

然后上图中的表格就生成了,根据该表的字段[分析维度]创建切片器。

至此,三个分析维度已经建立完成,并体现在报表左侧的三个切片器上。

 

 


 

制作帕累托图

步骤和上一篇文章类似,只是由于分析维度更多,需要更细化的处理。各个切片器之间要相互配合,考虑上下文的影响,以下的DAX公式稍微长一点,需要根据每个函数慢慢理解,按照这个实例学习这些函数其实也是个不错的方式。

将【折线和簇状柱形图】拖到画布上,将前面创建的分析维度表中的[维度明细]拖入到共享轴。

创建度量值[分析数据]拖入到列值框中,

 

分析数据 =
VAR item3=TREATAS( VALUES('分析维度'[维度明细]),'城市'[城市])
VAR item4=TREATAS(VALUES('分析维度'[维度明细]),'产品明细'[产品名称])
RETURN
SWITCH(TRUE(),
SELECTEDVALUE('分析维度'[分析维度])="地区",
CALCULATE([指标数据],item3),
SELECTEDVALUE('分析维度'[分析维度])="产品",
CALCULATE([指标数据],item4),
BLANK()
)

 

下一步就是获得累计占比的数据,创建度量值如下,

 

分析数据合计 =
SWITCH(TRUE(),
SELECTEDVALUE('财务指标'[财务指标])="收入",
CALCULATE([收入],ALLSELECTED('销售明细'[销售额])),
SELECTEDVALUE('财务指标'[财务指标])="利润",
CALCULATE([利润贡献],ALLSELECTED('销售明细'[毛利])),
BLANK()
)

 

数据占比 = DIVIDE([分析数据],[分析数据合计])

 

累计占比 =
VAR cur_rate=[数据占比]
RETURN
CALCULATE([数据占比],FILTER(ALL('分析维度'[维度明细]),[数据占比]>=cur_rate))

 

将[累计占比]拖入到列值框中,帕累托图就制作好了,


 

ABC比例设置

 

帕累托分析也成为ABC分析,一般按照70%、20%和10%的比例来划分,或者按照二八定律的80%和20%划分,当然这些都是一个概数而已,并不是一定要这样划分,实际分析时还要根据情况自行调整。

在【建模】选项卡下,点击"新建参数"(参考:创建PowerBI「参数」轻松搞定动态分析),建立三个参数如下:

 

参数a = GENERATESERIES(1, 100, 1)
参数b = GENERATESERIES(0, 100, 1)
参数c = GENERATESERIES(0, 100, 1)

 

同时生成三个切片器,通过这三个切片器来控制这三个参数的数值大小,然后就可以计算出每一类的相对占比,

 

A类比例 = DIVIDE([参数a值],[参数a值]+[参数b值]+[参数c值])
B类比例 = DIVIDE([参数b值],[参数a值]+[参数b值]+[参数c值])
C类比例 = DIVIDE([参数c值],[参数a值]+[参数b值]+[参数c值])

 

利用这三个度量值生成一个环形图,这样动态的ABC比例就设计好了,

 

 

判断因素的所属分类

建立度量值,

数据所属分类 =
VAR cur_leji=[累计占比]
RETURN
SWITCH(TRUE(),
cur_leji<=[A类比例],"A",
cur_leji<=[A类比例]+[B类比例],"B",
"C"
)

 

至此该模型的技术操作完成,剩下的就是一些可视化方面的修饰、格式调整等,以及按照ABC的分类动态配色。

该帕累托模型在主要的分析维度上都已考虑到,可以在实际分析中进行分解套用。

 

总结:

进行动态帕累托分析的主要步骤:

1,整理需要分析的维度

2,设置ABC比例参数

3,创建指标数据和累计比例

 

原文地址:https://www.cnblogs.com/qiu-hua/p/12855296.html