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版本)
- 打开报表属性,切换到「代码」选项卡,粘贴以下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
- 改写报表表达式:
- 计算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
相关产品推荐
相关产品推荐

