时序更替,岁物丰成。
柏拉图是一种用于展示各分类累计百分比之和的可视化图表。它其实是折线图与条形图的组合图,特点是将各分类的百分比按从大到小排序,可以直观的展示随着类别的增加时的累计百分比情况。
柏拉图非常适合用来突出显示一组数据中的最大因素,一般关注构成前 80% 占比的类别。柏拉图是基本的质量管理控制的工具之一。
类别降序排序和百分比累计是该图最大的特征。我们以人员离职原因调查数据为例,展示如何在 Power BI 中计算制作柏拉图需要的累计百分比。
此例中求累计百分比主要思路是:用所有类别的百分比累计总和减去小于所在行的百分比之和。只要能准确理解 M 及 DAX 中的上下文概念就能通过自定义列求解。
一、Power Query 自定义列
将数据加载到 PQ 以后,可以使用新增自定义列的方法计算累计百分比。像这种复杂的计算在界面中是没有相应功能的,需要用到 M 函数。
添加自定义列,输入以下 M 代码:
自定义列中 List.Sum(重命名的列[占比]) 计算的是所有类别的百分比之和。
{ } 代表列表,列表中第二个数值求的是小于当前行的占比之和。「_[占比]」代表当前行的百分比,因为添加列是逐行计算的,所以这里就涉及到计算上下文的理解了。
代码中我们使用Table.SelectRows 函数来筛选行。而 (x) => x[占比]
通过以上自定义列计算的累计占比数据如下。离职原因「家中有事」的累积占比数值计算过程为所有类别的占比之和减去除矿工解除以外的百分比之和。
M 函数解法中用了较多的 M 函数知识,理解它你需要知道 M 函数的上下文概念、M 语言的数据结构 List、M 函数 List.Sum、 Table.SelectRows 等。
我们可以来看看 DAX 函数解法,对比学习更容易掌握。
二、DAX 计算列
使用 DAX 计算列计算,原理是一致的。在每一行中计算出所有类别占比总和,减去小于当前行的占比之和。
在 DAX 中获取当前行的方法有 2 种,使用 VAR 定义变量或者使用 EARLIER 函数。
VAR 计算法:
EARLIER 函数法:
在 DAX 中筛选的过程更加明显易懂,使用 FILTER 函数筛选占比小于当前行的所有占比然后求和。在 DAX 中模拟筛选可以结合 VAR 及 FILTER 函数。
先使用 VAR 获取当前行的值。使用 VAR 定义变量时,建议定义变量名时使用 Cur ** 的格式,Cur 是英文 Current的缩写,表示当前。
财会商务图表应用之工资统计、固定资产分析与成本分析图
财务会计领域商务图表设计分享之试算平衡、账龄分析与财务预算
这 20 个财经杂志的图表告诉你好看的图表设计到底能有多美