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

在SSRS/RDLC中添加LookupSet表达式导致结果出现重复行问题

问题描述

现有RDLC报表初始数据(如图所示),需求是按B列分组对D列值求和。
使用表达式 Code.SumLookup(LookupSet(Fields!B.Value,Fields!B.Value,Fields!D.Value,"dsData")) 搭配自定义SumLookup函数后,出现行重复、行丢失的异常;用Join函数调试时也存在相同问题,期望得到正确分组求和结果。

自定义函数代码如下:

Function SumLookup(ByVal items As Object()) As Decimal  
    If items Is Nothing Then  
        Return Nothing  
    End If  
    Dim suma As Decimal = New Decimal()  
    Dim ct as Integer = New Integer()  
    suma = 0  
    ct = 0  
    For Each item As Object In items  
        suma += Convert.ToDecimal(item)  
        ct += 1  
    Next  
    If (ct = 0) Then return 0 else return suma   
End Function
问题原因

核心问题在于未结合正确的报表分组结构使用LookupSet:

  • 若直接在明细行调用LookupSet,每一行都会重复执行分组匹配逻辑,导致同一分组的求和结果在多行重复显示,表现为行重复;
  • 若报表未按B列配置行组,或数据集排序与分组逻辑冲突,会导致LookupSet无法正确匹配全部分组数据,进而出现行丢失的异常。
解决方案

方案1:利用RDLC内置分组功能(推荐)

  1. 选中报表的数据区域(如Tablix),右键选择添加组 > 行组 > 父组;
  2. 分组字段选择Fields!B.Value,勾选「添加组头」或「添加组尾」(推荐在组尾放置求和值);
  3. 在组尾的单元格中,直接使用内置求和表达式:Sum(Fields!D.Value),RDLC会自动按分组计算求和,无需自定义函数。

方案2:修复自定义函数+正确使用LookupSet

若必须使用LookupSet,需先配置正确分组,再优化函数:

  1. 简化并优化SumLookup函数:
Function SumLookup(ByVal items As Object()) As Decimal  
    If items Is Nothing OrElse items.Length = 0 Then  
        Return 0D  
    End If  
    Dim suma As Decimal = 0D  
    For Each item As Object In items  
        suma += Convert.ToDecimal(item)  
    Next  
    Return suma  
End Function
  1. 确保Tablix已按B列设置行组,仅在组头/组尾单元格中使用表达式:Code.SumLookup(LookupSet(Fields!B.Value, Fields!B.Value, Fields!D.Value, "dsData")),禁止在明细行中调用该表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:42:12