如何优化脚本逻辑Loockup BPC版本10.1标准

2020-09-13 16:54发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我需要执行脚本逻辑并提供计算所需的值。

脚本是:

//第一部分***************************

* SELECT(%PER%," [ID]",TIEMPO," [LEVEL] = MONTH")

*查看率

* DIM FXTASA = TPM

* DIM MONEDAENTRADA = COP

* DIM FXSOCIEDAD =全局

* DIM VERSION = REAL

* FOR%PER_TC%=%PER%

* DIM P_%PER_TC%:TIEMPO ="%PER_TC%"

* NEXT

* ENDLOOKUP

//第二部分**************************

* XDIM_MEMBERSET CLASEACTIVO = NO_APLICA

* XDIM_MEMBERSET MONEDA = ML

* XDIM_MEMBERSET MOVIMIENTO = BAS(MOV_PER)//此语句生成不同的期间概念,例如(2017.12,2018.01,2018.02 ........ 2040.12)

* XDIM_MEMBERSET INDICADORES = MOV_MES

* XDIM_MEMBERSET TIEMPO =%TIEMPO_SET%

* XDIM_MEMBERSET SOCIEDAD =%SOCIEDAD_SET%

* XDIM_MEMBERSET VERSION =%VERSION_SET%

* XDIM_MEMBERSET CUENTA = BAS(3)

* XDIM_MEMBERSET FLUJO = FL_000

* XDIM_MEMBERSET度量= YTD

*当CUENTA * IS <> BAS(3815)

* FOR%PER_TC%=%PER%

* REC(EXPRESSION =%VALUE%* LOOKUP(P_%PER_TC%),INDICADORES = MOV_MES,MONEDA = COP,TIEMPO =%TIEMPO_SET%,FLUJO = FL_002)

* NEXT

* ENDWHEN

* COMMIT

问题是LOOKUP提供了100个值,而脚本逻辑的第二部分提供了5个值。 在这种情况下,REC提供5个值是不正确的,因为将5个值与100个值的总和相乘,或者与在LOOKUP中找到的100个值的REC乘以5个值相同。

我只需要将为脚本逻辑第二部分提供的5个值乘以对应于LOOKUP的5个值(比率)即可。

例如第二部分,脚本逻辑为DIM MOVIMIENTO 2017.12生成1个值,我需要将此值乘以对应于2017.12月份的汇率。

如果仅需要使用5个比率将第二部分中找到的5个值乘以脚本逻辑,该怎么办? 如何改善此脚本逻辑?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我需要执行脚本逻辑并提供计算所需的值。

脚本是:

//第一部分***************************

* SELECT(%PER%," [ID]",TIEMPO," [LEVEL] = MONTH")

*查看率

* DIM FXTASA = TPM

* DIM MONEDAENTRADA = COP

* DIM FXSOCIEDAD =全局

* DIM VERSION = REAL

* FOR%PER_TC%=%PER%

* DIM P_%PER_TC%:TIEMPO ="%PER_TC%"

* NEXT

* ENDLOOKUP

//第二部分**************************

* XDIM_MEMBERSET CLASEACTIVO = NO_APLICA

* XDIM_MEMBERSET MONEDA = ML

* XDIM_MEMBERSET MOVIMIENTO = BAS(MOV_PER)//此语句生成不同的期间概念,例如(2017.12,2018.01,2018.02 ........ 2040.12)

* XDIM_MEMBERSET INDICADORES = MOV_MES

* XDIM_MEMBERSET TIEMPO =%TIEMPO_SET%

* XDIM_MEMBERSET SOCIEDAD =%SOCIEDAD_SET%

* XDIM_MEMBERSET VERSION =%VERSION_SET%

* XDIM_MEMBERSET CUENTA = BAS(3)

* XDIM_MEMBERSET FLUJO = FL_000

* XDIM_MEMBERSET度量= YTD

*当CUENTA * IS <> BAS(3815)

* FOR%PER_TC%=%PER%

* REC(EXPRESSION =%VALUE%* LOOKUP(P_%PER_TC%),INDICADORES = MOV_MES,MONEDA = COP,TIEMPO =%TIEMPO_SET%,FLUJO = FL_002)

* NEXT

* ENDWHEN

* COMMIT

问题是LOOKUP提供了100个值,而脚本逻辑的第二部分提供了5个值。 在这种情况下,REC提供5个值是不正确的,因为将5个值与100个值的总和相乘,或者与在LOOKUP中找到的100个值的REC乘以5个值相同。

我只需要将为脚本逻辑第二部分提供的5个值乘以对应于LOOKUP的5个值(比率)即可。

例如第二部分,脚本逻辑为DIM MOVIMIENTO 2017.12生成1个值,我需要将此值乘以对应于2017.12月份的汇率。

如果仅需要使用5个比率将第二部分中找到的5个值乘以脚本逻辑,该怎么办? 如何改善此脚本逻辑?

付费偷看设置
发送
6条回答
SAP小菜
1楼 · 2020-09-13 17:34.采纳回答

