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

如何在SSRS报表中将字段中的数组数据拆分为多行?

在SSRS中拆分数组字段为多行的实现方案

完全可行,以下是两种实用实现方式,按需选择:

方法一:数据源层面拆分(推荐)

若有权限修改数据源查询,在SQL层直接拆分是效率最高的方案,无需依赖SSRS复杂设置。
假设数组字段为逗号分隔字符串(如"A,B,C"),可通过递归CTE或数字表拆分:

示例SQL(SQL Server)

WITH Numbers AS (
    SELECT 1 AS N
    UNION ALL
    SELECT N + 1 FROM Numbers WHERE N < 20 -- 覆盖最多20个元素的场景
)
SELECT 
    t.主表ID,
    LTRIM(RTRIM(SUBSTRING(t.数组字段, CHARINDEX(',', ',' + t.数组字段 + ',', n.N) + 1, 
    CHARINDEX(',', ',' + t.数组字段 + ',', n.N + 1) - CHARINDEX(',', ',' + t.数组字段 + ',', n.N) - 1))) AS 拆分后元素
FROM 你的主表 t
JOIN Numbers n ON n.N <= LEN(t.数组字段) - LEN(REPLACE(t.数组字段, ',', '')) + 1
OPTION (MAXRECURSION 20)

这段SQL会自动将每条记录的数组字段拆分为单独行,适配1-20个元素的情况,直接将查询结果作为SSRS数据源即可。

若数组是JSON格式存储(如SQL Server的nvarchar(max)类型),可改用OPENJSON拆分:

SELECT t.主表ID, j.value AS 拆分后元素
FROM 你的主表 t
CROSS APPLY OPENJSON(t.数组字段) j

方法二:SSRS报表内处理

若无法修改数据源,可通过列表控件结合Split函数实现:

  1. 在数据集的计算字段中添加SplitArray,表达式为:=Split(Fields!数组字段.Value, ",")(根据实际分隔符调整)
  2. 向报表添加列表控件,绑定主数据集
  3. 选中列表的行组,右键进入「组属性」,在「分组」选项卡添加分组表达式:=Split(Fields!数组字段.Value, ",")(RowNumber(Nothing)-1)
  4. 在列表的文本框中设置表达式:=IIF(RowNumber(Nothing)-1 < UBound(Split(Fields!数组字段.Value, ",")), Split(Fields!数组字段.Value, ",")(RowNumber(Nothing)-1), "")
    此方式需注意数据量,性能弱于SQL层拆分,仅作为无数据源修改权限时的备选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:32:43