2009-08-03 55 views
3

我正在寻找方法来追踪发生SSRS错误的位置。调试SSRS的最佳策略是什么?

我有一个约90列宽的报告,有多个公式。我遇到的问题是,在其中一个公式中,有一个被零错误分隔的问题。我已经在这个question中实现了Robert Harvey的答案,但我仍然遇到了错误。我知道答案是有效的,因为我已经在一个小报告中对它进行了测试。

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

编辑错误所显示的是

本地报表处理
过程中出现的错误的错误报表处理期间occoured
不能为数据集读取下一个数据行MainReport
被零除错误中遇到

+0

希望这对你有帮助,让我知道如果我可以尝试进一步帮助... – RSolberg 2009-08-04 16:05:45

回答

6

编辑
而不是使用IIF语句s和其他人,我会推荐做以下事情:添加一个自定义函数到你的报告,去报告属性和代码标签。创建以下内容。要明确指出引发错误的字段,您可以将其更改为返回一个字符串,也许可以使用“#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, "") 
+0

不幸的是,iif函数计算True和False路径,以便您仍然可以得到Zero除法错误。我编辑了这个问题来反映我实际得到的错误。我最终实现IIF(myBottom = 0,0,myTop)/ IIF(myBottom = 0,1,myBottom) – 2009-08-03 23:45:35

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 Profiler查找SSRS实际运行之后,我才发现它。

之后,它是删除有问题的行并返回鸿沟的单独部件并通过RSolberg建议的功能运行的relativly容易解决。

相关问题