SSRS(SQL Server 2019)按分组统计字段值计数并控制组显示隐藏
在SSRS(SQL Server 2019)中按组统计code值并控制组显示/隐藏的实现方法
一、实现分组内各code值的统计
按name字段创建组后,直接用表达式就能统计每组内M、S、W的数量:
- 统计当前组内M的数量:
=Sum(IIF(Fields!code.Value = "M", 1, 0), "NameGroup") - 统计当前组内S的数量:
=Sum(IIF(Fields!code.Value = "S", 1, 0), "NameGroup") - 统计当前组内W的数量:
=Sum(IIF(Fields!code.Value = "W", 1, 0), "NameGroup")
注意:这里的NameGroup要替换成你实际创建的name组的名称,这个参数确保统计范围是当前name组,就算组里没有对应code值,也会返回0(比如示例中Joe组的M数量就是0)。
二、基于统计值控制组的显示/隐藏
找到你要控制显示隐藏的组元素(比如组的明细行、组头或组尾),右键打开「属性」,在「可见性」选项卡选择「基于表达式显示或隐藏」,然后编写对应的条件表达式:
- 举个例子:如果要隐藏没有M和W的组(比如示例里的Joe组),表达式写:
=IIF(Sum(IIF(Fields!code.Value = "M", 1, 0), "NameGroup") = 0 AND Sum(IIF(Fields!code.Value = "W", 1, 0), "NameGroup") = 0, True, False) - 逻辑说明:
True代表隐藏,False代表显示,你可以根据自己的需求调整条件(比如隐藏S数量小于2的组等)。
三、更简洁的替代方案:SQL查询提前统计
不想在报表里写复杂表达式的话,直接在数据源的SQL查询里统计好每个name对应的各code数量:
SELECT name, SUM(CASE WHEN code = 'M' THEN 1 ELSE 0 END) AS CountM, SUM(CASE WHEN code = 'S' THEN 1 ELSE 0 END) AS CountS, SUM(CASE WHEN code = 'W' THEN 1 ELSE 0 END) AS CountW FROM YourTable GROUP BY name
这样报表里直接用Fields!CountM.Value、Fields!CountS.Value这些字段来写显示隐藏的表达式,更直观。
内容的提问来源于stack exchange,提问作者inkswamp
相关产品推荐
相关产品推荐

