查看原文
其他

用PowerBI进行帕累托分析有多简单?

采悟 PowerBI星球 2022-12-17


上篇文章介绍了帕累托图的用处以及如何制作一个简单的帕累托图,在 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"
    )


效果如下,




至此该模型的技术操作完成,剩下的就是一些可视化方面的修饰、格式调整等,这里做的模型也还有许多待完善之处,但帕累托分析的主要方面都已考虑到,可以在实际分析中进行分解套用。


总结:

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

1,整理需要分析的维度

2,设置ABC比例参数

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


本文报表地址链接:http://t.cn/EA53lle,也可以点击阅读原文查看。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存