脚本逻辑根据具有Tx数据的成员数奇数相乘

2020-08-27 19:09发布

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

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


嗨,

我的脚本做的事情很奇怪。 给定我初始作用域中的值(EXPRESSION =%VALUE%),我希望能够将其加/减/乘或除以我在* REC语句中指定的另一个帐户值。 如果我乘或除,我的脚本会完美地工作,但是每当我使用加法或减法时,我在* REC语句中指定的帐户值(甚至任何硬编码值)都将乘以具有父级交易数据的成员数 从我的初始范围的节点。

例如,从我共享的脚本中,想象一下:

* BAS(Z00720)有18个成员,其中14个具有交易数据

*来自BAS(Z00720)的%VALUE%== 10

* [CUENTA]中的值。[Z007629] ... = 2

很好...

如果我乘以10 * 2 = 20

如果我除以10/2 = 5

但是...

如果我求和,我期望10 + 2 = 12 ...但是它的确是10 +(2 * 14)= 38

如果我减去,我期望10-2 = 8 ...但是它确实是10-(2 * 14)= -18

我得到的%VALUE%总是正确的,那里没有问题,问题在于我想对其求和或减去的任何值。

下面的脚本在* REC语句中被简化,仅用于显示我的示例。 根据用户的要求,该计算涉及对每个具有特定时间偏移的FOR循环在非常特定的维度上进行减法,乘法,汇总和除法,就像我说的,当我乘或除时,它是完美的。 我总结或减去。

有什么想法为什么会发生以及如何解决?

 * SELECT(%CAT%," [BASECATEGORY]",VERSION," [ID] =%VERSION_SET%")
 * SELECT(%ACC%," [PROJECTED]",CUENTA," [ID] = Z00720")

 * XDIM_MEMBERSET E_GLOBAL =全局
 * XDIM_MEMBERSET MONEDA = MXN
 * XDIM_MEMBERSET FLUJO = F00
 * XDIM_MEMBERSET FUENTE_P = 00_MCO
 * XDIM_MEMBERSET CUENTA = BAS(Z00720)
 * XDIM_MEMBERSET VERSION =%CAT%
 * XDIM_MEMBERSET TIEMPO AS%TIME%= BAS(%TIEMPO_SET%)


 * FOR%TIEMPO_SET%=%TIME%
 * XDIM_ADDMEMBERSET TIEMPO = TMVL(-12,%TIEMPO_SET%)
 *当TIEMPO
 * IS TMVL(-12,%TIEMPO_SET%)
 *开始

                         * REC(EXPRESSION =%VALUE%*
 ([CUENTA]。[Z007629],[FLUJO]。[F99],[FUENTE_P]。[00_ECA],[VERSION]。[%VERSION_SET%],[TIEMPO]。[%TIEMPO_SET%]),
 CUENTA =%ACC%,VERSION =%VERSION_SET%,TIEMPO =%TIEMPO_SET%,FLUJO = F99,FUENTE_P = 00_ECA)
 *结束
 *结束
 *下一个
 

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

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


嗨,

我的脚本做的事情很奇怪。 给定我初始作用域中的值(EXPRESSION =%VALUE%),我希望能够将其加/减/乘或除以我在* REC语句中指定的另一个帐户值。 如果我乘或除,我的脚本会完美地工作,但是每当我使用加法或减法时,我在* REC语句中指定的帐户值(甚至任何硬编码值)都将乘以具有父级交易数据的成员数 从我的初始范围的节点。

例如,从我共享的脚本中,想象一下:

* BAS(Z00720)有18个成员,其中14个具有交易数据

*来自BAS(Z00720)的%VALUE%== 10

* [CUENTA]中的值。[Z007629] ... = 2

很好...

如果我乘以10 * 2 = 20

如果我除以10/2 = 5

但是...

如果我求和,我期望10 + 2 = 12 ...但是它的确是10 +(2 * 14)= 38

如果我减去,我期望10-2 = 8 ...但是它确实是10-(2 * 14)= -18

我得到的%VALUE%总是正确的,那里没有问题,问题在于我想对其求和或减去的任何值。

下面的脚本在* REC语句中被简化,仅用于显示我的示例。 根据用户的要求,该计算涉及对每个具有特定时间偏移的FOR循环在非常特定的维度上进行减法,乘法,汇总和除法,就像我说的,当我乘或除时,它是完美的。 我总结或减去。

有什么想法为什么会发生以及如何解决?

 * SELECT(%CAT%," [BASECATEGORY]",VERSION," [ID] =%VERSION_SET%")
 * SELECT(%ACC%," [PROJECTED]",CUENTA," [ID] = Z00720")

 * XDIM_MEMBERSET E_GLOBAL =全局
 * XDIM_MEMBERSET MONEDA = MXN
 * XDIM_MEMBERSET FLUJO = F00
 * XDIM_MEMBERSET FUENTE_P = 00_MCO
 * XDIM_MEMBERSET CUENTA = BAS(Z00720)
 * XDIM_MEMBERSET VERSION =%CAT%
 * XDIM_MEMBERSET TIEMPO AS%TIME%= BAS(%TIEMPO_SET%)


 * FOR%TIEMPO_SET%=%TIME%
 * XDIM_ADDMEMBERSET TIEMPO = TMVL(-12,%TIEMPO_SET%)
 *当TIEMPO
 * IS TMVL(-12,%TIEMPO_SET%)
 *开始

                         * REC(EXPRESSION =%VALUE%*
 ([CUENTA]。[Z007629],[FLUJO]。[F99],[FUENTE_P]。[00_ECA],[VERSION]。[%VERSION_SET%],[TIEMPO]。[%TIEMPO_SET%]),
 CUENTA =%ACC%,VERSION =%VERSION_SET%,TIEMPO =%TIEMPO_SET%,FLUJO = F99,FUENTE_P = 00_ECA)
 *结束
 *结束
 *下一个
 
