头图

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

01、数据源准备

假设我们有一张缺陷记录表,具体字段如下图,表名我们就保存为帕累托图。自己在表中适当的放入一些数据。

02、核心难点:构建查询

Access 的 SQL 语法不支持窗口函数(如 SUM() OVER()),因此计算“累计值”通常有两种方案:子查询或 DSum 函数。为了在查询设计器中更易维护,我们推荐分步查询法。
第一步:基础聚合先将原始数据按缺陷类型进行汇总,并按数量降序排列。
新建一个查询,查询名称为:帕累托图总计

SELECT
    缺陷,
    Sum(次数) AS 总次数
FROM
    帕累托图
GROUP BY
    缺陷
ORDER BY
    Sum(次数) DESC;

第二步:计算累计占比
这是最关键的一步。我们需要基于
计算三个指标:总数量、累计数量、累计占比。
新建一个查询,保存查询为帕累托图查询,SQL 逻辑如下:

-- 1. 计算总数量 (作为分母)
-- 2. 计算累计数量 (Running Sum)
-- 逻辑:计算所有数量大于等于当前行数量的记录之和
-- 3. 计算累计百分比
SELECT
    A.缺陷,
    A.总次数,
    (
        SELECT
            Sum(总次数)
        FROM
            帕累托图总计
    ) AS GrandTotal,
    DSum ("总次数", "帕累托图总计", "总次数 >= " & [A].[总次数]) AS RunningSum,
    Format([RunningSum] / [GrandTotal], "Percent") AS CumulativePct
FROM
    帕累托图总计 AS A
ORDER BY
    A.总次数 DESC;

运行结果:


注意:这个查询就是模拟了帕累托图的计算。这个数据源就可以放到老式的图表中了,但这里我们是用新式图表,不需要这个查询,我们接着往下。

03、新建图表控件

还是一样,我创建一个新的窗体,在窗体上放置一下新的图表控件。

04、添加数据源

到这里我们就可以来添加数据源了,具体如下图:

注:我们这里的数据源用的是第一个查询,不要添加错了。

05、运行

最后,我们运行看一下效果。

OK,到这步你就完成了一个完美的帕累托图。在 Access 中开发帕累托图,本质上是 SQL 数据处理能力 与 可视化能力 的结合。

喜欢这篇文章吗?欢迎点赞、在看、转发,让更多 Access 爱好者看到!


access开发
1 声望4 粉丝

微软最有价值专家MVP