Текущее время: Пт, мар 29 2024, 16:47

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




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

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Добрый день! Поскажите, пожалуйста, чем отличается оператор конструкция "FOREACH параметр1, параметр2 IN SELECTION." от "FOREACH параметр1, параметр2." ? Откуда беруться данные в цикле "FOREACH параметр1, параметр2 IN SELECTION" - из уровня агрегации, из рабочей книги?

Никак не могу разобраться с FOX - то ли документация читаю не ту, то ли...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пт, июн 22 2012, 08:35 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
ski написал:
Добрый день! Поскажите, пожалуйста, чем отличается оператор конструкция "FOREACH параметр1, параметр2 IN SELECTION." от "FOREACH параметр1, параметр2." ? Откуда беруться данные в цикле "FOREACH параметр1, параметр2 IN SELECTION" - из уровня агрегации, из рабочей книги?

Никак не могу разобраться с FOX - то ли документация читаю не ту, то ли...


Обычный FOREACH перебирает значения признака из тех, что попадаются в выбранных блоках данных (т.е. из тех данных, которые сейчас реально существуют в кубе или буфере планирования), а с приставкой IN SELECTION перебор идет по значениям заданным в фильтре, даже если по этим значениям пока нет данных.
Например, мы хотим скопировать данные по кварталам предыдущего года в соответствующие кварталы текущего (с какими-то доп. преобразованиями),
но при этом на целевых координатах у нас пока нет данных.
Задаем в фильтре целевые кварталы: 1.2009 - 4.2009

DATA CQY TYPE 0CALQARTER.
DATA PQY TYPE 0CALQARTER.

FOREACH CQY IN SELECTION.
PQY = TMVL (CQY, -4).
{показатель, CQY } = {показатель, PQY } * 1,1.
ENDFOR.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пт, июн 22 2012, 12:30 
Специалист
Специалист

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Больше спасибо за разъяснения!
Извиняюсь за наглость, а циклы "FOREACH <data> IN REFDATA" и "FOREACH <data> IN VARIABLE <bw_var>" имеют какие различия?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пт, июн 22 2012, 13:09 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
ski написал:
Извиняюсь за наглость, а циклы "FOREACH <data> IN REFDATA" и "FOREACH <data> IN VARIABLE <bw_var>" имеют какие различия?

"FOREACH <data> IN REFDATA" - перебирает значения признака встречающиеся в ссылочных данных.
FOREACH <data> IN VARIABLE <bw_var> - перебирает значения признака заданные в BEx переменной <bw_var>. Если переменная типа узел иерархии. то нужно задать дополнительные параметры, такие как: имя иерархии, версия (если ведется), контрольная дата (если иерархия зависит от времени).


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

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Air_demon написал(а):
ski написал:
Извиняюсь за наглость, а циклы "FOREACH <data> IN REFDATA" и "FOREACH <data> IN VARIABLE <bw_var>" имеют какие различия?

"FOREACH <data> IN REFDATA" - перебирает значения признака встречающиеся в ссылочных данных.
FOREACH <data> IN VARIABLE <bw_var> - перебирает значения признака заданные в BEx переменной <bw_var>. Если переменная типа узел иерархии. то нужно задать дополнительные параметры, такие как: имя иерархии, версия (если ведется), контрольная дата (если иерархия зависит от времени).


