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

如何在SSRS中通过VB表达式选取首个非Null值?

获取SSRS数据集中首个非Null值的方法

嘿,这个需求我之前也碰到过,在SSRS里完全能实现,给你分享两种实用的方法:

方法1:纯表达式实现(无需自定义代码)

利用LookupSet先把目标字段的所有值提取为数组,再用Filter过滤掉Null值,最后取数组的第一个元素就行。表达式示例:

First(Filter(LookupSet(1, 1, Fields!Month.Value, "datasetName"), Nothing, False), 0)

简单解释下各部分作用:

  • LookupSet(1,1,Fields!Month.Value,"datasetName"):把数据集datasetName里所有Month字段的值转换成一个数组
  • Filter(..., Nothing, False):过滤掉数组里的Null值(False表示排除匹配项,也就是去掉等于Nothing的元素)
  • First(..., 0):取过滤后数组的第一个元素(索引从0开始)

方法2:自定义VB函数(更灵活)

如果需要更复杂的逻辑,或者想复用这个功能,可以在报表里写个自定义函数:

  1. 打开报表的报表属性 → 切换到代码标签页
  2. 粘贴以下VB代码:
Public Function GetFirstNonNull(fieldValues As Object()) As Object
    '遍历数组,返回第一个非Null(且非空字符串)的值
    For Each val As Object In fieldValues
        If val IsNot Nothing AndAlso Not String.IsNullOrEmpty(val.ToString()) Then
            Return val
        End If
    Next
    '如果所有值都是Null/空,返回Null
    Return Nothing
End Function
  1. 在表达式里调用这个函数:
Code.GetFirstNonNull(LookupSet(1, 1, Fields!Month.Value, "datasetName"))

这个方法还可以根据需求扩展,比如添加更多过滤规则,适配不同场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:28:37