帕累托图(Pareto chart)是将出现的质量问题和质量改进项目按照重要程度依次排列而采用的一种图表。以意大利经济学家V.Pareto的名字而命名的。帕累托图又叫排列图、主次图,是按照发生频率大小顺序绘制的直方图,表示有多少结果是由已确认类型或范畴的原因所造成。
帕累托法则往往称为二八原理,即百分之八十的问题是百分之二十的原因所造成的。帕累托图在项目管理中主要用来找出产生大多数问题的关键原因,用来解决大多数问题。
在帕累托图中,不同类别的数据根据其频率降序排列的,并在同一张图中画出累积百分比图。
帕累托法用双直角坐标系表示,左边纵坐标表示频数,右边纵坐标表示频率。分析线表示累积频率,横坐标表示影响质量的各项因素。
目录
动态帕累托图制作
准备数据
确定横纵坐标轴维度
制作切片器
时间维度切片器
纵坐标切片器制作
横坐标切片器制作
制作帕累托图
获得累计占比的数据
ABC比例设置
为了省事,直接照了一份数据
Ps,只为了学习,只考虑制作问题,不考虑实际分析问题。
横坐标:投放位置,投放类型,投放素材
纵坐标:消耗、激活量、LTV
横纵坐标、时间维度切片器
表中有激活日期,直接搞。错了不负责哈。
纵坐标:消耗、激活量、LTV
首先制作度量值。喜欢把度量值放到一个表,先“输入数据”创建一个度量值的表。
创建度量值,创建后删除列1
消耗 = SUM('渠道每日消耗'[消耗])
激活量=SUM('激活量、留存率'[激活量]
LTV = SUM('激活量、留存率'[LTV])
制作切片器,可以看到只有一个选项,所以需要先建立一张表,把三个选项放进去。
按字段[数据指标]制作切片器,然后写度量值[数据数据],让筛选器生效
数据指标 =
SWITCH(TRUE(),
SELECTEDVALUE('数据指标'[数据指标])="消耗",[消耗],
SELECTEDVALUE('数据指标'[数据指标])="激活量",[激活量],
SELECTEDVALUE('数据指标'[数据指标])="LTV",[LTV],
BLANK()
)
SWITHCH函数:如果消耗被选中,则返回度量值[[消耗];
如果激活量被选中,则返回[激活量];
如果LTV被选中,则返回[LTV];
使用函数说明
SWITCH
释义:针对值列表计算表达式,并返回多个可能的结果表达式之一
语法:SWITCH(表达式,值,结果[,值,结果]…[,此外])
参数:
- 第一参数:返回单个标量值的任何 DAX 表达式,其中,表达式将被计算多次(针对每行/上下文)
- 第二参数:与表达式的结果相匹配的常量值
- 第三参数:当表达式的结果与对应的值匹配时,要进行计算的任何标量表达式
- 第四参数:如果表达式的结果与任何值参数都不匹配,要进行计算的任何标量表达式
备注:
- 所有满足表达式的返回结果必须为同一数据类型
- 当存在多条件判断时,SWITCH函数比IF函数更加简洁明了
SELECTEDVALUE
SELECTEDVALUE函数属于“筛选”类函数,隶属于“表函数”。
微软官方介绍是这么说的:
当指定列当前上下文中只有一个非重复值时,返回该值;
否则返回替代结果,省略则返回空值;
通俗点来说,就是根据当前上下文匹配相关值。
用途:通常用于度量值中,获取外部筛选器。
语法:SELECTEDVALUE(<列>[, <备用值>])
参数:
列:固定现有列,不能是表达式;
备用值:可选项,如果第一参数上下文判定为空,或者出现多个重复值时,返回备用值;默认不填返回结果为空。
横坐标:投放位置,投放类型,投放素材
同上面的思路类似,把投放位置、投放类型、投放素材整合到一起,如下图。
数据量小,可以手工输入;数据量大采用DAX实现,在【建模】选项卡下,点击"新表"
在编辑栏输入:
分析维度 =
VAR item1 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '渠道维度'[投放位置] ) , "分析维度" , "投放位置" ) , "分析维度" , [分析维度],"维度明细",[投放位置] )
VAR item2 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '渠道维度'[投放类型] ) , "分析维度" , "投放类型" ) , "分析维度" , [分析维度],"维度明细",[投放类型] )
VAR item3 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '渠道维度'[投放素材] ) , "分析维度" , "投放素材" ) , "分析维度" , [分析维度],"维度明细",[投放素材] )
RETURN UNION( item1 , item2,item3 )
ADDCOLUMNS( DISTINCT( '渠道维度'[投放位置] ) , "分析维度" , "投放位置" ):去重提取渠道维度表中的投放位置字段内容,另增一列,列名为分析维度,列值为投放位置
使用函数说明
VAR
作用:将某个函数的结果存储成为一个参数,供其他函数使用。
- 通过VAR变量的语法,从而能够代替DAX中的筛选条件,做到简化DAX代码;
- 通过VAR变量命名,创建定义一张虚拟的列表或表;
- 通过VAR变量命名,定义需要的值列表,并分别放置于“不同的计算筛选环境"里来构建DAX的一个个逻辑条件(类似于EARLIER()函数的“当前行”),然后将这些条件按条件步骤组装成一个复杂的计算逻辑条件。
语法:VAR
= 参数:
name处定义变量名,要求格式为:
- 支持英文字母和数字组合,但是不能以数字开头。
- 除了可以使用双下划线“__”作为前缀以为,不支持使用其他的特殊字符,包括空格。
- 不能跟内置函数名重复;
不能跟已存在的表同名,但是可以跟原始列重名。
expression处填写用来生成变量值的函数。
SELECTCOLUMN
释义:以表的形式返回所有指定的计算列
语法:SELECTCOLUMNS(表 或 表达式返回的表, 列名,表达式,[列名,表达式…])
参数:
- 第一参数:表 或 表达式返回的表
- 第二能数:自定义的列名,需要用双引号包起来
- 第三参数:返回标量值dax表达式
备注:
- 返回的表仅包含新生成的列,不包含原始第一参数中的列(即从空表开始添加列)
- 通过表达式派生出的新列数据以第一参数表的行上下文为依据进行计算
- 若表达式所直接引用的列为第一参数表中的列,则具备与第一参数对应列相同的数据沿袭
- 返回的表不具有第一参数表所自带的扩展表属性
ADDCOLUMNS
释义:将计算列添加到给定的表或表表达式
语法:ADDCOLUMNS(表 或 表达式返回的表, 列名,表达式,[列名,表达式…])
参数:
- 第一参数:需要添加新列的表
- 第二能数:可重复,要添加的新列的名称
- 第三参数:表达式:可重复,要添加的新列的表达式
备注:
- 第一参数的表或表的表达式存在数据沿袭
- 通过表达式派生出的新列数据以第一参数表的行上下文为依据进行计算
- 通过表达式派生出的新列不具备数据沿袭
- 返回的表具有第一参数表所自带的扩展表属性
ADDCOLUMNS与SELECTCOLUMNS区别
- ADDCOLUMNS在原表上新增一列
- SELECTCOLUMNS在空白表上去新增一列(获取别的表或表的表达式的数据,然后在空白表上新增列)
建立分析维度切片器
接下来,需要将中间表关联到最原始的表中,让切片器生效。
分析数据 =
VAR item4=TREATAS( VALUES('分析维度'[维度明细]),'渠道维度'[投放位置])
VAR item5=TREATAS(VALUES('分析维度'[维度明细]),'渠道维度'[投放类型])
VAR item6=TREATAS(VALUES('分析维度'[维度明细]),'渠道维度'[投放素材])
RETURN
SWITCH(TRUE(),
SELECTEDVALUE('分析维度'[分析维度])="投放位置",
CALCULATE([数据指标],item4),
SELECTEDVALUE('分析维度'[分析维度])="投放类型",
CALCULATE([数据指标],item5),
SELECTEDVALUE('分析维度'[分析维度])="投放素材",
CALCULATE([数据指标],item6),
BLANK()
)
使用函数说明
VALUES
释义:VALUES函数,隶属于“筛选”类函数。当参数为列时,返回结果会去除重复值,保留空项;当参数为表时,结果不会进行去重复操作。
用途:适用于度量值计算。
语法:VALUES(表or列)
参数:VALUES函数的参数可以是列,也可以是表,但不能是表达式。
返回结果:去除重复值的列或者返回一个完整的表。当表为单列单行时,可以作为值使用。
TREATAS
释义:
TREATAS()函数是DAX中用于表格间虚拟连接的函数,当遇到如下情况时,可以考虑使用TREATAS:
- 维度表或事实表之间没有可以单独关联的列;
- 出现多对多或其他无法使用直接的方法关联的情况
- 数据模型非常复杂时,通过建立虚拟关系以减少对表格之间物理连接的依赖
至此,三个分析维度已经建立完成,并体现在报表左侧的三个切片器上。
将【折线和簇状柱形图】拖到画布上,将前面创建的分析维度表中的[维度明细]拖入到共享轴、度量值[分析数据]拖入到列值。
分析数据合计 =
SWITCH(TRUE(),
SELECTEDVALUE('数据指标'[数据指标])="消耗",
CALCULATE([消耗],ALLSELECTED('渠道每日消耗'[消耗])),
SELECTEDVALUE('数据指标'[数据指标])="激活量",
CALCULATE([激活量],ALLSELECTED('激活量、留存率'[激活量])),
SELECTEDVALUE('数据指标'[数据指标])="LTV",
CALCULATE([LTV],ALLSELECTED('激活量、留存率'[LTV])),
BLANK()
)
数据占比 = DIVIDE([分析数据],[分析数据合计])
累计占比 =
VAR cur_rate=[数据占比]
RETURN
CALCULATE([数据占比],FILTER(ALL('分析维度'[维度明细]),[数据占比]>=cur_rate))
将度量值[累计占比]拖入到列值框中,帕累托图就制作好了,。
帕累托分析也成为ABC分析,一般按照70%、20%和10%的比例来划分,或者按照二八定律的80%和20%划分,当然这些都是一个概数而已,并不是一定要这样划分,实际分析时还要根据情况自行调整。
建个【矩阵】,把数值显示出来。
在【建模】选项卡下,点击"新建参数",建立三个参数如下:
参数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值])
数据所属分类 =VAR cur_leji=[累计占比]
RETURN
SWITCH(TRUE(),
cur_leji<=[A类比例],"A",
cur_leji<=[A类比例]+[B类比例],"B",
"C"
)
利用A类比例、B类比例、C类比例,创建环形图。
将数据所属分类放入矩阵。
支持动态帕累托图制作完成,abc三个参数影响矩阵、环形图。激活日期、数据指标、分析维度影响折线和簇状柱形图、矩阵。
可根据按照ABC的分类动态配色,实现后,abc也将会影响折线和簇状柱形图。