LOOKUP
Функция, ссылающаяся на другое исходное значение.
Чтобы рассчитать новое значение в операторе *REC( ), можно воспользоваться функцией LOOKUP для присвоения исходного значения, которое не входит в данные с определенной областью действия, инструкции FACTOR или EXPRESSION.
Синтаксис
*LOOKUP {Model}
*DIM [{LookupID}:]{DimensionName}="Value" | {CallingDimensionName}[.{Property}]
*DIM MEASURES="MeasureName"
*ENDLOOKUP
В следующем примере считывается и используется в расчете информация из модели курсов валют. Также можно использовать FOR/NEXT для поиска нескольких значений.
Environment: EnvironmentShell_V (копия образца среды EnvironmentShell)
Модель: планирование
*XDIM_MEMBERSET TIME = 2006.AUG
*XDIM_MEMBERSET P_ACCT=CE0004010
*XDIM_MEMBERSET CATEGORY=ACTUAL
*LOOKUP RATE
*DIM TIME="2006.AUG"
*DIM CATEGORY="ACTUAL"
*DIM R_ACCT="AVG"
*DIM R_ENTITY="GLOBAL"
*DIM RATEEUR:INPUTCURRENCY="EUR"
*DIM MEASURES="PERIODIC"
*ENDLOOKUP
*WHEN P_ACCT
*IS "CE0004010"
*REC(EXPRESSION=%VALUE%/LOOKUP(RATEEUR), RPTCURRENCY="EUR")
*ENDWHEN
В следующем примере сначала считываются все валюты отчетности в операторе *SELECT и присваиваются значения переменной %CUR %. С помощью FOR/NEXT считываются их курсы из модели курсов валют. Затем они используются в расчете.
Значения в моделях перед выполнением скрипта:
Данные модели планирования:
TIME |
P_ACCT |
ENTITY |
P_ACTIVITY |
CATEGORY |
Валюта |
P_DATASRC |
SignData |
2006.AUG |
CE0004010 |
C9000 |
NONE |
ACTUAL |
LC |
UPLOAD |
157 915,81 |
Данные модели курсов валют
Категория |
InputCurrency |
R_ACCT |
R_ENTITY |
TIME |
SignData |
ACTUAL |
EUR |
AVG |
GLOBAL |
2006.AUG |
1,5022 |
ACTUAL |
USD |
AVG |
GLOBAL |
2006.SEP |
1,0000 |
*XDIM_MEMBERSET TIME=2006.AUG
*XDIM_MEMBERSET P_ACCT=CE0004010
*XDIM_MEMBERSET CATEGORY=ACTUAL
*SELECT(%CUR%, "[ID]", RPTCURRENCY, "[REPORTING]=Y")
*LOOKUP RATE
*DIM CATEGORY="ACTUAL"
*DIM R_ACCT="AVG"
*DIM R_ENTITY="GLOBAL"
*DIM TIME="2006.AUG"
*DIM MEASURES="PERIODIC"
*FOR %LOOP_CUR%=%CUR%
*DIM C_%LOOP_CUR%:INPUTCURRENCY="%LOOP_CUR%"
*NEXT
*ENDLOOKUP
*WHEN P_ACCT
*IS "CE0004010"
*FOR %LOOP_CUR%=%CUR%
*REC(EXPRESSION=%VALUE%/LOOKUP(C_%LOOP_CUR%), RPTCURRENCY=%LOOP_CUR%)
*NEXT
*ENDWHEN
Значения в модели после выполнения скрипта
2006.AUG |
CE0004010 |
C9000 |
NONE |
ACTUAL |
EUR |
UPLOAD |
105 123,03 |
2006.SEP |
CE0004010 |
C9000 |
NONE |
ACTUAL |
USD |
UPLOAD |
157 915,81 |
Значения свойств также можно передать элементам области действия для поиска данных.
В данном примере валюта соответствующей сущности считывается из основных данных и используется для поиска значения курса.
*XDIM_MEMBERSET TIME = 2007.AUG
*XDIM_MEMBERSET P_ACCT=CE0004010
*XDIM_MEMBERSET CATEGORY=ACTUAL
*XDIM_MEMBERSET ENTITY=C9000
*LOOKUP RATE *DIM TIME="2006.AUG"
*DIM CATEGORY="ACTUAL"
*DIM R_ACCT="AVG"
*DIM R_ENTITY="GLOBAL"
*DIM RATE:INPUTCURRENCY=ENTITY.CURRENCY
*DIM MEASURES="PERIODIC"
*ENDLOOKUP
*WHEN P_ACCT
*IS "CE0004010"
*REC(EXPRESSION=%VALUE%/LOOKUP(RATE), RPTCURRENCY=ENTITY.CURRENCY)
*ENDWHEN
Ограничение
Считывание нескольких показателей в рамках одной функции LOOKUP путем присвоения разных идентификаторов поиска не поддерживается.
Любое кодирование программного обеспечения и/или строки текста программы ("Код"), включенные в эту документацию, являются только примерами и не предназначены для использования в среде продуктивной системы. Код предназначен лишь для лучшего объяснения и наглядного представления синтаксиса и правил построения выражений в определенном кодировании. SAP не гарантирует правильность и полноту приведенного здесь Кода. SAP не будет нести ответственность за ошибки и ущерб, возникшие по причине использования этого Кода, за исключением случаев, если такой ущерб нанесен со стороны SAP намеренно или по грубой неосторожности.