尝试在脚本逻辑中使用RUNALLOCATION避免FOR/NEXT循环

2020-08-25 09:52发布

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

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


你好专家。

系统版本:

CPMBPC8010018SAPK-80118INCPMBPCCPM业务计划和合并

SAP_BW7310013SAPKW73113SAP业务仓库

当前引擎为JAVASCRIPT。

使用以下参数调用DM软件包:MYPHASE = LA10/MYYEAR = 2019/MANAGERIAL = UK2010

在我们的BUDGET模型中,我们有12个维度,在本期中,我们只需要了解PRODUCT 1(屏幕截图)的层次结构即可。 我们的需要是(在预测过程中,预测在这里称为" LA10")对" BRANDTYPE_I"产品(_I表示"输入"以允许对假"父母"进行输入)的存储量分配。

下一级产品(CPL_I)的分配键是BUDGET版本中可用产品(帐户T1100)的重量。

我们确实有一段有效的代码,但是性能却很差。 我很确定这是由于* FOR循环造成的。

我尝试使用* DIM_NONAGGR关键字设置某些内容,但在这种情况下,WHAT和WHERE的成员数量不同。

请告知。 预先感谢。

(也许使用WHEN/ENDWHEN语法进行逐步处理,在技术帐户上计算和存储分配百分比,依此类推...?)

//从品牌类型分配到CPL

 * SELECT(%PROD_BTI%,ID,PRODUCT,LEVEL = BRANDTYPE_I)
 * SELECT(%PROD_BT%,ID,PRODUCT,LEVEL = BRANDTYPE)
 * SELECT(%PROD_CPLI%,ID,PRODUCT,LEVEL = CPL_I)
 *选择(%COUNTRYSET%,ID,COUNTRY,CALC = N)

 * XDIM_MEMBERSET AUDITTRAIL =输入
 * XDIM_MEMBERSET货币= EUROGROUP
 * XDIM_MEMBERSET MANAGERIAL =%MANAGERIAL_SET%
 * XDIM_MEMBERSET METRICS =值
 * XDIM_MEMBERSET PHASE = $ MYPHASE $
 * XDIM_MEMBERSET TIME = $ MYYEAR $ .01,$ MYYEAR $ .02,$ MYYEAR $ .03,$ MYYEAR $ .04,$ MYYEAR $ .05,$ MYYEAR $ .06,$ MYYEAR $ .07,$ MYYEAR $。  08,$ MYYEAR $ .09,$ MYYEAR $ .10,$ MYYEAR $ .11,$ MYYEAR $ .12
 * XDIM_MEMBERSET SOURCING = SOURCINGND
 * XDIM_MEMBERSET ENTITY = E999
 * XDIM_MEMBERSET FLOW =关闭
 * XDIM_MEMBERSET ACCOUNT = BAS(R3000)//R2450
 * XDIM_MEMBERSET COUNTRY =%COUNTRYSET%//GB

 * FOR%loop_BT%=%PROD_BT%//000LABA

 *分配
 *因素=使用/总计
 * DIM_NONAGGR帐户= BAS(R3000);  WHERE = <<<; 使用= T1100; 总计= T1100
 * DIM AUDITTRAIL WHAT = INPUT; 哪里=计算; 使用=已上传; 总计= <<<
 * DIM PHASE WHAT = $ MYPHASE $;  WHERE = <<<; 使用= <<<; 总计= <<<
 * DIM产品=%loop_BT%_I; 在哪里= BAS(%loop_BT%); 使用= <<<; 总计= <<<
 * DIM货币= EUROGROUP;  WHERE = <<<; 使用= LC; 总计= <<<
 *分配
 *下一个
 *承诺

 

(16.2 kB)

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

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


你好专家。

系统版本:

CPMBPC8010018SAPK-80118INCPMBPCCPM业务计划和合并

SAP_BW7310013SAPKW73113SAP业务仓库

当前引擎为JAVASCRIPT。

