2

我在 SSRS 中有一个表达式,旨在根据另一个字段的值更改字段的格式:

=IIF(ISNOTHING(Fields!RD.Value), "", IIF(InStr(Fields!ReportHeader_f2.Value,"Average") > 0,Format(Fields!RD.Value,"N") * 1.000,Format(Fields!RD.Value,"#,##;(#,##)") * 1.000))

我需要将这些值显示为 excel 电子表格中的数字,所以我将它们乘以 1.000(我也尝试过 Cdbl)。

当表达式遇到 的NULL值时RD#Error单元格会弹出。我已经尝试使用ISNOTHING()标签来解释它,我已经尝试将这些NULL值变成零,然后进行解释。

我的表达可能有什么问题?

4

3 回答 3

2

在我看来,您似乎IsNothing没有捕获NULL值,并且当 SSRS 尝试格式化该NULL值但没有办法处理该值时会出现错误。就个人而言,我对此的首选解决方案是确保NULL在进入报告之前在查询/过程中将任何值转换为零。只需拍打ISNULL(RD, 0)并尝试处理报告中的零。我也会尝试CDbl基本上所有进入这个表达式的东西,以确保没有任何错误的数据类型进入。可能比尝试将每个乘以 1.000 更好。此外,错误可能来自尝试将格式化字段乘以 1.000。SSRS 以神秘的方式工作。我认为这应该可行。

=IIF(CDbl(Fields!RD.Value) = 0.0, 
     "", 
     IIF(InStr(Fields!ReportHeader_f2.Value, "Average") > 0, 
         Format(CDbl(Fields!RD.Value), "N"),
         Format(CDbl(Fields!RD.Value), "#,##;(#,##)")))

您也可以CDbl用 等替换转换Format(Fields!RD.Value * 1.000, "N")...有一些地方可能出错了,但这种方法似乎最有可能奏效,IMO。

我在测试中探索的另一个潜在解决方案是基于原始字段创建计算字段。例如,调用它RD2并将值设置为等于=IIF(Fields!RD.Value Is Nothing OR Fields!RD.Value = 0, 0, Fields!RD.Value)。然后,您可以将上面的表达式与RD2计算字段一起使用。似乎在我的测试中捕获了零值。

于 2019-03-07T20:00:04.717 回答
0

这里发生了几件事导致问题:

首先,IIF函数而不是语言构造。这意味着根据第一个参数比较的值没有逻辑短路,它在调用函数之前评估所有参数。因此,如果 True 或 False 参数有一个错误,那么无论条件的值如何,整个事情都会崩溃。

为了防止这种情况,您通常需要以IIF不会遇到错误的方式安排两个函数调用。现在回到问题的根源:CDbl如果遇到非数字输入,将引发错误。@Steve-o169 的答案通过IIF以某种方式使用两个函数来防止这种情况发生,从而不会进行无效转换,从而防止错误。另一种方法是使用该Val函数,而不是CDbl因为该Val函数在不引发错误的情况下进行数字评估 - 它只是抓住它可以获取的内容并将其称为一个数字。

但是,您实际上不必担心这一点,因为表示应该与数据分开:您希望Value是数字,否则如果您使用该Format函数,则导出到 Excel 将具有文本值而不是数字。Value与其将格式放在表达式中,不如将其放在Format它所属的属性中,这样值将导出为数字,并且 Excel 中的格式也正确。

所以我们甚至不必担心字段的值,只需将Value属性的表达式设置为字段值,它就会导出为数字。

现在要Format正确设置,在Format单元格的属性中使用以下表达式:

=IIF(InStr(Fields!ReportHeader_f2.Value, "Average") > 0, "N", "#,##;(#,##)")
于 2019-03-14T03:52:07.933 回答
0

1-您可以使用 ISNOTHING 功能:

=IIF(IsNothing(Fields!RD.Value),0,Fields!RD.Value)

2-开发自定义查询。打开报告菜单->报告属性->代码,然后使用:

Function IfNullUseZero(myvalue as object)
     IF IsNull(myvalue) then
            Return 0
     Elseif myvalue =" " then
            Return 0
End If

然后,在报告上,做=Code.IfNullUseZero(Fields!RD.Value).

参考:https ://social.msdn.microsoft.com/Forums/sqlserver/en-US/bd6dfd75-feb6-4093-8909-6c4054b64c96/convert-null-to-0-in-ssrs?forum=sqlreportingservices

于 2019-03-07T17:28:02.887 回答