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

2020-08-27 19:09发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我的脚本做的事情很奇怪。...

         点击此处--->   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条回答
Tong__Ming
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 )等,但是每当我使用+或-时,我都会得到这些奇怪的结果。

感谢您的宝贵时间!

一周热门 更多>