【问题标题】:Removing blank fields and duplicates删除空白字段和​​重复项
【发布时间】:2017-01-04 20:21:49
【问题描述】:

此功能有效。

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

我想添加一个条件来删除“ ”字段。

我在 Lookupset 中使用它

=Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Value &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Value & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Value, "DataSet1")), " / ")

我得到的结果如下所示:
/合作伙伴
/兰花
二十出头

【问题讨论】:

  • 你不能在你的 IF 语句中添加AND items(i) != " " 吗?
  • 公共共享函数 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)) And items(i) != " " 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 这对我来说是错误的。
  • 哦,是的,在 VBA 中,不等式运算符是 <>。但是再看一遍,我们希望这是一个OR 条件。换句话说,如果它是空白的,那就跳过它。
  • 这在语法上确实有效......但现在该列的所有行都显示为空白。
  • 你能告诉我为什么当整个字段都没有值时下面的内容会给我一个错误。 =Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Value &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Value & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Value, "DataSet1")), "/").Remove (1,1) 如果我摆脱 Remove(1,1) 它似乎没有任何问题。

标签: vba reporting-services ssrs-2008 ssrs-2008-r2


【解决方案1】:

您可以通过将函数包装在 IIf() 函数中来防止出现 remove(1,1) 错误。这样,如果字符串中至少有两个字符,您只需从字符串中删除第二个字符。

所以你的函数会变成

IIf(Len(Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Val‌​ue &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Valu‌​e & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Val‌​ue, "DataSet1")), " / ")) >= 2, Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Val‌​ue &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Valu‌​e & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Val‌​ue, "DataSet1")), " / ").Remove(1,1), Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Val‌​ue &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Valu‌​e & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Val‌​ue, "DataSet1")), " / "))

为了使这更具可读性,我已将您的函数替换为 CustomFunction()

IIf(Len(CustomFunction()) >= 2, CustomFunction().Remove(1,1), CustomFunction())

【讨论】:

  • 这对我也不起作用。它给了我一个没有查找的错误。
【解决方案2】:

为了防止 .Remove(1,1) 声明错误。我创建了一个重复的数据集,消除了所有空白值,然后在没有 .Remove(1,1) 的情况下执行了查找。这似乎对我有用。

= Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Val‌​ue &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Valu‌​e & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Val‌​ue, "DataSet4")), " / ")

成功了。

【讨论】:

    【解决方案3】:

    要处理空白字段,请更新您的共享函数代码,如下所示:

    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) <> "" 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
    

    另外,更新 LookupSet 来处理如下的空格

    =IIF(IsNothing(Code.RemoveDuplicates(LookupSet(
    Fields!Fund_Family.Value & Fields!Portfolio_Company_Name.Value,
    Fields!Fund_Family.Value & Fields!Portfolio_Company_Name.Value,
    Fields!Security_Name.Value, "DataSet1"))(0)), "", Join(Code.RemoveDuplicates(LookupSet(
    Fields!Fund_Family.Value &Fields!Portfolio_Company_Name.Value,
    Fields!Fund_Family.Value & Fields!Portfolio_Company_Name.Value,
    Fields!Security_Name.Value, "DataSet1")), " / "))
    

    干杯,
    基尔蒂·辛格 |解决方案 IT 服务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多