Как использовать вместо Выбора объектов Отчет??

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Как использовать вместо Выбора объектов Отчет??

Сообщение Александр »

Подскажите кто знает?
Забили базу данными-теперь хотим анализировать. Быстро анализировать. :?
Два пути
1. Найти стандартными средствами Лоции все объекты в базе по значениям атрибутов (окно выбора объектов) - Самый быстрый способ. Но т.к. это не поддается автоматизации, т.е. нельзя все что нашли - автоматически поместить в подборку или завязать во временное дерево, - отпадает
2. Выполнить связанный отчет по всей базе по всем уровням - Убийственный метод,-как я понял это просто приведет к зависанию системы, если база сколько нибудь заполнена. Хотя все нужные объекты автоматически помещаются в 'представление' т.е. отчет и когда Лоция прикрутит к ним скрипты - с ним можно будет поработать (запустить действие по всем колонкам)

Таким образом - второй путь наиболее предпочтителен. Но как сформировать отчет аналогично тому как это делает окно Выбор объектов. Другими словами - окно выбор объектов настраивает и выполняет SQL запрос по базе - но и отчет делает то-же самое? Почему тогда возникает огромная разница в быстродействии поиска объектов?, когда оба подхода, в общем то, делают одно и то-же.

Вопрос: можно ли в действии сформировать SQL запрос который сформирует либо отчет либо каким-то образом заполнит окно выбора объектов :? со скоростью аналогичной ручному поиску через это самое окно :?:

Как говорится - 'Путаю педали' в смысле запутался в терминах (подборка/представление/отчет/окно выбора объекта и т.д.) :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

