Текущее время: Чт, июн 06 2024, 08:21

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




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пн, фев 25 2013, 16:06 
Начинающий
Начинающий

Зарегистрирован:
Пн, фев 18 2013, 16:44
Сообщения: 7
помогите все-таки разобраться!

из справки по FOX'у нашел:
Цитата:
Before executing the parameter group, the system decides which reference data is required based on a formula. The original selection is enhanced for the reference data selection.


т.е. перед выполнением кода функции выполняется две выборки: из фильтра- original selection и из определения функции- reference data selection, и одна другой дополняется...
У меня вопрос - если "original selection" не содержит ни одной записи данных, то reference data selection не выбирается? и функция соответственно выполниться не может?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пн, фев 25 2013, 21:05 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
Lum написал(а):
помогите все-таки разобраться!

из справки по FOX'у нашел:
Цитата:
Before executing the parameter group, the system decides which reference data is required based on a formula. The original selection is enhanced for the reference data selection.


т.е. перед выполнением кода функции выполняется две выборки: из фильтра- original selection и из определения функции- reference data selection, и одна другой дополняется...
У меня вопрос - если "original selection" не содержит ни одной записи данных, то reference data selection не выбирается? и функция соответственно выполниться не может?

Выбирается. Может. Если есть FOREACH ... IN REFDATA

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Вт, фев 26 2013, 10:21 
Начинающий
Начинающий

Зарегистрирован:
Пн, фев 18 2013, 16:44
Сообщения: 7
Soulsurfer написал(а):
Выбирается. Может. Если есть FOREACH ... IN REFDATA


а если не нужен foreach?

простой пример
в кубе содержиться:
amount Rate version
'0' '0,1' '1'
'100' '0' '2'

нужно переложить amount на версию 3 умножив на rate, т.е. создать запись:
amount Rate version
'110' '0' '3'
ставлю в фильтре версию 3 (соотв. выборка будет пустой), код фокса:

{amount}={amount|version=2}*{rate|version=1}.

не работает), 0 считано, 0 создано, 0 изменено, 0 удалено.
почему? ведь поидее выборка ссылочных данных должна сработать по условиям "version = 2 or 1"


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Вт, фев 26 2013, 11:18 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Введите версию в операнд.
А в фильтре оставьте все как есть.
Есть нюанс с обращением к реф.данным через "|", они действительно не работают если нет данных в блоке.
Это как обмен между блоками данных (сквозной).

P.S. К сожалению не встречал вменяемого описания работы с ними. Все опытным путем.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Вт, фев 26 2013, 22:14 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
Lum написал(а):
Soulsurfer написал(а):
Выбирается. Может. Если есть FOREACH ... IN REFDATA


а если не нужен foreach?

Придумайте, как его вставить. Цикл, который отработает только один раз - это тоже цикл :)
С FOREACH все начинает работать :)

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Вт, май 21 2013, 16:27 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
raaleksandr написал:
Сейчас живого примера нет, но вроде как данные не из уровня агрегации МОГУТ попадать в refdata.
FOX внутренне формирует ДОПОЛНИТЕЛЬНЫЙ фильтр для refdata, отличный от основного. Как и говорилось выше, ссылочные данные не блокируются - сама эта фраза говорит о том, что ссылочные данные могут выходить за пределы фильтра.

Мне кажется, что из другого уровня агрегации данные точно не могут попадать в функцию планирования, но в рефдата, наверное, могут попадать данные не из фильтра?
Но я бы все равно хотел бы услышать более полное объяснение, что такое foreach ... in refdata. Объяснение типа "refdata - это правая часть формулы" выглядит непонятно.

Мне казалось, что refdata, это набор данных из уровня агрегации, который будет получен, если в качестве фильтра взять значения признаков текущего блока. Правильно ли это предположение? И есть ли у кого-то ссылки на документацию, которая подтвердит это предположение или опровергнет его?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Вт, май 21 2013, 19:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
Road Runner написал:
Мне казалось, что refdata, это набор данных из уровня агрегации, который будет получен, если в качестве фильтра взять значения признаков текущего блока. Правильно ли это предположение? И есть ли у кого-то ссылки на документацию, которая подтвердит это предположение или опровергнет его?

Нет. Refdata - это данные из того же уровня агрегации, но которые могут выходить за ограничения текущего фильтра. Для полного просветления надо гонять функции планирования в режиме трассировки, чтобы понять какие записи появляются в Before, какие в After, а какие в reference data. Формирование Refdata происходит в момент компиляции функции планирования перед запуском.

http://help.sap.com/saphelp_nw73/helpda ... ameset.htm - тут есть про refdata

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Ср, май 22 2013, 15:14 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
Soulsurfer написал(а):
Road Runner написал:
Мне казалось, что refdata, это набор данных из уровня агрегации, который будет получен, если в качестве фильтра взять значения признаков текущего блока.

Нет. Refdata - это данные из того же уровня агрегации, но которые могут выходить за ограничения текущего фильтра.

Спасибо за ответ.
Увы, просто я выразился не совсем по-русски. Я также имел ввиду, что данные с того же самого уровня агрегации, но, что набор данных получается во время запуска-компиляции экземпляра функции выборкой всех записей уровня агрегации, если выборку ограничить теми признаками и их значениями, которые представлены в блоке, для которого была запущена функция. Вот это предположение правильное?

