点击此处---> 群内免费提供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) *结束 *结束 *下一个
不正确的语句:
" BAS(Z00720)具有三个子成员,其中两个具有事务数据 (图片中的前两个),因此,%VALUE%= 200; 和[CUENTA]。[Z007629] = 50。"
您有2条记录,%VALUE%= 100
乘法:
100 * 50 = 5000
100 * 50 = 5000
总计10000
要添加:
100 + 50 = 150
100 + 50 = 150
总计300
要添加,您必须使用:
如果成员的组合不同(例如FLUJO不同),则:
很抱歉,但所需逻辑不清楚! 只是一些不正确的脚本...
请阅读: https ://blogs.sap.com/2014/01/31/how-to-ask-questions-about-script-logic-issues /
并提供缺少的信息,尤其是数据样本!
抱歉,在阅读建议的链接后,我在这里提供了其他信息,希望对您有所帮助。 我还将提供一个较短版本的脚本,以便直接进行讨论(无论如何,脚本也是如此)
BPC版本:NetWeaver 10.1,SP级别0016。
无论是使用UJKT还是使用程序包运行此脚本,我都会遇到相同的问题。
帐户维度y为" CUENTA"。
目的是我希望能够在从初始范围获得的%VALUE%和操作符号右侧的给定帐户之间进行操作(+,-,*,/)。
如果我使用*或/(例如下面的脚本),我可以做到这一点,但是使用+或-时,它的行为使我无法理解:
这是我的数据存储方式:
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 )等,但是每当我使用+或-时,我都会得到这些奇怪的结果。
感谢您的宝贵时间!
%VALUE%未计算! 它是来自WHEN/ENDWHEN循环的当前记录的值。 每条记录都是分别处理的!
谢谢Vadim,我不知道%VALUE%的计算方式,因此将需要重新考虑使用范围和* WHEN的逻辑 声明。
一周热门 更多>