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

SSRS报表矩阵如何实现分组字段拼接及计数统计

SSRS按账户分组拼接产品及对应计数实现方案

以下两种方案均可实现预期的Product X*2; Product Y*3展示效果,优先选择第一种,稳定性和性能更优。

方案1:数据集层面预聚合(推荐)

直接在取数SQL中完成分组计数和字符串拼接,报表端仅需直接绑定最终计算好的字段即可,无额外兼容问题。
以SSRS最常用的SQL Server数据源为例,代码如下:

SELECT 
    Account,
    STRING_AGG(CONCAT(Product, '*', P_Count), '; ') WITHIN GROUP (ORDER BY Product) AS ProductDisplay
FROM (
    -- 先按账户+产品维度分组,统计每个产品对应的记录数
    SELECT 
        Account,
        Product,
        COUNT(1) AS P_Count
    FROM 你的业务源表
    GROUP BY Account, Product
) t
GROUP BY Account

如果使用SQL Server 2016及更早版本,没有内置STRING_AGG函数,替换为FOR XML PATH写法实现字符串拼接即可,核心分组统计逻辑不变。

方案2:SSRS内嵌自定义代码实现(无需修改数据集)

如果没有权限修改数据集查询逻辑,可以通过SSRS支持的内嵌VB代码在报表端完成拼接,步骤如下:

  • 右键报表空白处打开「报表属性」,切换到「代码」页签,粘贴以下自定义函数:
Private curAccount As String = String.Empty
Private joinResult As String = String.Empty

Public Function JoinProductInfo(acc As String, prod As String, prodCount As Integer) As String
    ' 切换分组时重置缓存的拼接结果
    If acc <> curAccount Then
        curAccount = acc
        joinResult = String.Empty
    End If
    ' 拼接当前产品条目
    If joinResult.Length > 0 Then
        joinResult &= "; "
    End If
    joinResult &= prod & "*" & prodCount.ToString()
    Return joinResult
End Function
  • 给Tablix/矩阵添加行分组,分组字段选择Account,删除明细层级的Product行,仅保留Account分组级别的行。
  • 在Account分组对应的Product列单元格填入以下表达式,注意将表达式中的AccountGroup替换为你当前报表中Account行分组的实际名称:
=RunningValue(
    Code.JoinProductInfo(Fields!Account.Value, Fields!Product.Value, Count(Fields!Product.Value, "AccountGroup")),
    Max,
    "AccountGroup"
)

注意:使用该方案必须提前将数据集按Account字段排序,否则分组切换时的字符串重置逻辑会失效,导致拼接结果错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 18:54:32