IIF错误表达会影响真实性吗?

时间:2018-08-02 20:30:39

标签: vb.net reporting-services

我正在开发SSRS tablix报告,并努力从某些单元中删除一些错误消息。单元格中的表达式如下:

=Iif(IsNothing(First(Fields!Details.Value)) , "", Join(Code.RemoveDuplicates(LookupSet(Fields!studyTitle.Value, Fields!studyTitle.Value, Fields!Link.Value ,"DataSet1")), vbCrLf ))

所引用的自定义函数如下:

Public Shared Function RemoveDuplicates(ByVal items As Object())  As String()
System.Array.Sort(items)
Dim k As Integer = 0
For i As Integer = 0 To items.Length - 1
If i > 0 AndAlso items(i).Equals(items(i - 1)) Then
Continue For
End If
items(k) = items(i)
k += 1
Next
Dim unique As [String]() = New [String](k - 1) {}
System.Array.Copy(items, 0, unique, 0, k)
Return unique
End Function

我遇到的问题是,如果它们通过具有多个空白值的自定义函数运行,则输出中的单元格将显示“ #ERROR”。

初始IIF语句的目标是首先测试这些行,以确保该功能仅应用于具有值的行,而其他单元格应为空。问题是我仍然看到这些单元格的错误,好像无论如何都应用了错误条件。

但是,如果我将IIF语句编辑为具有相同的测试条件,但真部分和假部分不同,即:

Iif(IsNothing(First(Details.Value)), "true", "false"))

然后突然间,我准确地看到了希望看到的标记为true和false的行。如果是这种情况,那么我无法在初始声明中弄清楚错误的出处。

我知道该问题必须在RemoveDuplicates函数的某个地方,因为当我取出该部分并仅加入重复的值时,我看不到任何错误,并且错误的行与上面确定的相同。

有人从IIf函数中看到我所缺少的东西吗,该东西正在生成此错误或导致这种看似不一致的行为?

1 个答案:

答案 0 :(得分:0)

使用If代替IIfIf构造快捷方式求值,而IIf求值所有表达式。

=If(IsNothing(First(Fields!Details.Value)) , "", Join(Code.RemoveDuplicates(LookupSet(Fields!studyTitle.Value, Fields!studyTitle.Value, Fields!Link.Value ,"DataSet1")), vbCrLf ))

这仅在VB.net中可用,而在VBA中不可用。在VBA中,您将使用标准的If-Then-Else构造。