2017-10-05 39 views
0

我正在恢复某些报告。要做到这一点,我必须抓住并重新创建这里的RDL文件:Where does a published RDL file sitSSRS 2016“函数不会在所有代码路径上返回值”

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

这一直工作至今无任何自定义函数报告 - 但是,一旦我与SumLookup和AvgLookup职能的报告,我得到以下错误:

An error has occurred.

An unexpected error occurred while compiling expressions. Native compiler return value: '[BC42353] Function 'AvgLookup' doesn't return a value on all code paths. Are you missing a 'Return' statement?'.

原来AvgLookup功能,我用Google搜索前,现在已经工作正常,直到为:

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

这是行不通的吗? 函数AvgLookup()作为十进制 返回1 结束功能 –

+0

我很欣赏响应 - 只是试过,得到了同样的错误。我最终做了什么:从.rdl中删除函数,搜索并用“AVg”代替“Code.AvgLookup”(注意大小写),上传此文件,在Report Builder中添加AvgLookup函数,下载.rdl,搜索并用“Code.AvgLookup”替换“AVg”(区分大小写),重新上传。我没有太多使用这个功能的报告,所以它没有太大的交易。但是我会很好奇知道_为什么会发生这种情况,这似乎很奇怪。 –

+0

嗯,我会尝试的最后一件事。看看你的UI逻辑是否有一些奇怪的边缘情况转换。尝试使用As String作为结果并返回“1”。如果这不会产生更多实质性的话,那么我会删除ssrs中的现有.rdl并重新部署。 –

回答

0

所以我最终找出了这个问题。

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

所以我已经吸取了教训粘贴准确代码寻求帮助的时候,而不是为提高可读性,创造新行,如果他们是不是真的存在,因为这可能会更快解决问题我有。

相关问题