如何在SQL Server Reporting Services(SSRS)中实现单行多分组统计
问题描述
我已经创建了报表用于展示库存数据,但需要按UOM和Base UOM的不同组合进行分组求和统计。目前只能对单个字段生成总计,无法实现同时基于这两个动态变化的字段进行分组求和,能不能实现如下示例中的统计效果?
| 库存日期 | 产品编码 | 产品名称 | 数量 | UOM | 基准数量 | Base UOM |
|---|---|---|---|---|---|---|
| 12-May-23 | P002142213 | Product A | 150 | PC | 150 | PC |
| 15-May-23 | P032142432 | Product B | 200 | PC | 200 | PC |
| 18-May-23 | P947289323 | Product C | 160 | CB | 80 | BAL |
| 21-May-23 | P012412323 | Product D | 250 | CB | 250 | CB |
| 24-May-23 | P123412332 | Product E | 100 | PC | 100 | PC |
| 27-May-23 | P124213232 | Product F | 260 | CB | 260 | CB |
| 总计 | 570 | CB | 80 | BAL | ||
| 450 | PC | 510 | CB | |||
| 450 | PC |
实现方法
1. SQL预处理数据(后端数据源场景)
直接在数据查询阶段完成分组求和,自动适配动态变化的UOM/Base UOM组合:
SELECT '' AS 库存日期, '' AS 产品编码, CASE WHEN GROUPING(产品名称) = 1 THEN '总计' ELSE '' END AS 产品名称, SUM(数量) AS 数量, UOM, SUM(基准数量) AS 基准数量, `Base UOM` FROM 库存表 GROUP BY UOM, `Base UOM` WITH ROLLUP HAVING UOM IS NOT NULL AND `Base UOM` IS NOT NULL;
WITH ROLLUP自动生成分组总计,GROUPING函数标记总计行,可按需调整显示格式;- 若只需按组合分组求和,去掉
WITH ROLLUP和HAVING即可。
2. 可视化报表工具配置(Tableau/Power BI等)
这类工具原生支持动态分组统计:
- 将UOM和Base UOM拖入「行/列」分组区域;
- 把「数量」「基准数量」拖入「值」区域,设置聚合方式为「求和」;
- 开启「总计」功能,工具会自动根据当前数据的UOM组合生成对应总计,完全适配动态变化的字段值。
3. Excel透视表实现
- 选中所有数据区域,插入「数据透视表」;
- 将UOM和Base UOM拖入「行」区域;
- 把「数量」「基准数量」拖入「值」区域,设置为「求和」;
- 点击透视表「设计」选项卡,开启「总计」-「仅对行启用」,即可得到示例效果,数据更新后刷新透视表即可适配新的UOM组合。
内容的提问来源于stack exchange,提问作者Novice
相关产品推荐
相关产品推荐

