powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
10 сообщений из 10, страница 1 из 1
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920141
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Задача следующая, имеются две базы(бд1,бд2) из которых надо получить данные и вывести в отчет.
В бд1 имеется таблица из которой я вытаскиваю (по параметрам) данные, в том числе и некий ключ(строка) по которой мне нужно вытащить информацию из бд2. В бд2 ключу может соответствовать 0 и более записей.
Собственно сделал ч\з join dataset и table с двумя строками detail, верхняя строка бд1 нижняя бд2. Но получается не очень красиво, во первых пустая строка detail(бд2) всегда выводится, во вторых если в бд2 несколько соответствий, то каждый раз выводятся обе строки detail. А хотелось бы строка из бд1 и все строки из бд2.
К тому же dataset из бд2 получается не параметризованным и поднимает в память почти 500000 строк(и это на тестовой бд), хотя по факту нужно 500-600 строк.
Каким образом можно в dataset в качестве параметра передавать результат(поле) из другого dataset и как их подружить с table?
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920208
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть кнопка Data Set Parameter Binding... на закладке Binding у Table.

Делается так:
- Кладем Table, привязанный к выборке из БД1. Назовем ее Table1
- В ячейку детального бэнда кладем Table, привязанный к выборке из БД2. Назовем ее Table2
- В запросе для Table2 должен быть параметр, по которому выбираются записи для очередной строки Table1.
- В диалоге Data Set Parameter Binding... указываем что надо положить в параметр запроса для Table2 из записи от Table1.
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920256
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Но как оказалось, вариант с подчиненным запросом работает в разы медленнее.
И теперь вопрос встал, как в Table красиво уложить join dataset?
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920349
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать с помощью фильтрации.
Запрос для Table2 в этом случае должен быть без параметров. С выбором сразу всех записей и с выбором колонки, по которой надо отбирать для записи мастера.
На закладке Filters указать выражение, по которому надо ограничивать Table2.

Если будет более конкретный пример, с записями, можно придумать что-нибудь и с join dataset. Направление для копания -- условный показ строк. Закладка Properties=>Visibility
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920454
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появилась еще одна идея, можно ли передать в качестве параметра dataset бд2 набор полученный из dataset бд1.
Т.е. делаю dataset для бд1, который выбирает все ключи для поиска в бд2 и передаю в dataset для бд2 получится тот одним запросом поднимет все нужные записи, а потом уже делать join dataset.
Почитал, вроде как такое можно провернуть ч\з объявление переменных, но пока до меня не очень доходит как в datasete присвоить переменной найденные значения, а потом передать в др. dataset.
Можете подсказать по этому поводу?
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920481
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, датасеты через параметры не передавал.
Может, все-таки разобраться почему оказался медленным вариант с подчиненным запросом? Индексы добавить, например, или запрос переписать.
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920495
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На счет подчиненного запроса получается следующая картина,
запрос вида:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 
(SELECT DESCRIPTION_PROCESS FROM DB2ADMIN.TYPE_PROCESS TYPE WHERE TYPE.ID_TYPE_PROCESS=PROC.ID_TYPE_PROCESS),
(SELECT DESCRIPTION_STATUS FROM DB2ADMIN.STATUS_PROCESSES STATUS WHERE STATUS.ID_STATUS=PROC.ID_STATUS),
DATEOFCOMMING,
DATEOFCOMPLETION,
R_ID 
FROM DB2ADMIN."PROCESSES" PROC,
(SELECT ID_PROCESS,TRIM(VALUE_VAR) AS R_ID FROM DB2ADMIN."ATTRIBUTES" WHERE VALUE_VAR LIKE'%/1_') ATTR
WHERE PROC.ID_PROCESS=ATTR.ID_PROCESS



поднимает около 500000 строк в память и выполняется секунд 5-10 (при этом как понимаю основное торможение происходит уже в памяти при join-е).