付费偷看设置
发送
5条回答
派大星 ヾ
1楼 · 2020-08-27 19:45.采纳回答

不正确的语句:

" BAS(Z00720)具有三个子成员,其中两个具有事务数据 (图片中的前两个),因此,%VALUE%= 200; 和[CUENTA]。[Z007629] = 50。"

您有2条记录,%VALUE%= 100

乘法:

100 * 50 = 5000

100 * 50 = 5000

总计10000

要添加:

100 + 50 = 150

100 + 50 = 150

总计300

要添加,您必须使用:

 * XDIM_MEMBERSET E_GLOBAL = GLOBAL
 * XDIM_MEMBERSET MONEDA = MXN
 * XDIM_MEMBERSET FLUJO = F00
 * XDIM_MEMBERSET FUENTE_P = 00_MCO
 * XDIM_MEMBERSET CUENTA = BAS(Z00720),Z007629//作用域添加所有成员
 * XDIM_MEMBERSET VERSION =实数
 *当TIEMPO//TIME
 * IS 2020.001
 * REC(EXPRESSION =%VALUE%,CUENTA = 21011001,VERSION = 00_PPTO)
 * ENDWHEN 

如果成员的组合不同(例如FLUJO不同),则:

 * XDIM_MEMBERSET E_GLOBAL = GLOBAL
 * XDIM_MEMBERSET MONEDA = MXN
 * XDIM_MEMBERSET FLUJO = F00,F99//同时作用域
 * XDIM_MEMBERSET FUENTE_P = 00_MCO
 * XDIM_MEMBERSET CUENTA = BAS(Z00720),Z007629//作用域添加所有成员
 * XDIM_MEMBERSET VERSION =实数
 *当TIEMPO//TIME
 * IS 2020.001
 *当CUENTA
 * IS BAS(Z00720)
 *当FLUJO
 * IS F00
 * REC(EXPRESSION =%VALUE%,CUENTA = 21011001,VERSION = 00_PPTO)
 *结束
 *结束
 *当CUENTA
 * IS Z007629
 *当FLUJO
 * IS F99
 * REC(表达式=%VALUE%,CUENTA = 21011001,VERSION = 00_PPTO,FLUJO = F00)
 *结束
 *结束
 * ENDWHEN 
xfwsx85
2楼-- · 2020-08-27 19:26

很抱歉,但所需逻辑不清楚! 只是一些不正确的脚本...

请阅读: https ://blogs.sap.com/2014/01/31/how-to-ask-questions-about-script-logic-issues /

并提供缺少的信息,尤其是数据样本!

Tong__Ming
3楼-- · 2020-08-27 19:23

抱歉,在阅读建议的链接后,我在这里提供了其他信息,希望对您有所帮助。 我还将提供一个较短版本的脚本,以便直接进行讨论(无论如何,脚本也是如此)

BPC版本:NetWeaver 10.1,SP级别0016。

无论是使用UJKT还是使用程序包运行此脚本,我都会遇到相同的问题。

帐户维度y为" CUENTA"。

目的是我希望能够在从初始范围获得的%VALUE%和操作符号右侧的给定帐户之间进行操作(+,-,*,/)。

如果我使用*或/(例如下面的脚本),我可以做到这一点,但是使用+或-时,它的行为使我无法理解:

 * XDIM_MEMBERSET E_GLOBAL =全局
 * XDIM_MEMBERSET MONEDA = MXN
 * XDIM_MEMBERSET FLUJO = F00
 * XDIM_MEMBERSET FUENTE_P = 00_MCO
 * XDIM_MEMBERSET CUENTA = BAS(Z00720)
 * XDIM_MEMBERSET VERSION =实数

 *当TIEMPO//TIME
 * IS 2020.001
 * REC(EXPRESSION =%VALUE%*([CUENTA]。[Z007629]),CUENTA = 21011001,VERSION = 00_PPTO)
 * ENDWHEN 

这是我的数据存储方式:

BAS(Z00720)具有三个子成员,其中两个具有事务数据(图像中的前两个),因此%VALUE%= 200; 和[CUENTA]。[Z007629] = 50。

鉴于上面的脚本,它被转换为200 * 50 = 10000,这是正确的。 如果要除以,则为200/50 = 4,这也是正确的。

但是,问题来了:如果我想求和(%VALUE%+ [CUENTA]。[Z007629]),我期望200 + 50 = 250,但我得到300:

从我所看到的是,由于BAS(Z00720)具有两个具有事务数据的子成员,因此值50似乎乘以2(解释为200+ [50 * 2] = 300)。 如果我在第三个子成员上写入事务数据,那么将发生200+ [50 * 3] = 350。

当我要减去(%VALUE%-[CUENTA]。[Z007629])时,也会发生这种情况:我希望200-50 = 150,但是我却得到100(遵循相同的逻辑,它被解释为200- [50 * 2] = 100。

我需要使用*,/,+和-,这是因为我需要进行多种操作,例如EXPRESSION =%VALUE%-(accountB-accountA)/accountC *(accountD + accountE )等,但是每当我使用+或-时,我都会得到这些奇怪的结果。

感谢您的宝贵时间!

hongfeng1314
4楼-- · 2020-08-27 19:47

%VALUE%未计算! 它是来自WHEN/ENDWHEN循环的当前记录的值。 每条记录都是分别处理的!

clasier
5楼-- · 2020-08-27 19:43

谢谢Vadim,我不知道%VALUE%的计算方式,因此将需要重新考虑使用范围和* WHEN的逻辑 声明。

一周热门 更多>