我正在开发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函数中看到我所缺少的东西吗,该东西正在生成此错误或导致这种看似不一致的行为?
答案 0 :(得分:0)
使用If
代替IIf
。 If
构造快捷方式求值,而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
构造。