ой, как давно я сюда не заглядывал...
наступил собственно момент, которого все так долго ждали, да? :wink: появилось желание использовать ту инфу, которую накопили... круто... мы, кажется, все еще этого момента ждем.. :(
по 1-му способу... в принципе, теоретически, можно устроить добавление найденных объектов в какое либо дерево... например, можно с помощью сиквел-запросов искать объект, удовлетворяющий условиям поиска но НЕ входящий в определенный объект (временную папку), выбирая при этом объект с макс. ИД и затем добавлять связь. и так - в цикле, пока будет найдет хоть один объект.. потом можно открыть эту временную папку... хотя о быстродействии такого решения можно только догадываться... но между прочим, если такого рода анализ будет проходить часто, то есть смысл из этих временных папок сделать постоянные и устроить процедуры по их обновлению, их можно запускать почти автоматически. тогда пользователям можно будет просто открывать папку, не делая (по идее) сам запрос снова.
а вот с отчетами... зависание системы - это еще не факт, зависит от того, что будет за отчет. если есть связанные объекты... стоп... "связанные"???? а что, уже есть связанные????? :wink:
здесь же можно развернуться, даже без скриптов (для меня это очередная темная роща, так что, как говорит Галыгин, "все по скриптам")в отчетах появилась возможность делать предотбор объектов на основе самодельного запроса. еще хотя есть вообще отчет по самодельному запросу, но его я пока не пробовал. дак вот, из какого то отчета, например, можно получить ИД объектов, у которых есть интересующие нас связанные объекты, и передать их в другой отчет... и сделать возможность из того отчета выходить на сами объекты... по идее, не должно привести к зависанию.. хотя есть конечно некоторые тонкости при написании запросов, за универсальность (я имею в виду "неограниченность" на уровне базы соответствия атрибутов и объектов) приходится платить производительностью...
у нас недавно кстати был такой казус, стандартный поиск объектов реально зависал, если среди атрибутов, по которым мы хотим искать, для ПЕРВОГО по порядку атрибута указать * и оставить поле для значения пустым... стоило только переместить этот атрибут в конец списка нужных атрибутов - поиск заработал правильно... как говорится, "я сам в шоке", выходит, от перемены мест слагаемых сумма таки меняется.. но это было у нас на SQL Server 2000 SP3...
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

Помогите разобраться... :?

Лоция дала пример SQL формируемого окном поиск объекта
(комментарии мои)
Планирую использовать свои запросы для БЫСТРОГО формирования отчета, но общую идею (и частности) алгоритма не понимаю

Изображение
(фото)

Код: Выделить всё

//выбрать значения (колонки)
SELECT lsdbo.object_reference_view.id,				  // -ID (таблица.Экземпляры объектов)
       lsdbo.object_reference_view.type_id,			// -ID типа объекта (таблица.Экземпляры объектов)
       lsdbo.object_reference_view.description,	  // -Описание (таблица.Экземпляры объектов)
       lsdbo.object_type_view.description,		    // -Описание (таблица.тип обекта)
       lsdbo.object_type_view.object_type,			 // -Вид объекта (таблица.тип обекта)
       lsdbo.object_type_view.mnemo,				    // -Мнемо (таблица.тип обекта)
       lsdbo.object_reference_view.cd,			     // -Дата изменения (таблица.Экземпляры объектов)

       (SELECT vv.value						           // -Attr_3 (значение виртуальной переменнтой vv)
           FROM lsdbo.attrib_value_view av,         // виртуальная таблица av (таблица.связъ значений атрибутов с объектами) 
	        lsdbo.value_string_view vv               // виртуальная таблица vv (таблица.значения атрибутов с типом данных строка)
           WHERE av.value_id = vv.id AND                         	
                 av.object_id = lsdbo.object_reference_view.id AND
                 av.treelink_id = 0  AND
                 av.attrib_id = 100000001301013
       ) as Attr_3 

//из таблиц
  FROM lsdbo.object_reference_view,				     // (таблица.Экземпляры объектов) 
       lsdbo.object_type_view 					       // (таблица.тип обекта) 

//где
 WHERE (lsdbo.object_reference_view.type_id = lsdbo.object_type_view.id) //тип экземпляра объекта=тип объекта 
        AND
        (
         (lsdbo.object_reference_view.id in 		  // проверить входит ли значение в выбранные таблицы
          (SELECT av.object_id 					      // проверить 'Газопровод%'	
             FROM lsdbo.attrib_value_view av,		 // виртуальная таблица av (таблица.связъ значений атрибутов с объектами)
                  lsdbo.value_string_view vv 		 // виртуальная таблица vv (таблица.значения атрибутов с типом данных строка)
            WHERE av.value_id = vv.id and
                  av.attrib_id = 100000001401013 and
                  vv.attrib_id = 100000001401013 AND
                  vv.Value0 like 'Газопровод%')

               AND
                  lsdbo.object_reference_view.id in   // проверить входит ли значение в выбранные таблицы
                  (SELECT av.object_id 		         // проверить 'ГУП "НИиПИ Генплана"%'
                     FROM lsdbo.attrib_value_view av, // виртуальная таблица av (таблица.связъ значений атрибутов с объектами)
                          lsdbo.value_string_view vv  // виртуальная таблица vv (таблица.значения атрибутов с типом данных строка)
                    WHERE av.value_id = vv.id and
                          av.attrib_id = 100000001701013 and
                          vv.attrib_id = 100000001701013 AND
                          vv.Value0 like 'ГУП "НИиПИ Генплана"%')
                  
               AND 
                  lsdbo.object_reference_view.id in	// проверить входит ли значение в выбранные таблицы	
                  (SELECT av.object_id 			      // проверить '01-811-РП'
                     FROM lsdbo.attrib_value_view av, // виртуальная таблица av (таблица.связъ значений атрибутов с объектами)
                          lsdbo.value_string_view vv  // виртуальная таблица vv (таблица.значения атрибутов с типом данных строка)
                    WHERE av.value_id = vv.id and
                          av.attrib_id = 100000001301013 and
                          vv.attrib_id = 100000001301013 AND
                          vv.Value0 = '01-811-РП')
        )
       )
если можно в двух словах, Как это работает (не описание операторов, а именно общий смысл), как переменные окна выбора объекта связаны с запросом
- что такое av и vv
- зачем так много сравнений и колонок ?

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

мне кажется, здесь как таковых переменных окна выбора объекта нету, собственно, запрос то сам не совсем для ПРИВЕДЕННОГО окна выбора (в окне нет значений, а в запросе есть). если заполнить окно выбора объекта нужными значенияим и нажать Выполнить, то в БД будет выполнен как раз приведенный запрос... происходит что то вроде компиляции, из языка Лоции в Transact-SQL..
av и vv - это псевдонимы таблиц lsdbo.attrib_value_view и lsdbo.value_string_view соответственно, с ними текст запроса сущ-но короче..
а вот насчет проверок..
я тоже не совсем понимаю, зачем нужно делать вот так:

Код: Выделить всё

WHERE 
av.value_id = vv.id and 
av.attrib_id = 100000001401013 and 
vv.attrib_id = 100000001401013 AND 
vv.Value0 like 'Газопровод%')
,
вроде хватит вот такого:

