|
|
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Задача следующая, имеются две базы(бд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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2015, 23:16 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
Есть кнопка Data Set Parameter Binding... на закладке Binding у Table. Делается так: - Кладем Table, привязанный к выборке из БД1. Назовем ее Table1 - В ячейку детального бэнда кладем Table, привязанный к выборке из БД2. Назовем ее Table2 - В запросе для Table2 должен быть параметр, по которому выбираются записи для очередной строки Table1. - В диалоге Data Set Parameter Binding... указываем что надо положить в параметр запроса для Table2 из записи от Table1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 08:39 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
Спасибо! Но как оказалось, вариант с подчиненным запросом работает в разы медленнее. И теперь вопрос встал, как в Table красиво уложить join dataset? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 11:05 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
Можно попробовать с помощью фильтрации. Запрос для Table2 в этом случае должен быть без параметров. С выбором сразу всех записей и с выбором колонки, по которой надо отбирать для записи мастера. На закладке Filters указать выражение, по которому надо ограничивать Table2. Если будет более конкретный пример, с записями, можно придумать что-нибудь и с join dataset. Направление для копания -- условный показ строк. Закладка Properties=>Visibility ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 14:37 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
Появилась еще одна идея, можно ли передать в качестве параметра dataset бд2 набор полученный из dataset бд1. Т.е. делаю dataset для бд1, который выбирает все ключи для поиска в бд2 и передаю в dataset для бд2 получится тот одним запросом поднимет все нужные записи, а потом уже делать join dataset. Почитал, вроде как такое можно провернуть ч\з объявление переменных, но пока до меня не очень доходит как в datasete присвоить переменной найденные значения, а потом передать в др. dataset. Можете подсказать по этому поводу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 17:07 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
Не, датасеты через параметры не передавал. Может, все-таки разобраться почему оказался медленным вариант с подчиненным запросом? Индексы добавить, например, или запрос переписать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 19:02 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
На счет подчиненного запроса получается следующая картина, запрос вида: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. поднимает около 500000 строк в память и выполняется секунд 5-10 (при этом как понимаю основное торможение происходит уже в памяти при join-е). А запрос вида: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. выполняется 2-3 секунды, но как я уже говорил 600-700, а то и несколько тысяч раз(в зависимости от диапазона дат). Потому и думаю в сторону передачи списка в качестве параметра, чтобы в один запрос поднять нужные записи. а потом join. Что-то типа этого: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. На данный момент отчет выполняется около 3 минут, хотелось бы сократить до 20-30 секунд. Индекс особо не повесишь, таблица DB2ADMIN."ATTRIBUTES" имеет вид ID,ID_PROCESS,TYPE_VAR,VALUE_VAR. Т.е. эта таблица представляет собой список параметров и их значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 19:24 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
GuzyaИндекс особо не повесишь, таблица DB2ADMIN."ATTRIBUTES" имеет вид ID,ID_PROCESS,TYPE_VAR,VALUE_VAR. Т.е. эта таблица представляет собой список параметров и их значений. Судя по вот этому: Код: plsql 1. при отсутствии индексов будем иметь фуллскан по DB2ADMIN."ATTRIBUTES". Не знаю какой сервер БД, но обычное решение -- сделать индекс по функции Trim(Value_Var). Современные сервера вроде уже все это позволяют. Возможно, еще лучше будет индекс по Код: plsql 1. Чтобы в индексе были все нужные поля, и сервер даже не поднимал всю запись. Надеюсь, в подзапросах внутри SELECT используются справочники, и TYPE_PROCESSID_TYPE_PROCESS и STATUS_PROCESSES.ID_STATUS -- это первичные ключи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2015, 07:22 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
Еще про передачу списка в параметре. Обычная рекомендация -- использовать временную таблицу. Если есть возможность выполнить код перед вызовом BIRT-а, можно взять нужный список из первой базы, положить во временную таблицу второй базы, и строить отчет только по второй базе. Можно, конечно, попробовать использовать базо-специфичные типы данных. Например, у Оракла есть коллекции, которые можно передавать в bind variables, но тут начнутся вопросы насколько это поддерживается JDBC-драйвером и насколько придется завязываться на специфичные классы этого драйвера. Я бы в BIRT-е таким не занимался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2015, 07:28 |
|
||
|
Как в Birt, в dataset передать в качестве параметра выборку из др. dataset?
|
|||
|---|---|---|---|
|
#18+
Финт ушами удался. В dataset для бд1 делаю выборку ключей, загоняю в переменную, передаю в dataset бд2 в IN. Потом делаю join dataset. Теперь отчет выводится достаточно шустро. Собственно остался вопрос как красиво оформить в Table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2015, 10:12 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38920606&tid=2125629]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
60ms |
get topic data: |
6ms |
get forum data: |
6ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 362ms |

| 0 / 0 |
