You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSRS中旋转报表(行列互换)及数据适配问题

解决SSRS矩阵行列互换与行头匹配问题

第一步:修改数据源结构(推荐方案)

你的存储过程当前输出的是宽表结构(聚合类型为行,分类为列),但SSRS矩阵更适配长表结构(每行对应一个聚合类型+分类+数值的组合)。建议先调整存储过程,将数据转换为长表格式:

调整后的存储过程逻辑示例

-- 按聚合类型和分类拆分计算汇总值
SELECT 
    AggregationType = 'TicketsReceived',
    CategoryCode = 'Category1',
    Total = Sum(Category1)
FROM YourSourceTable
UNION ALL
SELECT 
    AggregationType = 'TicketsReceived',
    CategoryCode = 'Category2',
    Total = Sum(Category2)
FROM YourSourceTable
UNION ALL
SELECT 
    AggregationType = 'TicketsResolved',
    CategoryCode = 'Category1',
    Total = Sum(Category1)
FROM YourSourceTable
UNION ALL
SELECT 
    AggregationType = 'TicketsResolved',
    CategoryCode = 'Category2',
    Total = Sum(Category2)
FROM YourSourceTable
-- 关联分类描述查找表,替换为友好名称
JOIN CategoryLookup cl ON cl.CategoryCode = t.CategoryCode

调整后输出的每行包含:AggregationType(如TicketsReceived)、CategoryDescription(如"系统故障")、Total(汇总值),完全匹配SSRS矩阵的分组需求。

第二步:配置SSRS矩阵

  1. 拖拽矩阵控件到报表设计界面
  2. 行组:拖入CategoryDescription字段,作为行头展示分类描述
  3. 列组:拖入AggregationType字段,作为列头展示聚合类型
  4. 数据区域:拖入Total字段,设置聚合方式为Sum(若存储过程已完成汇总,直接取字段值即可)

完成配置后就能得到你期望的报表效果:行是分类描述,列是聚合类型,交叉区域为对应数值。

无法修改存储过程的替代方案

如果因权限或其他限制不能修改存储过程,可在SSRS中通过UNPIVOT转换宽表:

  1. 打开数据集属性,修改查询语句,用UNPIVOT将列转为行:
SELECT 
    AggregationType,
    CategoryCode,
    Total
FROM 
    (SELECT * FROM YourStoredProcedureResult) p
UNPIVOT
    (Total FOR CategoryCode IN (Category1, Category2, Category3)) AS unpvt
-- 关联分类查找表获取描述
JOIN CategoryLookup cl ON cl.CategoryCode = unpvt.CategoryCode
  1. 再按照上述矩阵配置步骤,使用转换后的数据集即可实现需求。

为何无法直接实现行列互换?

SSRS矩阵的核心逻辑是基于分组维度:行组和列组都需要明确的分组字段(即每个行/列对应字段的不同取值)。你原有的宽表中,分类是列名而非数据行的字段值,矩阵无法自动将列名识别为分组维度——必须把列名转换为数据行中的字段值,才能作为行组的分组依据。

内容的提问来源于stack exchange,提问作者greendesert69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:33:19