Код: Выделить всё

WHERE 
av.value_id = vv.id and 
av.attrib_id = 100000001401013 and  
vv.Value0 like 'Газопровод%')
у нас кажется самодельные запросы так и построены...
а как работает - запрос вытаскивает определенные параметры тех объектов, у которых определенный тип (кстати, в окне выбора объектов этого типа не видно, скорее всего, он на вкладке Выбор) и в трех указанных атрибутах есть приведенные подстроки...
кодом

Код: Выделить всё

(lsdbo.object_reference_view.id in      
          (SELECT av.object_id 
             FROM lsdbo.attrib_value_view av,  
                  lsdbo.value_string_view vv       
            WHERE av.value_id = vv.id and 
                  av.attrib_id = 100000001401013 and 
                  vv.attrib_id = 100000001401013 AND 
                  vv.Value0 like 'Газопровод%')
мы вытаскиваем ИД объектов, в атрибуте с ИД = 100000001401013 есть слово Газопровод, причем в самом начале значения атрибута... ну и остальное - по аналогии
но зачем эти проверки.... у нас ИД атрибута вроде один раз фигурирует... хотя авторам конечно виднее..
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Сообщение Старик Крупский »

А это, наверное, чтобы крепче держалось, господа :D
А вообще, надо покумекать :roll:
Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

ну да, это на тот случай, если в value_string будут две строки с одинаковыми id, но с разными attrib_id... не знаю, возможно ли такое...
а если невозможно - то зачем вообще в value_string колонка attrib_id?
непонятно вообще...
кстати, Александр, сорри, но кажется в приведенном Вами запросе все таки нету проверки на тип объекта. для этого должна быть немного другая конструкция...
но если мы не обращаем внимания на тип объекта - зачем тогда упоминание о таблице типов объекта?..

Код: Выделить всё

....
FROM
lsdbo.object_reference_view,                 
lsdbo.object_type_view
 WHERE (lsdbo.object_reference_view.type_id = lsdbo.object_type_view.id)
.... 
а что если было бы вот так:

Код: Выделить всё

....
FROM
lsdbo.object_reference_view,                 
 WHERE
....
????
ну где же Теххелп... они бы внесли ясность.... :wink:
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Сообщение Старик Крупский »

Если этот запрос используется в окне поиска объектов, то колонки с типами объектов чисто информативные. Там же в окне поиска есть колонки с типом и с датой последнего изменения - оттуда и object_type.
А насчет "крепче держалось" - по дополнительной связи может быстрее идти поиск. Думаю, что не всегда, надо проверять, но не на чем. Надо большу-у-у-ю базу.
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

Извиняюсь за молчание... разбирался
Понял следующее (использовал SQL Profiler) Окно выбора объекта (уже мое)
Изображение
результат запроса
Изображение
запрос

Код: Выделить всё

SELECT 
 //системные колонки
   //колонки экземпляра объекта  
       lsdbo.object_reference_view.id,                //ID объекта
       lsdbo.object_reference_view.type_id,           //ID типа объекта
       lsdbo.object_reference_view.description,       //Описание
   //колонки типа объекта 
       lsdbo.object_type_view.description,            //Описание 
       lsdbo.object_type_view.object_type,            //Вид
       lsdbo.object_type_view.mnemo,                  //Мнемо
   //колонки экземпляра объекта 
       lsdbo.object_reference_view.cd ,               //Дата изменения

 //пользовательские колонки
       (SELECT vv.value                               //атрибут 'статус продукта' 
          FROM lsdbo.attrib_value_view av,
               lsdbo.value_string_view vv 
         WHERE av.value_id = vv.id AND
               av.object_id = lsdbo.object_reference_view.id AND
               av.treelink_id = 0 AND
               av.attrib_id = 100007986500005) as Attr_3,
       (SELECT vv.value                               //атрибут 'информационный'
          FROM lsdbo.attrib_value_view av,
               lsdbo.value_numeric_view vv
         WHERE av.value_id = vv.id AND
               av.object_id = lsdbo.object_reference_view.id AND
               av.treelink_id = 0 AND
               av.attrib_id = 100004060500000) as Attr_4 

  FROM lsdbo.object_reference_view,
       lsdbo.object_type_view 

 WHERE (lsdbo.object_reference_view.type_id = lsdbo.object_type_view.id) AND
        (
         (lsdbo.object_type_view.mnemo = 'clt' AND    //по типу объекта
          lsdbo.object_reference_view.id in 
          (SELECT av.object_id                        //по значению атрибута 'город'
             FROM lsdbo.attrib_value_view av,
                  lsdbo.value_string_view vv 
            WHERE av.value_id = vv.id and
                  av.attrib_id = 3000000000023 and
                  vv.attrib_id = 3000000000023 AND
                  vv.Value0 like 'моск%')
          )
        )
т.е. в результате запроса получается представление (таблица) с 9 колонками 7 -системных +2 пользовательские

Вопросы
- нужно ли использовать все системные колонки?
- важна ли нумерация пользовательских колонок Attr3/4 или это ничего не означает?
- как на основе этого SQL запроса сделать отчет в Лоции? (в смысле использовать этот запрос на закладке отчета SQL вместо того который там по умолчанию)

p.s. Конечно автоматически напрашивается вопрос - а почему нельзя результаты отчета Лоции сохранить в подборку? насколько я понял инструмент же есть :roll:
Последний раз редактировалось Александр 17 окт 2006, 07:52, всего редактировалось 2 раза.

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

да, точно, потом уже и сам сообразил, для чего нужна lsdbo.object_type_view в FROM и lsdbo.object_reference_view.type_id = lsdbo.object_type_view.id в WHERE, без этого не получить значений для колонок
lsdbo.object_type_view.description,
lsdbo.object_type_view.object_type,
lsdbo.object_type_view.mnemo
которые есть в SELECT...
а вот насчет ускорения поиска.... хм... вряд ли... это дополнительная проверка все таки...
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

и все таки, объясни как построить быстрый отчет
- окно 'выбор объекта' делает запрос ко всей базе сразу
- отчет делает запрос к базе опираясь на связи выделенного объекта...???

что нужно настроить в отчете чтобы он делал запрос не по связям а напрямую ко всем данным? или как там правильно сказать?... не важно

Все тормоза отчетов связаны именно с этим обстоятельством? или нет? Как сделать ЧИСТЫЙ :? отчет? без связей?

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

по вопросу
как на основе этого SQL запроса сделать отчет в Лоции? (в смысле использовать этот запрос на закладке отчета SQL вместо того который там по умолчанию)
для этого нужно просто выбрать на вкладке Свойства в окне настройки отчета Глубину поиска объектов Пользовательский (смысле пользовательский запрос).
ну и потом на вкладку Отчет вставить сам текст запроса..
причем эта вкладка работает в двух режимах, редактора запроса и редактора вида отчета, режимы переключаются кнопкой Источник данных (у нее на картинке написано SQL) на панели инструментов
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

а... в догонку :-)
то, как работает отчет - это зависит от его настроек. если Вся база данных или Пользовательский - то связи выделенного объекта не учитываются... по крайней мере при отборе объектов...
вроде так...
я попробовал сделать простенький отчетик пользовательский, получилось :-)
только вот непонятно, можно ли из такого отчета устроить переход на сам объект, как это есть в обычных отчетах при наличии колонки isobject_id..
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

круто, все работает и быстро, проще было спросить у тебя в контексте вопроса чем почитать документацию :wink: спасибо
на счет вывода в колонку isobject_id - посмотрим :wink:

вот еще бы результаты этого отчета сразу поместить в подборку??
ну это так, мечты...
Последний раз редактировалось Александр 17 окт 2006, 12:50, всего редактировалось 1 раз.

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

ого!!! в этих пользовательских запросах работают всякие там группировки, фильтры и сортировки!!! обалдеть! вот это подарок!
надо это как то использовать...
даже фильтрацию можно в принципе делать в родном фильтре, а не в запросе... хотя что быстрее - вопрос...
а вообще... для отчетов по объектам может быть это и не очень необходимо, а вот для отчетов по документообороту - очень даже... прямо в Лоции можно получать списки невыполненных задач, например, для сотрудников какого то отдела... и не писать для этого свои приложения... круто! :roll:
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

потом поделишься? :wink: :wink: :roll:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Ответить