View для отлова дублирующихся данных

  • Автор темы engao
  • Дата начала
E

engao

Гость
#1
Доброго времени суток.

Как можно построить в Лотусе view для отображения документов с дублирующимися данными (например: в 2-х разных документах в поле Email одинаковые значения)?

Спасибо!
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#2
engao
Первый столбец — категоризованный с формулой типа Email + " (" + @DocDescendants + ")", второй — полем номера документа или другим, идентифицирующим документ.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#3
engao
не согласен что для этого необходимо создавать вид, лишь увеличиваете нагрузку на сервер
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#4
Как можно построить в Лотусе view для отображения документов с дублирующимися данными (например: в 2-х разных документах в поле Email одинаковые значения)?
если целью есть проверка на дублирование при создании документа, то делаешь вид с сортировкой по ключу и производишь при сохранении документа поиск по виду NotesView.GetDocumentByKey(), если идет пересохранение документа, то пригодится еще и проверка унидов сохраняемого и найденного документов.

"А Баба Яга против!" )) ты предложение тогда свое опубликуй, а не только смуту наводишь :)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#5
Akupaka
Баба Йога говорит, что существует КУЧА способов проверить дублирующие данные, но для начала стоило бы более детально описать задачу :)
 
E

engao

Гость
#6
Задача такая.

Ксть база и в ней 500 тыщ документов. При создании этих 500 тыщ документов никто с проверкой данных не заморачивался.
Теперь стоит задача - навести порядок. Например убрать дублирующиеся записи по полю Email. Но автоматом удалять нельзя, все это должно быть сделано вручную. Вот нужна такая View для пользователей.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#7
Задача такая.

Ксть база и в ней 500 тыщ документов. При создании этих 500 тыщ документов никто с проверкой данных не заморачивался.
Теперь стоит задача - навести порядок. Например убрать дублирующиеся записи по полю Email. Но автоматом удалять нельзя, все это должно быть сделано вручную. Вот нужна такая View для пользователей.
Кмк, лучше сделать приватную папку и складывать туда повторяющиеся записи агентом, ищущем повторы. Так можно выбрать только дублирующиеся записи. То, что я предлагал выше, выведет все документы, и выискивать среди них повторы пользователю будет затруднительно.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#8
думаю, в этом случае будет наиболее удобным вид описанный nvy
вид с категорией по ключу поиска. только кол-во документов в категории я бы сделал через тоталз.
после отлаживания, если видом не будут пользоваться, его можно убить, либо только индекс, а индексацию сделать ручной, чтобы сервер не заморачивался. имхо.
зы: а предварительно, реализовать механизм проверки добавления дублирующих записей, чтобы очистка была одноразовой ;)

А что скажет Баба Йога? ))

зы2: а с папкой даже интереснее.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#9
Akupaka
скажу, что правильнее всего было бы для начала запустить агент, который пометит дубликаты и вышлет их или почтой, или через ексель с гиперсылкой или уже в отдельную папку/вид, но уж никак не создавать вид, который будет играться с 500К доков ;)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#10
но уж никак не создавать вид, который будет играться с 500К доков
что такое 500 тыщ доков? тьфу! тем более, если отображать два-три небольших поля

Добавлено:
что правильнее всего было бы для начала запустить агент, который пометит дубликаты
а он их должен как перебрать? может dbseach выполнять?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#11
Akupaka
а он их должен как перебрать? может dbseach выполнять?
берем все доки, загоняем в свой класс, перебираем в памяти, получаем необходимое, оформляем красиво результат
если всё делать на стороне сервера то 500К переберутся менее чем за минуту
 
E

engao

Гость
#12
Akupaka

берем все доки, загоняем в свой класс, перебираем в памяти, получаем необходимое, оформляем красиво результат
если всё делать на стороне сервера то 500К переберутся менее чем за минуту
В итоге получаем что-то вроде очета, но никак не view?
 
K

Klido

Гость
#13
берем все доки, загоняем в свой класс, перебираем в памяти, получаем необходимое, оформляем красиво результат
в рамках задачи - как-то много :) если нет готового "своего" класса, реализованного перебора, красоты оформления - насколько трудоемкость превысит вьюху по 1-му полю (которое ищут)?

а сколько потенциально е-мэлов разных в этих 500К доков?
 
E

engao

Гость
#14
в рамках задачи - как-то много :) если нет готового "своего" класса, реализованного перебора, красоты оформления - насколько трудоемкость превысит вьюху по 1-му полю (которое ищут)?

а сколько потенциально е-мэлов разных в этих 500К доков?
E-mail - частный случай. Я думаю, будет около 5% всех документов. Как вариант думаю использовать NotesSQL и слить данные в Ms Access и там обработать, но задача в том, что это нужно ежедневно.
 
K

Klido

Гость
#15
выше уже написали - сразу при получении задачи надо внедрить контроль при создании, а затем уже разгрести остальное...
и все-таки - нужна нормализация по нескольким ключам или...? Если по 3-5 ключам - руками быстрее через вьюхи, если сложнее - да, слить в реляционку, например, DECSом... Что там с ними делать - другой вопрос...
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#17
А что такого? Завести список(list) байтов(byte) для каждого поля. Ключ ограничить, например, 200 символами. Достаточно быстро всё проверим. Памяти должно хватить.

Добавлено: Класс, по-моему, здесь лишний. И так достаточно просто. :)

Добавлено: Проверил на 70 тыс. Две минуты и сорок секунд на перебор с проверкой унида. Заодно дергал значение поля.
Памяти по расчетам список кушает 70000*32*2+70000=4.3Мб. В реальности больше выйдет.
Самое долгое выйдет - это представление информации. Например, в папку кидать.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#18
Medevic
код не жалко показать? че-то я не понял, что именно ты делал для проверок.
или алгоритьм подробный
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#19
Код:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim dc As NotesDocumentCollection
Dim l List As Byte
Dim tag As String
Dim i As Long
Dim k As Long

Set db = session.CurrentDatabase

Set dc = db.Search({@All}, Nothing, 0)
i = dc.Count
k = 0
Set doc = dc.GetFirstDocument()
While Not (doc Is Nothing)
tag = doc.GetItemValue("Author")(0)
tag = doc.UniversalID
If Not Iselement(l(tag)) Then
l(tag) = 1
Else
'повтор
k = k + 1
End If
i = i - 1
Print Cstr(i) + " " + Cstr(k)
Set doc = dc.GetNextDocument(doc)
Wend
 

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#20
Доброго времени суток.
Как можно построить в Лотусе view для отображения документов с дублирующимися данными (например: в 2-х разных документах в поле Email одинаковые значения)?
Спасибо!
Первый столбец категоризируем, во втором - Total

Код:
Sub Initialize()
Dim s As New NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim nv As NotesViewNavigator
Dim en As NotesViewEntry
Dim cl As NotesDocumentCollection
Dim doc As NotesDocument
Set db=s.Currentdatabase
Set v=db.Getview("$MessageID")
v.Autoupdate=false
Set nv=v.Createviewnav()
Set en=nv.Getfirst()
Do While Not en Is Nothing
If en.Columnvalues(3)>1 then
'Print en.Columnvalues(0) & "--" &en.Columnvalues(3)
Set cl=v.Getalldocumentsbykey(en.Columnvalues(0),true)
Set doc=cl.Getfirstdocument()
Call cl.Deletedocument(doc) 
'Call cl.Putallinfolder("Dubl") ' если надо - то в папку
Call cl.Removeall(true) ' я решил грохать сразу
End If
Set en=nv.Getnextcategory(en)
Loop
End Sub
На 200 тыщ категорий работало секунд 20...