2017-01-04 9 views
1

У меня есть существующая функция, и это работает, но я хотел бы добавить условие, в котором оно также удалит поле "".Код VBA SSRS для удаления пустых полей и дубликатов

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

В основном я получаю результат, который выглядит следующим образом: /Партнеры /Орхидеи Twentysomething

Пожалуйста ПОМОГИТЕ!

+0

Не можете ли вы добавить 'AND элементы (i)! =" "' В ваш оператор IF? – StevenWhite

+0

Общественные Общие функции RemoveDuplicates (ByVal элементы в качестве объекта()) As String() System.Array.Sort (элементы) дим к As Integer = 0 Для я As Integer = 0 To items.length - 1 Если я> 0 AndAlso элементы (I) .equals (пункты (я - 1)!) И детали (я) = "" Тогда Продолжить Для End If элементов (к) = пункты (I) к + = 1 Следующая Dim unique As [String]() = New [String] (k - 1) {} System.Array.Copy (items, 0, unique, 0, k) Возврат уникального Конечная функция Это заблуждение для меня , – a415

+0

О, да, в VBA оператор неравенства '<>'. Но, глядя на это снова, мы хотим, чтобы это было условие «ИЛИ». Другими словами, если он пустой, пропустите его. – StevenWhite

ответ

0

Для того, чтобы предотвратить .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")), "/") 

Это сделало трюк.

0

Вы можете предотвратить ошибку remove(1,1), обернув свою функцию функцией IIf(). Таким образом, вы удаляете только второй символ из строки, если в строке есть как минимум два символа.

Так что ваша функция станет

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()) 
+0

Это тоже не сработало. Это дает мне ОШИБКУ, где нет Lookup. – a415