调试SSRS的最佳策略是什么?

时间:2009-08-03 23:29:14

标签: reporting-services bug-tracking

我正在寻找方法来追踪SSRS错误发生的位置。

我的报告大约有90列,包含多个公式。我遇到的问题是,在其中一个公式中存在除零误差。我已经在这个question 中实现了Robert Harvey的答案,但我仍然得到错误。我知道答案是有效的,因为我在一份小报告中对其进行了测试。

所以问题是:当SSRS仅报告发生错误时,您究竟如何确定SSRS中发生错误的位置?

编辑显示的错误是

  

本地报告处理期间发生错误
报告处理期间出现错误
无法读取数据集的下一个数据行MainReport
分配零错误

2 个答案:

答案 0 :(得分:6)

修改
我建议不要使用IIF语句和其他语句,而是执行以下操作...在报表中添加自定义函数,转到报表属性和代码选项卡。创建以下内容。要专门识别引发错误的字段,您可以更改此字符串以返回字符串,并且可能是“#OOOOOOPS”,因此它会在报告中显示。

Public Function SafeDivision(ByVal top As Decimal, ByVal bottom As Decimal) As Decimal
   If bottom = 0 Then
      Return 0
      Else : Return top / bottom
   End If
End Function

添加此功能后,转到表达式视图,查看您将进行分割的所有字段。您可以通过输入以下内容来执行此新创建的功能:

=Code.SafeDivivision(CDbl(1.24), CDbl(0))

<强> ORIGINAL
如果您在visual studio中运行报告,它是否会告诉您计算失败的特定文本框/标签/字段?这应该有助于确定问题的来源,但你也可以通过查看下面的代码确保你永远不会在分母中用0进行除法......

//myBottom would be the value of the denominator 
//myTop would be the value of the numerator 

= IIF(myBottom <> 0, myTop / myBottom, "")

答案 1 :(得分:1)

跟进
问题最终成为SQL查询。作为SQL查询的一部分,我有如下的In子句。

Select ID, Name, price/kg as unitpice from products where ID In (@ProductIds)

SSRS使用exec sp_executesql和string.replace将ID注入IN子句。

我遇到的问题是我会在SQL Studio Manager中运行查询。输入所有变量后,它将按预期工作。但是在SSRS下,它会因零除错误而失败,并且没有真正明确指示错误发生的位置。

在我复制了报告并逐个删除项目之后,报告中没有任何内容可以呈现并且仍然产生错误,我将注意力转向了SQL查询。

那里发生了错误。我只是在使用SQL事件探查器找出SSRS实际运行后才找到它。

之后,相对容易地修复删除违规行并返回除法的单独部分并通过RSolberg建议的函数运行它。