Soulsurfer написал(а):
Для полного просветления надо гонять функции планирования в режиме трассировки, чтобы понять какие записи появляются в Before, какие в After, а какие в reference data.

Ну, я трассировку смотрел, на ее основе вот сделал предположение, но до конца не уверен в нем.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Ср, май 29 2013, 08:24 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
С одной стороны, в документации советуется по возможности избегать операторов foreach, поскольку они сильно влияют на производительность.
С другой, на этом форуме читал совет, что в фильтре и в изменяемых признаках надо указывать только тот срез, который действительно меняется.
С третей стороны, создавать дополнительные уровни агрегации тоже не очень хочется.
Чем же поступиться с точки зрения "бестпрактис" в моем случае?
Случай, например, такой:
в мультипровайдере два куба - для ввода и из ЕРП, в обоих есть признаки "счет", "партнер" и "статус", но в форме ввода нет аналитики "партнер" и введенные пользователем значения записываются с пустой аналитикой на "статус" = "рабочий".
мне надо написать функцию, которая для каждого счета проверяет общую сумму значений из ЕРП и введенную - они должны быть равны. Если не равны, надо вывести сообщение о том, по какому счету они не равны.
Нюанс в том, что следующая функция, если проверка прошла успешно, должна копировать данные со статуса "рабочий" на статус "утвержденный" и при этом аналитика "партнер" в данных из ЕРП не должна теряться, а копироваться как есть.
Варианты, как я понимаю, у меня такие:
1. Сделать для функции проверки отдельный уровень агрегации, с аналитиками "инфопровайдер" и "счет", без партнера, добавить счет в изменяемые признаки и в функции планирования просто сравнивать {KF,ERP, account} и {KF, manual, account} в конструкции foreach.
2. Запускать все функции на одном и том же уровне агрегации (на нем, соответственно, есть "партнер"), но сделать отдельный фильтр, который вернет данные с обоих провайдеров, добавить партнера в изменяемые признаки, чтобы исключить эту аналитику из определения блока, и делать вложенный foreach по партнеру.
3. Запускать все функции на одном и том же уровне агрегации (на нем, соответственно, есть "партнер"), использовать тот же фильтр, который используется для ввода, добавить партнера в изменяемые признаки, чтобы исключить эту аналитику из определения блока, и делать вложенный foreach in refdata по партнеру.

Я пока склоняюсь к варианту №3, но хотел бы уточнить, может быть лучше делать отдельный уровень агрегации, зато исключить вложенный foreach (вариант 1)? Или, с учетом того, что довольно много отзывов остранной работе refdata плюс, насколько я понимаю, foreach in refdata более затратная по ресурсам, поэтому сделать дополнительный и избыточный фильтр, но зато не использовать refdata (вариант 2)?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пт, май 31 2013, 01:14 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
С моей точки зрения лучше всего выглядит вариант 1, но ему требуются изменения:
- account включается в уровень агрегации, но в функции он в свободных признаках, а не в полях для изменения
- функцию желательно запускать на фильтре ограниченном только инфо-провайдером = "manual"

т.е. что-то вида

FOREACH KF in refdata
razn = {KF} - {KF | 0INFOPROV = 'ERP'}
-- какая-нибудь проверка razn на равенство 0
ENDFOR.

C такой реализацией вы обезопасите себя от возможных проблем с блокировками в будущем, когда какой-нибудь другой пользователь захочет тоже прочитать данные из ERP-кубика, но не сможет этого сделать, из-за блокировки вашей функцией.

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Выбор языка для реализации логики функций планирования
СообщениеДобавлено: Пн, дек 16 2013, 09:41 
Специалист
Специалист

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Также интересует опыт форумчан, занимающихся BI IP, в части выбора языка для функций планирования. В курсе написано, что использовать ABAP рекомендуется для функций с тяжелой логикой. В остальных случаях рекомендуется использовать FOX. Есть ли смысл использовать ABAP для простых функций? Возможно, есть увеличение производительности или какие-нибудь другие аспекты?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выбор языка для реализации логики функций планирования
СообщениеДобавлено: Пн, дек 16 2013, 13:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
ski написал:
Есть ли смысл использовать ABAP для простых функций? Возможно, есть увеличение производительности или какие-нибудь другие аспекты?


Практика показывает, что производительности хватает. FOX всё равно в ABAP интерпретируется. А поддерживать FOX попроще (код понятнее).
Для производительности работайте с фильтрами, чтобы в них как можно меньше данных попадало.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Чт, дек 19 2013, 17:22 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, мар 23 2012, 11:54
Сообщения: 58
Пол: Мужской
Наиболее производительно - это использовать функцию на абапе без создания блока.
G написал:
Для производительности работайте с фильтрами, чтобы в них как можно меньше данных попадало.

Есть только одно правило - в фильтре должны быть только целевые данные. Остальные берутся из refdata.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Чт, дек 19 2013, 21:17 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
zzvl написал:
Наиболее производительно - это использовать функцию на абапе без создания блока.

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

zzvl написал:
Есть только одно правило - в фильтре должны быть только целевые данные. Остальные берутся из refdata.

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

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пт, янв 17 2014, 17:17 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
Для однопользовательского режима может и прокатит. Для одновременной работы большого числа пользователей - это прямой путь к срочному фиксу разных багов во время опытно-промышленной эксплуатации ;)

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3  След.

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


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

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


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

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