使用以下参数调用DM软件包:MYPHASE = LA10/MYYEAR = 2019/MANAGERIAL = UK2010

在我们的BUDGET模型中,我们有12个维度,在本期中,我们只需要了解PRODUCT 1(屏幕截图)的层次结构即可。 我们的需要是(在预测过程中,预测在这里称为" LA10")对" BRANDTYPE_I"产品(_I表示"输入"以允许对假"父母"进行输入)的存储量分配。

下一级产品(CPL_I)的分配键是BUDGET版本中可用产品(帐户T1100)的重量。

我们确实有一段有效的代码,但是性能却很差。 我很确定这是由于* FOR循环造成的。

我尝试使用* DIM_NONAGGR关键字设置某些内容,但在这种情况下,WHAT和WHERE的成员数量不同。

请告知。 预先感谢。

(也许使用WHEN/ENDWHEN语法进行逐步处理,在技术帐户上计算和存储分配百分比,依此类推...?)

//从品牌类型分配到CPL

 * SELECT(%PROD_BTI%,ID,PRODUCT,LEVEL = BRANDTYPE_I)
 * SELECT(%PROD_BT%,ID,PRODUCT,LEVEL = BRANDTYPE)
 * SELECT(%PROD_CPLI%,ID,PRODUCT,LEVEL = CPL_I)
 *选择(%COUNTRYSET%,ID,COUNTRY,CALC = N)

 * XDIM_MEMBERSET AUDITTRAIL =输入
 * XDIM_MEMBERSET货币= EUROGROUP
 * XDIM_MEMBERSET MANAGERIAL =%MANAGERIAL_SET%
 * XDIM_MEMBERSET METRICS =值
 * XDIM_MEMBERSET PHASE = $ MYPHASE $
 * XDIM_MEMBERSET TIME = $ MYYEAR $ .01,$ MYYEAR $ .02,$ MYYEAR $ .03,$ MYYEAR $ .04,$ MYYEAR $ .05,$ MYYEAR $ .06,$ MYYEAR $ .07,$ MYYEAR $。  08,$ MYYEAR $ .09,$ MYYEAR $ .10,$ MYYEAR $ .11,$ MYYEAR $ .12
 * XDIM_MEMBERSET SOURCING = SOURCINGND
 * XDIM_MEMBERSET ENTITY = E999
 * XDIM_MEMBERSET FLOW =关闭
 * XDIM_MEMBERSET ACCOUNT = BAS(R3000)//R2450
 * XDIM_MEMBERSET COUNTRY =%COUNTRYSET%//GB

 * FOR%loop_BT%=%PROD_BT%//000LABA

 *分配
 *因素=使用/总计
 * DIM_NONAGGR帐户= BAS(R3000);  WHERE = <<<; 使用= T1100; 总计= T1100
 * DIM AUDITTRAIL WHAT = INPUT; 哪里=计算; 使用=已上传; 总计= <<<
 * DIM PHASE WHAT = $ MYPHASE $;  WHERE = <<<; 使用= <<<; 总计= <<<
 * DIM产品=%loop_BT%_I; 在哪里= BAS(%loop_BT%); 使用= <<<; 总计= <<<
 * DIM货币= EUROGROUP;  WHERE = <<<; 使用= LC; 总计= <<<
 *分配
 *下一个
 *承诺

 

(16.2 kB)
付费偷看设置
发送
5条回答
我是小鹏鹏啊
1楼 · 2020-08-25 10:10.采纳回答

好的,CPL_I无效!

通常,您具有:

1。 级别为:BRANDTYPE的父级成员数,以及每个父级下的一些基本成员。 像000LABA-父级,基数:000LABA0A_I,000LABA0L_I ...

2。 对于具有LEVEL:BRANDTYPE的每个父级,您都有对应的基本成员XXXXX_I,该值存储要分配给父级下的基本成员的值。 对于000LABA,此成员为000LABA_I

