万象EXCEL开发(十)excel 高级混合查询 ——东方仙盟金丹期

核心调整:把 "模板" 从 "固定统计结果" 改为 "可配置的字段 / 逻辑组件",开发人员能通过后台配置基础规则,普通用户能自由组合这些组件完成统计,既保留 Excel 的灵活性,又避免写代码。

一、核心设计:分层配置体系(开发配置层 + 用户操作层)

1. 开发配置层(后台可视化配置,无需写代码)

开发人员通过后台配置 "统计所需的基础元素",为普通用户提供可操作的 "积木块",配置项包括:

(1)字段配置(映射数据库字段,用户看不到真实 param)

配置项 说明 示例配置
字段标识 后台用的唯一 ID(如goods_name goods_name
前端显示名 普通用户看到的名称(如 "商品名称") "商品名称"
关联表 SN 该字段所属的表(可多选,适配跨表字段) 信息表 SN、进货表 SN
数据库真实字段 对应param1-param30中的某一个 信息表.param2、进货表.param2
字段类型 文本 / 数字 / 日期(用于前端适配输入框 / 选择器) 文本
是否可统计 勾选后该字段可用于 "求和 / 平均值" 等计算(仅数字类型可勾) 否(商品名称不可统计)

(2)统计规则配置(定义用户可选择的计算逻辑)

开发人员配置用户能用到的统计方式,避免用户接触复杂函数:

  • 预设计算类型:求和、平均值、最大值、最小值、计数(仅数字 / 日期类型支持)
  • 自定义计算规则(进阶):比如配置 "库存 = 进货 - 出货",后台预定义SUM(进货量)-SUM(出货量)的逻辑,前端显示为 "库存数量" 选项

(3)数据范围配置(锁死安全边界,开发提前配置)

  • 固定过滤条件:配置user_id=当前用户realm_sn=当前文件为默认不可修改的条件
  • 允许访问的表 SN 列表:配置用户可操作的表(如你的 3 个表 SN),禁止访问其他表
  • 字段权限控制:配置哪些用户组能看到哪些字段(如普通用户看不到 "供应商 ID")

2. 普通用户操作层(前台自由组合,全点击操作)

用户基于开发配置好的 "积木块",自由组合统计需求,流程如下:

步骤 1:拖拽 / 勾选 "统计指标"(对应 SQL 的 SELECT)

  • 左侧 "可选字段" 区:显示开发配置好的前端字段名(如 "商品名称""进货数量""出货数量")
  • 用户操作:
    • 想统计 "进货数量总和":勾选 "进货数量",选择计算方式 "求和"(默认)
    • 想统计 "库存":直接勾选开发配置好的 "库存数量"(后台自动对应SUM(进)-SUM(出)
  • 效果:用户无需懂公式,选字段 + 选计算方式,就对应了 SQL 中的SUM(CASE...)

步骤 2:选择 "分组维度"(对应 SQL 的 GROUP BY)

  • 右侧 "分组字段" 区:显示可用于分组的字段(开发配置时标记 "可分组" 的字段,如 "商品分类""日期")
  • 用户操作:点击 "添加分组",下拉选择 "商品分类"(前端自动对应GROUP BY param3
  • 支持多级分组:再点击 "添加分组" 选 "日期",就对应GROUP BY param3, 日期字段

步骤 3:配置 "筛选条件"(对应 SQL 的 WHERE)

  • 下方 "筛选条件" 区:
    • 字段选择:下拉选要筛选的字段(如 "日期""进货数量")
    • 条件选择:下拉选 "大于""等于""介于"(根据字段类型自动匹配可选条件,日期类型显示 "介于",文本类型显示 "包含")
    • 值输入:根据字段类型显示输入框 / 日期选择器(如日期字段显示日历,数字字段只允许输入数字)
  • 用户操作:选 "日期"→"介于"→选开始 / 结束日期,就对应WHERE 日期 BETWEEN ...

步骤 4:预览与保存(配置逻辑而非固定模板)

  • 点击 "预览":前端根据配置生成临时结果(用模拟数据或真实数据),用户确认后提交
  • 保存为 "自定义配置":用户给当前配置命名(如 "我的 1 月分类进销统计"),下次可直接调用,也可分享给同权限用户

二、底层 SQL 转化逻辑(开发配置驱动,用户无感知)

以用户配置 "统计商品分类的进货求和、出货求和、库存,筛选 1 月数据" 为例:

  1. 开发配置的映射关系(后台存储):

    • 商品分类:关联表 SN = 信息表 / 进货表,真实字段 = param3
    • 进货数量:关联表 SN = 进货表,真实字段 = param6,计算方式 = 求和
    • 出货数量:关联表 SN = 出货表,真实字段 = param6,计算方式 = 求和
    • 库存数量:预定义逻辑 = SUM (进货表.param6)-SUM (出货表.param6)
    • 日期:关联表 SN = 进货表 / 出货表,真实字段 = param4
  2. 用户配置转化为 SQL 的过程:

    • 统计指标→SELECT:根据字段配置自动生成CASE WHENSUM
    • 分组维度→GROUP BY:根据分组字段对应的真实字段生成
    • 筛选条件→WHERE:拼接用户选择的条件,加上开发配置的固定过滤条件(user_id、realm_sn、允许的 table_sn)
  3. 最终生成的 SQL(用户不可见):

sql

复制代码
SELECT
  -- 商品分类(开发配置的分组字段)
  COALESCE(MAX(CASE WHEN table_sn='信息表SN' THEN param3 END), '未知分类') AS 商品分类,
  -- 进货数量求和(用户选的字段+计算方式)
  SUM(CASE WHEN table_sn='进货表SN' THEN param6 ELSE 0 END) AS 进货数量,
  -- 出货数量求和(用户选的字段+计算方式)
  SUM(CASE WHEN table_sn='出货表SN' THEN param6 ELSE 0 END) AS 出货数量,
  -- 库存数量(开发配置的预定义逻辑)
  (SUM(CASE WHEN table_sn='进货表SN' THEN param6 ELSE 0 END) - SUM(CASE WHEN table_sn='出货表SN' THEN param6 ELSE 0 END)) AS 库存数量
FROM cwvector_fairyallience_exceltable_common_records
WHERE
  -- 开发配置的固定安全条件(用户不可修改)
  user_id = #{currentUserId}
  AND realm_sn = #{currentRealmSn}
  AND table_sn IN ('进货表SN','出货表SN','信息表SN')
  -- 用户配置的筛选条件(1月数据)
  AND (table_sn NOT IN ('进货表SN','出货表SN') OR param4 BETWEEN '2025-01-01' AND '2025-01-31')
GROUP BY param3  -- 商品分类对应的真实字段
ORDER BY 商品分类;

三、关键优势(满足 "灵活 + 可控 + 可配置")

  1. 保留 Excel 的灵活性:用户不是用固定模板,而是像在 Excel 中 "选字段、设条件、做汇总" 一样自由组合,避免功能僵化。
  2. 开发配置无需写代码:开发人员通过后台可视化配置字段、规则、权限,不用每次新增统计需求都改代码。
  3. 安全边界可控
    • 数据隔离:固定user_idrealm_sn,用户看不到其他数据。
    • 表权限:只允许访问配置好的表 SN,防止跨表查询。
    • 注入防护:用户输入的筛选值通过参数化查询传入,避免 SQL 注入。
  4. 兼顾不同用户
    • 普通用户:全点击操作,无需懂 SQL / 公式。
    • 开发 / 管理员:通过配置扩展字段和规则,支撑更多统计场景。

四、开发配置后台的核心界面(简化版)

  1. 字段配置页
    • 表格展示已配置字段,支持 "新增 / 编辑 / 删除"。
    • 新增字段时:下拉选关联表 SN、输入前端显示名、选择真实 param 字段、勾选 "可统计 / 可分组"。
  2. 规则配置页
    • 新增 "自定义计算规则":输入规则名称(如 "库存数量"),选择关联的基础字段(进货数量、出货数量),选择计算逻辑(减法)。
  3. 权限配置页
    • 按用户组配置可访问的字段和表 SN,勾选 "允许配置模板" 的用户组(如管理员)可保存公共配置供其他用户使用。

这套方案既避免了 "固定模板限制灵活性" 的问题,又通过开发配置层实现了对底层逻辑和安全边界的控制,同时让普通用户能像用 Excel 一样自由操作,开发人员也能通过配置快速扩展功能,完全匹配你 "不是做模板、而是做灵活统计工具" 的初衷

阿雪技术观

让我们积极投身于技术共享的浪潮中,不仅仅是作为受益者,更要成为贡献者。无论是分享自己的代码、撰写技术博客,还是参与开源项目的维护和改进,每一个小小的举动都可能成为推动技术进步的巨大力量

Embrace open source and sharing, witness the miracle of technological progress, and enjoy the happy times of humanity! Let's actively join the wave of technology sharing. Not only as beneficiaries, but also as contributors. Whether sharing our own code, writing technical blogs, or participating in the maintenance and improvement of open source projects, every small action may become a huge force driving technological progrss.

相关推荐
未来之窗软件服务5 小时前
从东方仙盟筑基期看 JavaScript 动态生成图片技术-东方仙盟
开发语言·javascript·仙盟创梦ide·东方仙盟·图片技术
njsgcs6 小时前
excel-mcp-server 安装
excel·mcp
未来之窗软件服务18 小时前
万象EXCEL开发(九)excel 高级混合查询 ——东方仙盟金丹期
大数据·excel·仙盟创梦ide·东方仙盟·万象excel
深耕AI应用20 小时前
元表纪基于一个Excel表实现一键发货、打印面单
excel·表格一键发货·自动打印运单·自动打印面单·自动发货
专注VB编程开发20年20 小时前
EXCEL VBA-从X行复制数据插入到Y_Z行
excel·复制数据·vba·插入数据·函数优化
小Tomkk1 天前
一个学校随机点名系统(代excel 自定义导入名字,+随机点名)
excel
未来之窗软件服务1 天前
万象EXCEL开发(十二)excel 结构化查询 ——东方仙盟金丹期
excel·仙盟创梦ide·东方仙盟·万象excel
未来之窗软件服务2 天前
操作系统应用开发(十四)RustDesk服务器配置——东方仙盟筑基期
运维·服务器·远程桌面·rustdesk·仙盟创梦ide·东方仙盟
未来之窗软件服务3 天前
操作系统应用开发(十三)RustDesk文件服务搭建——东方仙盟筑基期
rustdesk·仙盟创梦ide·东方仙盟·远程桌