基于MOVIMIENTO的脚本

 *查询率
 * DIM FXTASA = TPM
 * DIM MONEDAENTRADA =缔约方会议
 * DIM FXSOCIEDAD =全球
 * DIM版本=实数
 * DIM COP:TIEMPO = MOVIMIENTO.ID//在WHEN/ENDWHEN中使用当前记录的MOVIMIENTO成员ID
 * ENDLOOKUP

 * XDIM_MEMBERSET CLASEACTIVO = NO_APLICA
 * XDIM_MEMBERSET MONEDA =毫升
 * XDIM_MEMBERSET MOVIMIENTO = BAS(MOV_PER)//此语句生成不同的期间概念,例如(2017.12,2018.01,2018.02 ........ 2040.12)
 * XDIM_MEMBERSET INDICADORES = MOV_MES
 * XDIM_MEMBERSET TIEMPO =%TIEMPO_SET%
 * XDIM_MEMBERSET SOCIEDAD =%SOCIEDAD_SET%
 * XDIM_MEMBERSET VERSION =%VERSION_SET%
 * XDIM_MEMBERSET CUENTA = BAS(3)
 * XDIM_MEMBERSET FLUJO = FL_000
 * XDIM_MEMBERSET度量=至今
 *当CUENTA
 * IS <> BAS(3815)
 * REC(表达式=%VALUE%* LOOKUP(COP),MONEDA = COP,FLUJO = FL_002)
 * ENDWHEN 

阅读有关LOOKUP的帮助不是一个坏主意: https ://help.sap.com/viewer/a2049170bfeb4178ace32222842c3ec1/10.1/zh-CN/f02a3d4897254042be24ebea3ba572f3.html

另外,请阅读我的博客: https://blogs.sap.com/2014/01/31/how-to-ask-questions-about-script-logic-issues /

在您的示例中,您并没有说明要将结果存储在哪里...

hongfeng1314
2楼-- · 2020-09-13 17:47

最好从一开始就解释所有内容:)

阅读第二个答案!

葫芦娃快救爷爷
3楼-- · 2020-09-13 17:27

LOOKUP的工作方式如下:

它将使用通过LOOKUP中的* DIM语句直接指定的尺寸。

如果* DIM未指定维度,则其成员将从WHEN/ENDWHEN循环的当前记录中传递。

脚本将是:

 *查询率
 * DIM FXTASA = TPM
 * DIM COP:MONEDAENTRADA = COP
 * DIM FXSOCIEDAD =全球
 * DIM版本=实数
 * ENDLOOKUP

 * XDIM_MEMBERSET CLASEACTIVO = NO_APLICA
 * XDIM_MEMBERSET MONEDA =毫升
 * XDIM_MEMBERSET MOVIMIENTO = BAS(MOV_PER)//此语句生成不同的期间概念,例如(2017.12,2018.01,2018.02 ........ 2040.12)
 * XDIM_MEMBERSET INDICADORES = MOV_MES
 * XDIM_MEMBERSET TIEMPO =%TIEMPO_SET%
 * XDIM_MEMBERSET SOCIEDAD =%SOCIEDAD_SET%
 * XDIM_MEMBERSET VERSION =%VERSION_SET%
 * XDIM_MEMBERSET CUENTA = BAS(3)
 * XDIM_MEMBERSET FLUJO = FL_000
 * XDIM_MEMBERSET度量=至今
 *当CUENTA
 * IS <> BAS(3815)
 * REC(表达式=%VALUE%* LOOKUP(COP),MONEDA = COP,FLUJO = FL_002)
 * ENDWHEN 

我已删除了无用的语句。 永远不要使用* COMMIT。

Climb_Ma
4楼-- · 2020-09-13 17:26

然后脚本就可以了!

暮风yp
5楼-- · 2020-09-13 17:26

嗨,Vadim,

谢谢您的答复。 您的脚本是正确的,但不是我所需要的。 您的脚本对于使用单一费率到一个月执行转换很有用,但是我需要在几个月内使用多个费率。

维度MOVIMIENTO用于对时间概念(例如2017.12)中的记录进行分类。 记录可以为2018.01月,但MOVIMIENTO为2017.12。 我需要MOVIMIENTO 2017.12的费率而不是2018.01月份的费率。 我不需要根据时间的价格,我需要根据MOVIMIENTO的价格。

在脚本逻辑的第二部分中,时间具有两个维度:TIEMPO和MOVIMIENTO,但是Dim MOVIMIENTO是用于查找生成值转换的速率的维度。 因此,我使用FOR生成LOOKUP来更改TIME,以便查阅所有费率。 但是我只需要使用脚本逻辑第二部分中生成的值所必需的比率。


例如,一个月内(2018.01。Dim TIEMPO)可能有3条记录(3个值),具有相同月份但具有不同的MOVIMIENTO(2017.12、2016.12、2015.12)。 在这种情况下,我需要找到3个比率:一个比率为2017.12,一个比率为2016.12和一个比率为2015.12。 您的脚本仅允许查找2018.01月份的汇率,并且以此汇率执行3个值的转换。


此图显示了我需要如何进行转换。


SAP浪
6楼-- · 2020-09-13 17:30

嗨,瓦迪姆,

感谢您的帮助。 我证明了这种脚本逻辑并可以正常工作。

我有一个问题:"在WHEN/ENDWHEN中使用当前记录的MOVIMIENTO成员ID"是什么意思?

是否需要在WHEN/ENDWHEN中包含MOVIMIENTO成员ID。 如果是这样,我应该如何在语句中加上MOVIMIENTO维?

最诚挚的问候,

杰森

一周热门 更多>