文章目录
-
- 前言
- 一、需求描述
-
- [1.1 核心功能点](#1.1 核心功能点)
- [1.2 技术实现建议](#1.2 技术实现建议)
- 二、技术要点
-
- [2.1 配置数据库连接](#2.1 配置数据库连接)
- [2.2 查询参数](#2.2 查询参数)
- [2.3 模板数据集](#2.3 模板数据集)
- [2.4 查询参数](#2.4 查询参数)
- 三、解决方案
-
- [3.1 下拉框数据源(不含参数)](#3.1 下拉框数据源(不含参数))
- [3.2 下拉框数据源(含参数)](#3.2 下拉框数据源(含参数))
- [3.3 分组行数据源(动态)](#3.3 分组行数据源(动态))
- [3.4 汇总列数据源(动态)](#3.4 汇总列数据源(动态))
- [3.5 下拉框绑定数据源](#3.5 下拉框绑定数据源)
- [3.6 数据区绑定行数据源](#3.6 数据区绑定行数据源)
- [3.7 数据区绑定列数据源](#3.7 数据区绑定列数据源)
- [3.8 数据区总计字段](#3.8 数据区总计字段)
- 四、效果展示
前言
【帆软FineReport】 聚焦企业级数据可视化与报表开发。本专栏深入解析 FineReport 与 FineBI 核心技巧,涵盖复杂报表设计、参数联动、填报功能及大屏可视化(决策平台)。
拒绝空谈理论,专注解决数据孤岛、报表自动化及性能优化等企业痛点。我将分享多年沉淀的帆软开发套路与 SQL 优化经验,助你快速从"取数工具人"进阶为"数据架构师"。关注我,用报表驱动业务增长!

一、需求描述
1.1 核心功能点
动态构造行与列
分类汇总与小计
数据行过滤
1.2 技术实现建议
后端逻辑 :推荐使用 SQL 的 ROLLUP/ CUBE或 GROUPING SETS实现高效的分组汇总;若数据结构复杂,可在 C#/Java 中使用 LINQ 或 Stream API 进行内存聚合。
前端渲染:使用 Handsontable、AG Grid 或 帆软(FineReport)的聚合单元格功能,绑定分组数据模型。
二、技术要点
2.1 配置数据库连接
【服务器】 -->【定义数据连接】
2.2 查询参数
【模板】 -->【模板参数】

2.3 模板数据集
【模板】 -->【模板数据集】

2.4 查询参数
【组件设置】-->【全部添加】

三、解决方案
3.1 下拉框数据源(不含参数)
ds_CProcCD
sql
select C_PROC_CD,C_PROC_NM from TAX_0007 where C_IS_USING='Y' and C_PROC_CD !='PROC' order by C_PROC_CD;
3.2 下拉框数据源(含参数)
ds_CMachine
sql
select C_GROUP_LINE '机台编码',C_MACHINE_NM '机台名称'
from TAX_0009
where C_PLANT_CD='2400'
and C_IS_USING='Y' and C_MACHINE_FORM='1'
and (C_PROC_CD='${母卷工序}' or '${母卷工序}'='')
and (C_WORK_CENTER='${工作中心}' or '${工作中心}'='')
order by C_MACHINE_CD;
3.3 分组行数据源(动态)
ds_group
sql
select
-- t1.C_PLANT_ID '实体工厂',
DATE_FORMAT(t1.D_PRO_DATE, '%Y-%m-%d') '日期',
t2.C_PROC_CD '母卷工序',
t4.C_WORK_CENTER '工作中心',
t5.C_WORK_CENTER_NAME '工作中心名称',
t4.C_GROUP_LINE '机台编码',
-- IFNULL(t4.C_MACHINE_NM, t4.C_GROUP_LINE) '机台名称',
REPLACE(t4.C_MACHINE_NM, '绿色','') '机台名称',
t2.C_CLASS_GROUP '班组'
from TOP_3140 t1
inner join top_3240 t2 on t1.C_OLD_BAR_CODE=t2.C_BAR_CODE
inner join TAX_0009 t4 on t2.C_MACHINE_ID=t4.C_MACHINE_CD
inner join tax_0006 t5 on t5.C_WORK_CENTER =t4.C_WORK_CENTER
where t1.C_CLASSIFY ='1'
and t1.C_PROC_CD1 in('10004','10044')
and (case when '${cboMachine}' !='' then FIND_IN_SET(t4.C_GROUP_LINE, '${cboMachine}') > 0 else '${cboMachine}'='' end)
group by DATE_FORMAT(t1.D_PRO_DATE, '%Y-%m-%d'),t2.C_PROC_CD,t4.C_WORK_CENTER,t4.C_GROUP_LINE,t2.C_CLASS_GROUP
order by DATE_FORMAT(t1.D_PRO_DATE, '%Y-%m-%d'),t2.C_PROC_CD,t4.C_WORK_CENTER,t4.C_GROUP_LINE,t2.C_CLASS_GROUP;
3.4 汇总列数据源(动态)
ds_sum
sql
select
t1.D_PRO_DATE '日期',
t2.C_PROC_CD '母卷工序',
t4.C_WORK_CENTER '工作中心',
t4.C_GROUP_LINE '机台编码',
t2.C_CLASS_GROUP '班组',
t1.C_LOSS_TYPE '损纸编码',
IFNULL(t3.C_NAME, t1.C_LOSS_TYPE) '损纸类型',
t1.N_LOSS_WGT '重量',
1 '件数'
from TOP_3140 t1
inner join top_3240 t2 on t1.C_OLD_BAR_CODE=t2.C_BAR_CODE
inner join TS_key_value t3 on t3.C_PCODE='lost_type' and t1.C_LOSS_TYPE=t3.C_CODE
inner join TAX_0009 t4 on t2.C_MACHINE_ID=t4.C_MACHINE_CD
where t1.C_CLASSIFY ='1'
and t1.C_PROC_CD1 in('10004','10044')
and t3.C_GROUP like '%10004%'
3.5 下拉框绑定数据源
【控件设置】-->【属性】-->【数据字典】-->【数据集】

3.6 数据区绑定行数据源


3.7 数据区绑定列数据源
横向扩展

按条件过滤 if(len( 损纸类型 ) = 0 , n o f i l t e r , 损纸类型) = 0,nofilter, 损纸类型)=0,nofilter,损纸类型)

3.8 数据区总计字段



四、效果展示
