我正在恢复一些报告。要做到这一点,我必须使用此处的方法抓取并重新创建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文件中的所有自定义代码以及对这些函数的任何引用,然后在上传后替换它们。可能还有其他解决办法吗?
答案 0 :(得分:0)
所以我最终弄明白了这个问题。
实质上,从报表服务器检索报表文件的实际代码的查询会将代码全部保留在一行中。函数需要在新行上包含每个命令。当我编辑RDL文件时,我将该函数全部保留在同一行上。
所以我已经吸取了教训,在请求帮助时粘贴完全我所拥有的代码,而不是创建新行以提高可读性,如果它们不是真的存在,就像这可能很快就解决了这个问题。