多CountDistinct结合IIF语句实现分组去重计数的问题求助
按分组条件统计去重记录数的解决方案
错误原因分析
- 第一种写法用
OR连接两个COUNTDISTINCT聚合函数:OR是逻辑判断运算符,只能返回布尔值(True/False),不能用于拼接聚合结果,因此运行报错。 - 第二种写法在同一字段中写两个独立表达式:SSRS会将其视为逻辑判断(判断两个表达式是否同时成立),因此返回布尔值而非预期的计数值。
正确实现方式
要在同一字段中分别显示不同分组的去重计数结果,需将两个COUNTDISTINCT的计算结果转换为字符串后拼接,示例表达式如下:
="分组1符合条件的去重记录数: " & COUNTDISTINCT(IIF(Fields!GroupNum.Value = 1 AND Fields!TenName.Value <> "" AND NOT(Fields!Unit.Value LIKE "*WAIT*"), Fields!Unit.Value, Nothing)) & vbCrLf & "分组2符合条件的去重记录数: " & COUNTDISTINCT(IIF(Fields!GroupNum.Value = 2 AND Fields!TenName.Value <> "", Fields!Unit.Value, Nothing))
- 若需同一行展示两个分组结果,可将
vbCrLf替换为逗号或空格:
="分组1: " & COUNTDISTINCT(IIF(Fields!GroupNum.Value = 1 AND Fields!TenName.Value <> "" AND NOT(Fields!Unit.Value LIKE "*WAIT*"), Fields!Unit.Value, Nothing)) & ", 分组2: " & COUNTDISTINCT(IIF(Fields!GroupNum.Value = 2 AND Fields!TenName.Value <> "", Fields!Unit.Value, Nothing))
补充说明
COUNTDISTINCT会自动忽略Nothing值,因此符合条件的Unit值会被统计,不符合的会直接排除。- 后续若需扩展更多分组,只需按相同格式追加
COUNTDISTINCT的计算逻辑即可。
内容的提问来源于stack exchange,提问作者trobinson16
相关产品推荐
相关产品推荐