在这种情况下,代码为:

 * SELECT(%PROD_BT%,ID,PRODUCT,LEVEL = BRANDTYPE)
 ...
 * FOR%loop_BT%=%PROD_BT%//000LABA
 *分配
 *因素=使用/总计
 ...
 * DIM乘积=%loop_BT%_I; WHERE = BAS(%loop_BT%); USING = <<<; TOTAL = <<<
 ...
 *分配
 * NEXT 

绝对正确,您无法改进! * DIM_NONAGGR不适用于这种情况。

WHEN/ENDWHEN的速度将大大降低。

提高性能的唯一方法是编写自定义逻辑标记...

Violet凡
2楼-- · 2020-08-25 10:02

试图了解您在做什么!

首先从代码中删除了无用的行(如果在RUNALLOCATION中定义了尺寸-那么没有XDIM_MEMBERSET等)

  * SELECT(%PROD_BT%,ID,PRODUCT,LEVEL = BRANDTYPE)
 *选择(%COUNTRYSET%,ID,COUNTRY,CALC = N)

 * XDIM_MEMBERSET MANAGERIAL =%MANAGERIAL_SET%
 * XDIM_MEMBERSET METRICS =值
 * XDIM_MEMBERSET PHASE = $ MYPHASE $
 * XDIM_MEMBERSET TIME = $ MYYEAR $ .01,$ MYYEAR $ .02,$ MYYEAR $ .03,$ MYYEAR $ .04,$ MYYEAR $ .05,$ MYYEAR $ .06,$ MYYEAR $ .07,$ MYYEAR $。  08,$ MYYEAR $ .09,$ MYYEAR $ .10,$ MYYEAR $ .11,$ MYYEAR $ .12
 * XDIM_MEMBERSET SOURCING = SOURCINGND
 * XDIM_MEMBERSET ENTITY = E999
 * XDIM_MEMBERSET FLOW =关闭
 * XDIM_MEMBERSET COUNTRY =%COUNTRYSET%//GB

 * FOR%loop_BT%=%PROD_BT%//000LABA
     *分配
     *因素=使用/总计
     * DIM_NONAGGR帐户= BAS(R3000);  WHERE = <<<; 使用= T1100; 总计= T1100
     * DIM AUDITTRAIL WHAT = INPUT; 哪里=计算; 使用=已上传; 总计= <<<
     * DIM产品=%loop_BT%_I; 在哪里= BAS(%loop_BT%); 使用= <<<; 总计= <<<
     * DIM货币= EUROGROUP;  WHERE = <<<; 使用= LC; 总计= <<<
     *分配
 * NEXT 

产品级别(CPL_I)-未在代码中使用?

不清楚产品尺寸的结构

风早神人
3楼-- · 2020-08-25 10:07

你好瓦迪姆。

产品级别(CPL_I)-代码中未使用??

由于仅在CPL_I产品上有用于计算分发密钥的帐户(USING和TOTAL中为T1100)的记录,BAS(%loop_BT%)仅将记录发布到CPL_I产品中。

这在代码中没有明确定义。

请找到维度PRODUCT结构的其他屏幕截图:

(在此分配中,不使用级别属性为SPECIFICITY的成员。)

对于运行分配块中的PRODUCT行,我希望我的WHAT成为所有product.level = BRANDTYPE_I,而我的WHERE成为每种brandtype的后代(一个接一个,就像做一个* DIM_NONAGR)

还有其他不清楚的地方吗?

谢谢与问候。

nice_wp
4楼-- · 2020-08-25 10:13

我能理解您的问题!

1K BRANDTYPE_I会生成一个巨大的lgx文件,并且运行速度非常慢....

如果可以通过某种方式选择1 brandtype_i = 1cpl_i并对其进行单独处理,则可以提高性能

粗暴的香蕉
5楼-- · 2020-08-25 10:01

非常感谢您的高效和快速解答。

(我们拥有超过1K的BRANDTYPE_I和近2K的CPL_I,我们通常有1个brandtype_i = 1cpl_i)

我会尝试从算盘中获取一些帮助,以使用BADI制作东西。

问候。

一周热门 更多>