Текущее время: Вс, авг 24 2025, 23:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Как правильно динамически сформировать фильтр у DTP?
СообщениеДобавлено: Пн, сен 01 2008, 15:54 
Ассистент
Ассистент

Зарегистрирован:
Пт, июн 20 2008, 08:39
Сообщения: 31
Откуда: msk
Пол: Мужской
Входные данные
BI 7.0 SP18

1. Нужно заполнить несколько полей в фильтре значениями из z-таблицы.
2. Одно из полей нужно заполнить перечнем значений.

Пишу такой код:

* выборка значений из z-таблицы

SELECT BNAME ADMIN ZCRFORM ZCRVERS ZCRPERIOD CALDAY FLG
FROM ZTUSER_ADM
INTO CORRESPONDING FIELDS OF TABLE IT_ZTUSER_ADM
WHERE ZTUSER_ADM~BNAME = sy-uname.



* для ADMIN по иерархии ищем всех "детей" и заполняем структуру l_t_range

LOOP AT IT_ZTUSER_ADM.
SELECT HIEID OBJVERS NODEID IOBJNM NODENAME TLEVEL LINK PARENTID
CHILDID NEXTID
FROM /BIC/HZADM
INTO CORRESPONDING FIELDS OF TABLE it_hzadm
WHERE /BIC/HZADM~PARENTID = IT_ZTUSER_ADM-ADMIN.

LOOP AT it_hzadm.
l_t_range-fieldname = '/BIC/ZADM'.
l_t_range-sign = 'I'.
l_t_range-option = 'EQ'.
l_t_range-low = it_hzadm-nodeid .
l_t_range-high = it_hzadm-nodeid .
append l_t_range.
ENDLOOP.
ENDLOOP.

*фильтры для оставщихся полей

l_t_range-fieldname = '/BIC/ZCRFORM'.
l_t_range-sign = 'I'.
l_t_range-option = 'EQ'.
l_t_range-low = '00503127'.
l_t_range-high = '00503127'.
append l_t_range.

l_t_range-fieldname = '/BIC/ZCRPERIOD'.
l_t_range-sign = 'I'.
l_t_range-option = 'EQ'.
l_t_range-low = IT_ZTUSER_ADM-ZCRPERIOD .
l_t_range-high = IT_ZTUSER_ADM-ZCRPERIOD .
append l_t_range.

ну и т.д.



Теперь наблюдения и вопросы:
1. Если выполнить DTP, количество записей в экстракции = 0, тут же тыкаем монитор, отладка. Выполняем и количество записей >0.
Как так?
Далее:
2. Если убрать заполнение фильтра по l_t_range-fieldname = '/BIC/ZADM', то в экстракции количество записей >0,


т.е. получается, что фильтр не понимает, когда я пытаюсь ограничить поле списком отдельных значений.

И так вопросы:
Как правильно создать фильтр для нескольких полей?
Как правильно ограничить одно из полей списком значений? (не интервал!!!)



Ну и еще на понимание вопрос.

Структура l_t_range общая для всего фильтра DTP?
Если я ее заполняю из одной рутинки (какого-то поля) для нескольких полей, то фильтрация по этим полям не срабатывает.
Если на этих полях поставить пустые подпрограмки, то все ок.
Так и должно быть? В какой последовательности эти рутинки (для нескольких полей) отрабатывают?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 01 2008, 16:03 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
DTP и трансформации сейчас работают не всегда хорошо. Постарайтесь как-то решить по-другому эту загрузку, по-минимуму используя фильтры на DTP. Замечены явные проблемы с работой фильтров и пониманием диапазонов. Постепенно всё допишут.
Если слишком уж надо - работайте с фильтрами инфопакета или программно на трансформации отсеивайте лишние записи - это работает хорошо.

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 01 2008, 16:25 
Ассистент
Ассистент

Зарегистрирован:
Пт, июн 20 2008, 08:39
Сообщения: 31
Откуда: msk
Пол: Мужской
Самое смешное, этот-же код на другом DTP на ура отрабатывает, чудеса какие-то....
И в нотах не нашел, есть нота, описывающая как раз такую проблему (количество записей после фильра = 0), но она решена в 18 сервис паке...

Zharik написал(а):
DTP и трансформации сейчас работают не всегда хорошо. Постарайтесь как-то решить по-другому эту загрузку, по-минимуму используя фильтры на DTP. Замечены явные проблемы с работой фильтров и пониманием диапазонов. Постепенно всё допишут.
Если слишком уж надо - работайте с фильтрами инфопакета .



Я может сейчас глупость скажу, с bw недавно :) но, данные копируется из куба в куб, где тут инфопакет?

Zharik написал(а):
или программно на трансформации отсеивайте лишние записи - это работает хорошо.

