hi,大家好!
今天,我们接着来讲新式图表!
在工业控制、质量管理(QC)及 ERP 系统开发中,帕累托图(Pareto Chart)是必不可少的分析工具。
虽然 Excel 制作帕累托图很方便,但在 Access 开发的业务系统中,我们需要图表能动态响应数据库的变化(如按日期筛选、按产线过滤),而无需人工干预。
本文将从SQL 数据处理和图表控件配置两个核心维度,详细拆解如何在 Access 中实现动态帕累托图。
什么是帕累托图?
帕累托图(Pareto Chart),又叫排列图或主次图,是一种将柱状图和折线图结合在一起的统计图表。
它是质量管理(QC)七大手法之一,核心目的是为了“抓主要矛盾”。
帕累托图基于著名的“二八法则”(80/20 Rule):80% 的结果通常源于 20% 的原因。
它由两部分组成:
柱状图:按频率降序排列,展示每个问题的大小。
折线图:展示累计百分比,帮助你找到那“关键的少数”。
今天我将从SQL 数据处理和图表控件配置两个核心维度,详细拆解如何在 Access 中实现动态帕累托图。
假设我们有一张缺陷记录表,具体字段如下图,表名我们就保存为帕累托图。自己在表中适当的放入一些数据。


Access 的 SQL 语法不支持窗口函数(如 SUM() OVER()),因此计算“累计值”通常有两种方案:子查询或 DSum 函数。为了在查询设计器中更易维护,我们推荐分步查询法。
第一步:基础聚合
先将原始数据按缺陷类型进行汇总,并按数量降序排列。新建一个查询,查询名称为:帕累托图总计
SELECT缺陷,Sum(次数) AS 总次数FROM帕累托图GROUPBY缺陷ORDERBYSum(次数) DESC;
第二步:计算累计占比
这是最关键的一步。我们需要基于帕累托图总计查询, 计算三个指标:总数量、累计数量、累计占比。
新建一个查询,保存查询为帕累托图查询,SQL 逻辑如下:
-- 1. 计算总数量 (作为分母)-- 2. 计算累计数量 (Running Sum)-- 逻辑:计算所有数量大于等于当前行数量的记录之和-- 3. 计算累计百分比SELECTA.缺陷,A.总次数,(SELECTSum(总次数)FROM帕累托图总计) AS GrandTotal,DSum ("总次数", "帕累托图总计", "总次数 >= " & [A].[总次数]) AS RunningSum,Format([RunningSum] / [GrandTotal], "Percent") AS CumulativePctFROM帕累托图总计 AS AORDERBYA.总次数 DESC;
运行结果:

注意:这个查询就是模拟了帕累托图的计算。这个数据源就可以放到老式的图表中了,但这里我们是用新式图表,不需要这个查询,我们接着往下。
还是一样,我创建一个新的窗体,在窗体上放置一下新的图表控件。
到这里我们就可以来添加数据源了,具体如下图:

注:我们这里的数据源用的是第一个查询,不要添加错了。
最后,我们运行看一下效果。

OK,到这步你就完成了一个完美的帕累托图。
在 Access 中开发帕累托图,本质上是 SQL 数据处理能力 与 可视化能力 的结合。
喜欢这篇文章吗?欢迎点赞、在看、转发,让更多 Access 爱好者看到!