А запрос вида:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
(SELECT DESCRIPTION_PROCESS FROM DB2ADMIN.TYPE_PROCESS TYPE WHERE TYPE.ID_TYPE_PROCESS=PROC.ID_TYPE_PROCESS),
(SELECT DESCRIPTION_STATUS FROM DB2ADMIN.STATUS_PROCESSES STATUS WHERE STATUS.ID_STATUS=PROC.ID_STATUS),
DATEOFCOMMING,
DATEOFCOMPLETION
FROM DB2ADMIN."PROCESSES" PROC
WHERE ID_PROCESS IN
(SELECT ID_PROCESS FROM DB2ADMIN."ATTRIBUTES" WHERE TRIM(VALUE_VAR)=?)



выполняется 2-3 секунды, но как я уже говорил 600-700, а то и несколько тысяч раз(в зависимости от диапазона дат).

Потому и думаю в сторону передачи списка в качестве параметра, чтобы в один запрос поднять нужные записи. а потом join.
Что-то типа этого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
(SELECT DESCRIPTION_PROCESS FROM DB2ADMIN.TYPE_PROCESS TYPE WHERE TYPE.ID_TYPE_PROCESS=PROC.ID_TYPE_PROCESS),
(SELECT DESCRIPTION_STATUS FROM DB2ADMIN.STATUS_PROCESSES STATUS WHERE STATUS.ID_STATUS=PROC.ID_STATUS),
DATEOFCOMMING,
DATEOFCOMPLETION
FROM DB2ADMIN."PROCESSES" PROC
WHERE ID_PROCESS IN
(SELECT ID_PROCESS FROM DB2ADMIN."ATTRIBUTES" WHERE TRIM(VALUE_VAR) IN ( LIST ))



На данный момент отчет выполняется около 3 минут, хотелось бы сократить до 20-30 секунд.

Индекс особо не повесишь, таблица DB2ADMIN."ATTRIBUTES" имеет вид ID,ID_PROCESS,TYPE_VAR,VALUE_VAR. Т.е. эта таблица представляет собой список параметров и их значений.
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920606
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GuzyaИндекс особо не повесишь, таблица DB2ADMIN."ATTRIBUTES" имеет вид ID,ID_PROCESS,TYPE_VAR,VALUE_VAR. Т.е. эта таблица представляет собой список параметров и их значений.

Судя по вот этому:
Код: plsql
1.
(SELECT ID_PROCESS FROM DB2ADMIN."ATTRIBUTES" WHERE TRIM(VALUE_VAR) IN ( LIST ))



при отсутствии индексов будем иметь фуллскан по DB2ADMIN."ATTRIBUTES". Не знаю какой сервер БД, но обычное решение -- сделать индекс по функции Trim(Value_Var). Современные сервера вроде уже все это позволяют.
Возможно, еще лучше будет индекс по
Код: plsql
1.
ATTRIBUTES (TRIM(VALUE_VAR), ID_PROCESS)


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

Надеюсь, в подзапросах внутри SELECT используются справочники, и TYPE_PROCESSID_TYPE_PROCESS и STATUS_PROCESSES.ID_STATUS -- это первичные ключи.
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920607
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще про передачу списка в параметре.
Обычная рекомендация -- использовать временную таблицу. Если есть возможность выполнить код перед вызовом BIRT-а, можно взять нужный список из первой базы, положить во временную таблицу второй базы, и строить отчет только по второй базе.

Можно, конечно, попробовать использовать базо-специфичные типы данных. Например, у Оракла есть коллекции, которые можно передавать в bind variables, но тут начнутся вопросы насколько это поддерживается JDBC-драйвером и насколько придется завязываться на специфичные классы этого драйвера. Я бы в BIRT-е таким не занимался.
...
Рейтинг: 0 / 0
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
    #38920743
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Финт ушами удался.
В dataset для бд1 делаю выборку ключей, загоняю в переменную, передаю в dataset бд2 в IN. Потом делаю join dataset. Теперь отчет выводится достаточно шустро.
Собственно остался вопрос как красиво оформить в Table.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]