【发布时间】:2017-10-05 19:21:56
【问题描述】:
我正在恢复一些报告。为此,我必须使用以下方法获取并重新创建 RDL 文件:Where does a published RDL file sit。
我正在从另一个线程中获取查询的输出,将结果另存为(正如一位评论者指出的那样,否则您可能无法获得所有数据),然后在文本编辑器中打开它以去除一些垃圾字符开头,并用一个双引号替换一行中的两个双引号,然后将 RDL 文件上传到报表服务器。
到目前为止,这一直适用于没有任何自定义函数的报告 - 但是,一旦我得到一个带有 SumLookup 和 AvgLookup 函数的报告,我就会收到以下错误:
发生错误。
编译表达式时发生意外错误。本机编译器返回值:'[BC42353] 函数 'AvgLookup' 不会在所有代码路径上返回值。您是否缺少“退货”声明?
我之前用谷歌搜索过的原始 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
但这给了我同样的错误。
到目前为止,我搜索的所有内容似乎都涉及一个实际上并不总是有返回值的函数,所以我有点茫然,简单的“返回 1”函数给出了相同的错误。
我能想到的就是从 RDL 文件中删除所有自定义代码以及对这些函数的任何引用,然后在上传后替换它们。是否有其他解决方案?
【问题讨论】:
-
这行得通吗?函数 AvgLookup() 作为十进制返回 1 结束函数
-
我很欣赏您的回复 - 刚刚尝试过并得到了同样的错误。我最终做了什么:从 .rdl 中删除函数,搜索并将“Code.AvgLookup”替换为“AVg”(注意大写),上传此文件,在 Report Builder 中添加 AvgLookup 函数,下载 .rdl,搜索并将“AVg”(区分大小写)替换为“Code.AvgLookup”,重新上传。我没有太多使用此功能的报告,因此没什么大不了的。但我很想知道为什么会发生这种情况,这似乎很奇怪。
-
嗯,我会尝试的最后一件事。看看你的 ui 逻辑中是否有一些奇怪的边缘情况转换。尝试使用 As String 作为结果并返回“1”。如果这没有产生任何更实质性的结果,那么是的,我会从 ssrs 中删除现有的 .rdl 并重新部署。
-
略有不同的错误与字符串并返回“1”,但基本相同:
An unexpected error occurred while compiling expressions. Native compiler return value: ‘[BC42105] Function 'AvgLookup' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.’. -
也许使用了 Public 修饰符?公共函数 AvgLookup(...)
标签: reporting-services ssrs-2016