Текущее время: Пн, авг 25 2025, 06:07

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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