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

SSRS中LookupSet与MAX函数联用部署后报表UI报错求解

错误原因

LookupSet函数返回的是Object类型数组,SSRS原生MAX/MIN聚合函数不支持直接对数组进行计算,因此触发运行时类型错误。

解决方案

方案1:使用Linq内联计算(适合SSRS 2016及以上版本)

直接改写表达式即可:

  • 计算MAX值表达式:
=LookupSet("SR Light Naphtha", Fields!DISPLAY_NAME.Value, Fields!Max.Value, "LIMS_VALUES").Cast(Of Double)().Max()
  • 计算MIN值表达式:
=LookupSet("SR Light Naphtha", Fields!DISPLAY_NAME.Value, Fields!Min.Value, "LIMS_VALUES").Cast(Of Double)().Min()

如果要兼容空结果场景,可添加空判断:

=IIF(LookupSet("SR Light Naphtha", Fields!DISPLAY_NAME.Value, Fields!Max.Value, "LIMS_VALUES").Length=0, 0, LookupSet("SR Light Naphtha", Fields!DISPLAY_NAME.Value, Fields!Max.Value, "LIMS_VALUES").Cast(Of Double)().Max())

方案2:使用自定义函数(兼容所有SSRS版本)

  1. 打开报表属性,切换到「代码」选项卡,粘贴以下VB代码:
Function GetMax(ByVal items As Object()) As Double
    If items Is Nothing OrElse items.Length = 0 Then
        Return 0 '可按需修改默认返回值
    End If
    Dim maxVal As Double = Double.MinValue
    For Each item As Object In items
        If IsNumeric(item) AndAlso CDbl(item) > maxVal Then
            maxVal = CDbl(item)
        End If
    Next
    Return maxVal
End Function

Function GetMin(ByVal items As Object()) As Double
    If items Is Nothing OrElse items.Length = 0 Then
        Return 0 '可按需修改默认返回值
    End If
    Dim minVal As Double = Double.MaxValue
    For Each item As Object In items
        If IsNumeric(item) AndAlso CDbl(item) < minVal Then
            minVal = CDbl(item)
        End If
    Next
    Return minVal
End Function
  1. 改写报表表达式:
  • 计算MAX值:=Code.GetMax(LookupSet("SR Light Naphtha", Fields!DISPLAY_NAME.Value, Fields!Max.Value, "LIMS_VALUES"))
  • 计算MIN值:=Code.GetMin(LookupSet("SR Light Naphtha", Fields!DISPLAY_NAME.Value, Fields!Min.Value, "LIMS_VALUES"))

两种方案都可以正确返回预期的120的MAX结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:24:02