все дело в том, что режим экстракции "полный".
т.е. получается, что извлекаем все данные из источника и отрезаем лишнее в start routine в трансформации? Мне кажется, тормозить сильно будет... а нужно чтобы быстро. - DTP по кнопке в екселe вызывается через запуск цепочки и пользователь ждет этих данных.

PS: не спрашивайте зачем так сделано, сам знаю что изврат полный, но вот решили написать на BW формирование бюджетной отчетности со всеми проверками, физическим хранение вновь сформированных данных и т.д..


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 15 2008, 13:58 
Ассистент
Ассистент

Зарегистрирован:
Пт, июн 20 2008, 08:39
Сообщения: 31
Откуда: msk
Пол: Мужской
Ну вобщем экспериментальным путем было выяснено, что динамический фильтр в DTP не работает, если признак ограничивать не отдельным значением, а списком.
Хотя, как уже говорил, если нажать отладку, то все ок.

Ладно перенес фильтрацию дальше, в трансформацию (подпрограмма запуска).

Вылезла проблемма. Дело в том что данный признак релевантныя для полномочий.

DTP стоит в цепочке, цепочка запускается из под пользователя...

Вот и получается, что DTP пытается извлечь данные по всем значениям признака и обламывается.


Чего делать? в цепочке в настройке вроде есть возможность запустить от имени другого пользователя...

Как это работает? т.е. надо ведь где-то логин и пароль прописать. Цепочка вызывается АБАПом.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно динамически сформировать фильтр у DTP?
СообщениеДобавлено: Пн, сен 15 2008, 14:29 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Вс, июн 26 2005, 22:41
Сообщения: 1135
Откуда: Москва
Пол: Мужской
scp написал:
1. Если выполнить DTP, количество записей в экстракции = 0, тут же тыкаем монитор, отладка. Выполняем и количество записей >0.
Как так?

Проверьте, какой текст получился в фильтре DTP из администрирования цели DTP
scp написал:
2. Если убрать заполнение фильтра по l_t_range-fieldname = '/BIC/ZADM', то в экстракции количество записей >0

попробуйте вынести l_t_range-fieldname = '/BIC/ZADM' выше loop.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно динамически сформировать фильтр у DTP?
СообщениеДобавлено: Пн, сен 15 2008, 14:36 
Ассистент
Ассистент

Зарегистрирован:
Пт, июн 20 2008, 08:39
Сообщения: 31
Откуда: msk
Пол: Мужской
Bkmz написал:
scp написал:
1. Если выполнить DTP, количество записей в экстракции = 0, тут же тыкаем монитор, отладка. Выполняем и количество записей >0.
Как так?

Проверьте, какой текст получился в фильтре DTP из администрирования цели DTP
scp написал:
2. Если убрать заполнение фильтра по l_t_range-fieldname = '/BIC/ZADM', то в экстракции количество записей >0

попробуйте вынести l_t_range-fieldname = '/BIC/ZADM' выше loop.


1-е посмотрю.
2-е я не могу из цикла вынести, весь смысл в том, что мне надо '/BIC/ZADM' ограничить СПИСКОМ.
Если ограничить ОДНИМ значением, то все ок.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно динамически сформировать фильтр у DTP?
СообщениеДобавлено: Вт, сен 16 2008, 08:24 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Вс, июн 26 2005, 22:41
Сообщения: 1135
Откуда: Москва
Пол: Мужской
scp написал:
2-е я не могу из цикла вынести, весь смысл в том, что мне надо '/BIC/ZADM' ограничить СПИСКОМ.
Если ограничить ОДНИМ значением, то все ок.

Я когда-то делал такое ограничение - у меня работало, но!
В фильтре есть ограничение на число записей в поле фильтра, я на него наткнулся и из-за этого фильтр не работал, вспомнить допустимое количество не могу, но оно есть - точно
Ну и еще одно маленькое дополнение: при большом числе условий фильтр работает очень медленно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно динамически сформировать фильтр у DTP?
СообщениеДобавлено: Вт, сен 16 2008, 12:58 
Ассистент
Ассистент

Зарегистрирован:
Пт, июн 20 2008, 08:39
Сообщения: 31
Откуда: msk
Пол: Мужской
Bkmz написал:
scp написал:
2-е я не могу из цикла вынести, весь смысл в том, что мне надо '/BIC/ZADM' ограничить СПИСКОМ.
Если ограничить ОДНИМ значением, то все ок.

Я когда-то делал такое ограничение - у меня работало, но!
В фильтре есть ограничение на число записей в поле фильтра, я на него наткнулся и из-за этого фильтр не работал, вспомнить допустимое количество не могу, но оно есть - точно
Ну и еще одно маленькое дополнение: при большом числе условий фильтр работает очень медленно.


Я бы поверил в то, что я наткнулся на ограничение, если бы не одно но:
"Если выполнить DTP, количество записей в экстракции = 0, тут же тыкаем монитор, отладка. Выполняем и количество записей >0".

Т.е. в режиме отладки фильтр работает "на ура" :(


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB