与SSRS表达中的IIF条件相关的问题

时间:2015-03-18 09:31:44

标签: c# asp.net-mvc reporting-services ssrs-2008

我有使用SSRS报告的ASP.NET MVC应用程序..

我在表达式中编写了以下代码:

=iif(Fields!Aggr3.Value is nothing,"", iif(cStr(Fields!Aggr3.Value).IndexOf(".") >=0 , Format(Fields!Aggr3.Value,"C"),Fields!Aggr3.Value))

字段Aggr3包含动态值,它可以是“空”或十进制值或整数值。 如果value是Decimal,我想用$ Currency格式化它。否则,如果值是整数值,那么我想将其视为正常值。

所以我写了上面的表达..但是当生成报告列值时显示#Error

我将iif Condition更改为Switch条件如下:

=Switch(IsNothing(Fields!Aggr2.Value), "", 
not IsNothing(Fields!Aggr2.Value),
Switch(cstr(Fields!Aggr2.Value).IndexOf(".") >=0,Format(Fields!Aggr2.Value,"C"),
cstr(Fields!Aggr2.Value).IndexOf(".") <0,Fields!Aggr2.Value))

但它也会引发错误..

错误是什么以及如何解决?

由于

2 个答案:

答案 0 :(得分:1)

您的问题是使用.IndexOf方法测试&#34;。&#34; - 这在空值上使用时会导致错误。您应该使用inStr()中的SSRS函数,如下所示:

inStr(cStr(Fields!Aggr3.Value), ".") >=0

这应该避免错误 - 我使用一些样本数据对此进行了测试,看起来很好。

答案 1 :(得分:0)

很多人对IIF的运作方式有误解。在IIF中,所有参数都会被评估第一个参数是真还是假,所以在你的情况下,如果Fields!Aggr3.Value什么都没有,它仍然会评估表达式&#34; iif(cStr(Fields!Aggr3。值).IndexOf(&#34;。&#34;)&gt; = 0,格式(Fields!Aggr3.Value,&#34; C&#34;),Fields!Aggr3.Value)&#34;,和当然,如果它试图评估这个表达式(当Aggr3为空时),它将显示错误。有关详细信息,请参阅此文章:http://softwarecafeblog.blogspot.com/2010/04/iff-statement-in-vbnet.html

一个建议是将您的病情视为正常情况&#34;如果&#34;在报告代码中。有关如何添加报告代码的信息,请参阅此文https://msdn.microsoft.com/en-us/library/ms156028.aspx