SSRS 2016 "Function doesn't return a value on all code paths"



我正在恢复一些报告。要做到这一点,我必须使用以下方法获取并重新创建RDL文件:发布的RDL文件位于哪里。

我在另一个线程中获取查询的输出,将结果保存为(正如一位评论者所指出的,否则你可能无法获得所有数据),然后在文本编辑器中打开它,去掉开头的一些垃圾字符,用一个双引号替换一行中的两个双引号,然后将RDL文件上传到报表服务器。

到目前为止,这一直适用于没有任何自定义函数的报告——然而,一旦我得到一个具有SumLookup和AvgLookup函数的报告,我就会得到以下错误:

发生错误。

编译表达式时发生意外错误。本机编译器返回值:"[BC42353]函数"AvgLookup"未在所有代码路径上返回值。"。您是否缺少"Return"语句。

我以前在谷歌上搜索过的原始AvgLookup函数是:

Function AvgLookup(ByVal items As Object()) As Decimal
If items Is Nothing Then
Return Nothing
End If
Dim suma As Decimal = 0
Dim avga As Decimal = 0
Dim counta As Integer = 0
For Each item As Object In items
If Not item Is Nothing Then
counta += 1
suma += Convert.ToDecimal(item)
End If
Next
If counta > 0 Then
avga = suma / counta
Else
avga = 0
End If
Return avga
End Function

我试着用一个简单的函数来代替它,它只返回1:

Function AvgLookup(ByVal items As Object()) As Decimal
Return 1
End Function

但这给了我同样的错误。

到目前为止,我搜索的所有内容似乎都涉及一个函数,而这个函数实际上并不总是有返回值,所以我有点不知所措,因为简单的"return 1"函数会给出同样的错误。

我所能想到的就是从RDL文件中删除所有自定义代码以及对这些函数的任何引用,然后在上传后替换它们。是否可能有其他解决方案?

所以我最终解决了这个问题。

从本质上讲,从报表服务器检索报表文件的实际代码的查询将代码全部保留在一行中。函数需要将每个命令都放在一个新行中。当我编辑RDL文件时,我把函数都放在同一行。

因此,我学到了在寻求帮助时将完全粘贴到代码中,而不是创建新行以提高可读性,因为这可能会更快地解决问题。

相关内容

  • 没有找到相关文章

最新更新