Еще раз спасибо, буду дальше читать руководство.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Ср, июн 27 2012, 14:56 
Специалист
Специалист

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Подскажите, пжста, что обозначает вертикальная черта "|" в коде FOX. Не смог найти ни в одном руководстве.
Code:
0AMOUNT2 = {0AMOUNT, L_0CALQUART1, L_0FISCPER3_SRC, 992, 03| ZCOSTELEM = #} / 3.


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

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Price Planning
In this example the prices are stored in the transaction data. Characteristics to be changed are key figure name, version (0VERSION ) fiscal year (0FYEAR ) and customer (0CUSTOMER ). It is planned in version 1. Prices are stored in version 2. The records have the special feature that the characteristics Customer and Fiscal Year have the value "non assigned", and must therefore be included in the quantity of characteristics to be changed. Otherwise, for every object to be planned in version 1, there has to be an object in version 2 that can be used to determine the price. A message is issued if no price is planned for an article. The calculation is only executed if the planned combination {QUANTITY,1,FYEAR,CUSTOMER} is greater than 0.

DATA CUSTOMER TYPE 0CUSTOMER.
DATA FYEAR TYPE 0FYEAR.
DATA ARTICLE TYPE 0ARTICLE.
IF {PRICE,2,#,#} = 0.
ARTICLE = OBJV( ).
MESSAGE I001(/SEM/003) WITH ARTICLE.
ELSE.
FOREACH FYEAR, CUSTOMER
IF {QUANTITY,1,FYEAR,CUSTOMER} > 0.
{REVENUE,1,FYEAR,CUSTOMER} = {QUANTITY,1,FYEAR,CUSTOMER} * {PRICE,2,#,#}.
ENDIF.
ENDFOR.
ENDIF.
You may expect the characteristic Article to appear in the list of characteristics to be changed, even though the prices used for the calculation refer to Article. Using the Article characteristic as an example, the following is true:

DATA CUSTOMER TYPE 0CUSTOMER.
DATA FYEAR TYPE 0FYEAR.
DATA ARTICLE TYPE 0ARTICLE. FOREACH ARTICLE, FYEAR, CUSTOMER.
IF {PRICE,2,#,#,ARTICLE} = 0.
MESSAGE I001(/SEM/003) WITH ARTICLE.
ELSE.
IF {QUANTITY,1,FYEAR,CUSTOMER,ARTICLE} > 0.
{REVENUE,1,FYEAR,CUSTOMER,ARTICLE} = {QUANTITY,1,FYEAR,CUSTOMER,ARTICLE} * {PRICE,2,#,#,ARTICLE}.
ENDIF.
ENDIF.
ENDFOR.
The characteristic is superfluous to the formula as the values of the characteristic are not changed. When calculating the planned revenue, the same article is referred to on both sides of the relational operator. Under these circumstances SAP advises against including the characteristic in the quantity of characteristics to be changed, as it is not required for the calculation, but negatively affects performance when the values are read. Another way to accelerate the formula is to save the value of the element {PRICE,2,#,#} in an auxiliary variable and work with this. If the value of a characteristic is required to issue error messages or determine attribute values, the value can be read by function OBJV().

You can make the formula even shorter by accessing the reference data explicitely. In this case there are no characteristics to be changed except for the key figure name. The formula is run through the data record. A FOREACH loop over the characteristics to be changed is not necessary.

DATA ARTICLE TYPE 0ARTICLE.
IF {PREIS | 0VERSION = 2,0GJAHR = #,0CUSTOMER = #} = 0.
ARTICLE = OBJV( ).
MESSAGE I001(/SEM/003) WITH ARTICLE.
ELSE.
ERLOS = MENGE * { PREIS | 0VERSION = 2,0GJAHR = #,0CUSTOMER = #}.
ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пт, июн 29 2012, 09:37 
Специалист
Специалист

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Air_demon написал(а):
Price Planning
In this example the prices are stored in the transaction data. Characteristics to be changed are key figure name, version (0VERSION ) fiscal year (0FYEAR ) and customer (0CUSTOMER ). It is planned in version 1. Prices are stored in version 2. The records have the special feature that the characteristics Customer and Fiscal Year have the value "non assigned", and must therefore be included in the quantity of characteristics to be changed. Otherwise, for every object to be planned in version 1, there has to be an object in version 2 that can be used to determine the price. A message is issued if no price is planned for an article. The calculation is only executed if the planned combination {QUANTITY,1,FYEAR,CUSTOMER} is greater than 0.

DATA CUSTOMER TYPE 0CUSTOMER.
DATA FYEAR TYPE 0FYEAR.
DATA ARTICLE TYPE 0ARTICLE.
IF {PRICE,2,#,#} = 0.
ARTICLE = OBJV( ).
MESSAGE I001(/SEM/003) WITH ARTICLE.
ELSE.
FOREACH FYEAR, CUSTOMER
IF {QUANTITY,1,FYEAR,CUSTOMER} > 0.
{REVENUE,1,FYEAR,CUSTOMER} = {QUANTITY,1,FYEAR,CUSTOMER} * {PRICE,2,#,#}.
ENDIF.
ENDFOR.
ENDIF.
You may expect the characteristic Article to appear in the list of characteristics to be changed, even though the prices used for the calculation refer to Article. Using the Article characteristic as an example, the following is true:

DATA CUSTOMER TYPE 0CUSTOMER.
DATA FYEAR TYPE 0FYEAR.
DATA ARTICLE TYPE 0ARTICLE. FOREACH ARTICLE, FYEAR, CUSTOMER.
IF {PRICE,2,#,#,ARTICLE} = 0.
MESSAGE I001(/SEM/003) WITH ARTICLE.
ELSE.
IF {QUANTITY,1,FYEAR,CUSTOMER,ARTICLE} > 0.
{REVENUE,1,FYEAR,CUSTOMER,ARTICLE} = {QUANTITY,1,FYEAR,CUSTOMER,ARTICLE} * {PRICE,2,#,#,ARTICLE}.
ENDIF.
ENDIF.
ENDFOR.
The characteristic is superfluous to the formula as the values of the characteristic are not changed. When calculating the planned revenue, the same article is referred to on both sides of the relational operator. Under these circumstances SAP advises against including the characteristic in the quantity of characteristics to be changed, as it is not required for the calculation, but negatively affects performance when the values are read. Another way to accelerate the formula is to save the value of the element {PRICE,2,#,#} in an auxiliary variable and work with this. If the value of a characteristic is required to issue error messages or determine attribute values, the value can be read by function OBJV().

You can make the formula even shorter by accessing the reference data explicitely. In this case there are no characteristics to be changed except for the key figure name. The formula is run through the data record. A FOREACH loop over the characteristics to be changed is not necessary.

DATA ARTICLE TYPE 0ARTICLE.
IF {PREIS | 0VERSION = 2,0GJAHR = #,0CUSTOMER = #} = 0.
ARTICLE = OBJV( ).
MESSAGE I001(/SEM/003) WITH ARTICLE.
ELSE.
ERLOS = MENGE * { PREIS | 0VERSION = 2,0GJAHR = #,0CUSTOMER = #}.
ENDIF.


Air_demon, спасибо, этот текст очень помог!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пт, сен 14 2012, 10:16 
Специалист
Специалист

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Air_demon написал(а):
"FOREACH <data> IN REFDATA" - перебирает значения признака встречающиеся в ссылочных данных.

Я правильно понимаю, что с помощью инструкции "FOREACH <data> IN REFDATA" могу обратиться к данным в других уровнях агрегации? Как тогда настраиваются ссылочные данные (источники, поля, критерии)?


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

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
ski написал:
Я правильно понимаю, что с помощью инструкции "FOREACH <data> IN REFDATA" могу обратиться к данным в других уровнях агрегации? Как тогда настраиваются ссылочные данные (источники, поля, критерии)?


Нет не можете.
Данные для функции планирования (как ссылочные, так и для изменения) выбираются только в рамках текущего уровня агрегации.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по FOX
СообщениеДобавлено: Пт, сен 14 2012, 10:53 
Специалист
Специалист

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Air_demon написал(а):
Данные для функции планирования (как ссылочные, так и для изменения) выбираются только в рамках текущего уровня агрегации.

Тогда я не понимаю, что такое ссылочные данные. Как система определяет, что относится к ссылочным данным?


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

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Вот цитата из документа How To…Loop over Reference Data in Fox Formulas
Цитата:
When the BW-BPS executes a planning function then first the data that is to be changed – in the
following we will use the term “transaction data” – is selected from the database or the BPS buffer. The
selection criteria are specified by the planning package. If necessary in a second select the reference data is
read. The selection criteria for the reference data will be determined by the system from the definition of
the planning function. If you are using for example a copy function then the data specified in the “copy
from” fields are read as reference data. In Fox formulas the reference data will be determined from the
right sides of the formulas (as in a statement in a Fox formula the object left of the move sign “=” will be
changed). Reference data will not be locked.


Хоть там и говорится про BPS, но в BI-IP суть та же, только вместо planning package выступает фильтр.


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

Зарегистрирован:
Пн, дек 12 2011, 08:57
Сообщения: 128
Откуда: Самара
Пол: Мужской
Air_demon написал(а):
In Fox formulas the reference data will be determined from the
right sides of the formulas (as in a statement in a Fox formula the object left of the move sign “=” will be
changed). Reference data will not be locked.

Теперь я стал понимать еще меньше. :) В правой части оператора может стоять только {Показатель, Признак1, ... ПризнакN}, т.е. массив даннных, который берется из источника данных с условием фильтра. Если REFDATA описывает только данные из правой части формулы, то получается что это еще более ограниченный массив данных (фильтр на источнике данных + только то что выбиралось)? :?


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

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
ski написал:
Если REFDATA описывает только данные из правой части формулы, то получается что это еще более ограниченный массив данных (фильтр на источнике данных + только то что выбиралось)? :?


В Refdata также попадают данные выбранные по условиям фильтра. Можете увидеть это запустив на выполнение функцию планирования в моделере по кнопке "Выполнение с трассировкой".


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

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

Вообще тема с refdata немного хитрая, не 100% работает, при этом если покопаться в коде, реализующем FOX, видно что реализована она тоже довольно хитро. Но при правильном подходе в 90% случаев тема работает, а если "пошаманить" удавалось заставить ее работать всегда. Но работоспособность решения с использованием refdata лучше всегда тщательно проверять.


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

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


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

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


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

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