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

SSRS嵌入式代码调用Lookup函数报错及相关开发文档查询问询

问题原因
  • SSRS表达式编辑器里的Text、Math、Miscellaneous等分类只是UI层对内置函数的逻辑分组,不是实际存在的VB.NET类或命名空间。你之前测试能调用Math.Floor是因为Math是VB.NET的原生标准类,刚好和UI分组的Math分类重名了,不代表其他分类的函数都能通过分类名调用。
  • Lookup属于SSRS专属的报表上下文函数,仅支持直接写在RDL报表的控件/属性表达式中,不支持在嵌入式VB代码块内直接调用。
解决方法

方法1:直接在表达式中调用Lookup(最简便)

不需要封装进自定义代码,直接在需要用到该逻辑的报表属性处写表达式即可:
=Lookup(1,1,"holaInLookup","DataSet1")

方法2:把Lookup结果作为参数传入自定义函数

如果你需要对Lookup的返回结果做额外的自定义逻辑处理,可以把Lookup的调用放在参数位,传入你写的自定义函数:
自定义代码示例:

Public Function ProcessLookupValue(ByVal x As Integer, ByVal lookupResult As Object) As String
    If x = 1 Then
        Return Math.Floor(1) & lookupResult.ToString()
    Else 
        Return "2" & lookupResult.ToString()
    End If
End Function

报表表达式调用示例:
=Code.ProcessLookupValue(1, Lookup(1,1,"holaInLookup","DataSet1"))

方法3:自定义代码内实现查找逻辑

如果确实需要完全在嵌入式代码内完成查找,可以预先把数据集的对应字段存入全局字典,后续直接查询字典:

' 全局存储查找映射
Dim lookupMap As New System.Collections.Hashtable

' 初始化映射,需要在报表加载时先调用一次该函数传入数据集的对应字段
Public Sub InitLookupMap(ByVal keyList As Object(), ByVal valueList As Object())
    For i As Integer = 0 To keyList.Length - 1
        If Not lookupMap.ContainsKey(keyList(i)) Then
            lookupMap.Add(keyList(i), valueList(i))
        End If
    Next
End Sub

' 自定义查找函数
Public Function CustomLookup(ByVal key As Object) As Object
    If lookupMap.ContainsKey(key) Then
        Return lookupMap(key)
    End If
    Return Nothing
End Function
文档说明

SSRS嵌入式代码的可用API仅包含标准VB.NET运行时库、以及SSRS暴露的Report、Fields等报表上下文对象,报表专属内置函数仅可在表达式中直接使用,该规则在SSRS官方开发文档的「自定义代码和表达式参考」章节有明确说明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:06