通过查询选择多个时间段

2020-09-09 15:15发布

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

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


您好BPC专家,

以下脚本按预期工作,如果我选择一个月(Ex 01.2018)时间段并运行该程序包,则基于上一年同月(Ex 01.2017)的汇率进行汇率转换。 结果是错误的,如果我一次选择了12个蛾月周期(例如,从01.2018到12.2018)并执行该程序包,则货币转换将在12个月后的周期(例如,Ex 01.2017)进行。 要求是即使每个用户选择多个月,也要检查每个期间前12个月的转换因子。 例如:如果用户选择三个月01.2018、02.2018、03.2018,则汇率转换应基于01.2017、02.2017、03.2017。 我是脚本逻辑的新手,不知道如何在以下脚本中声明和引入FOR循环以实现所需的结果。

版本为BPC 10 Netweaver

请帮助我。

克里希纳

 * SELECT(%VERSION_LIST%,FX_SOURCE_CATEGORY,VERSION,ID =%VERSION_SET%)

 *查询率
 * DIM TIME = TMVL(-12,%TIME_SET%)
 * DIM R_ENTITY =" GLOBAL"
 * DIM VERSION =%VERSION_LIST%
 * DIM R_ACCT = summary_ACCOUNT.RATETYPE
 * DIM LKPLC:INPUTCURRENCY = E_ENTITY.CURRENCY
 * DIM LKPSUB:INPUTCURRENCY = E_ENTITY.SUBMISSION_CURRENCY
 * ENDLOOKUP

 * XDIM_MEMBERSET E_ENTITY = BAS(%E_ENTITY_SET%)
 * XDIM_MEMBERSET TIME = BAS(%TIME_SET%)

 *当RPTCURRENCY
 * IS Subm
 *当E_ENTITY.SUBMISSION_CURRENCY
 * IS <>""
 *当summary_ACCOUNT.RATETYPE时
 * IS <>""
 * REC(EXPRESSION =%VALUE%* LOOKUP(LKPSUB),RPTCURRENCY = USD)
 *其他
 * REC(FACTOR = 1,RPTCURRENCY = USD)
 *结束
 *结束
 *结束
 

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

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


您好BPC专家,

以下脚本按预期工作,如果我选择一个月(Ex 01.2018)时间段并运行该程序包,则基于上一年同月(Ex 01.2017)的汇率进行汇率转换。 结果是错误的,如果我一次选择了12个蛾月周期(例如,从01.2018到12.2018)并执行该程序包,则货币转换将在12个月后的周期(例如,Ex 01.2017)进行。 要求是即使每个用户选择多个月,也要检查每个期间前12个月的转换因子。 例如:如果用户选择三个月01.2018、02.2018、03.2018,则汇率转换应基于01.2017、02.2017、03.2017。 我是脚本逻辑的新手,不知道如何在以下脚本中声明和引入FOR循环以实现所需的结果。

版本为BPC 10 Netweaver

请帮助我。

克里希纳

 * SELECT(%VERSION_LIST%,FX_SOURCE_CATEGORY,VERSION,ID =%VERSION_SET%)

 *查询率
 * DIM TIME = TMVL(-12,%TIME_SET%)
 * DIM R_ENTITY =" GLOBAL"
 * DIM VERSION =%VERSION_LIST%
 * DIM R_ACCT = summary_ACCOUNT.RATETYPE
 * DIM LKPLC:INPUTCURRENCY = E_ENTITY.CURRENCY
 * DIM LKPSUB:INPUTCURRENCY = E_ENTITY.SUBMISSION_CURRENCY
 * ENDLOOKUP

 * XDIM_MEMBERSET E_ENTITY = BAS(%E_ENTITY_SET%)
 * XDIM_MEMBERSET TIME = BAS(%TIME_SET%)

 *当RPTCURRENCY
 * IS Subm
 *当E_ENTITY.SUBMISSION_CURRENCY
 * IS <>""
 *当summary_ACCOUNT.RATETYPE时
 * IS <>""
 * REC(EXPRESSION =%VALUE%* LOOKUP(LKPSUB),RPTCURRENCY = USD)
 *其他
 * REC(FACTOR = 1,RPTCURRENCY = USD)
 *结束
 *结束
 *结束
 
付费偷看设置
发送
7条回答
wang628962
1楼 · 2020-09-09 15:35.采纳回答

您的问题通常与TMVL功能和LOOKUP有关...

 * DIM TIME = TMVL(-12,%TIME_SET%)

多个月中包含%TIME_SET%的TMVL将导致TMVL(-12,<%TIME_SET%中的最低月份>)

例如:%TIME_SET%= 01.2018、02.2018、03.2018

然后:TMVL(-12,%TIME_SET%)= 01.2017

从帮助中获得: https://help.sap.com /viewer/a2049170bfeb4178ace32222842c3ec1/10.1/zh-CN/c8d961d0dbfd4745af4b667279573702.html

"变量,例如%TIME_SET%

  • TIME_SET的第一个周期用作负偏移量的基础周期,而TIME_SET的最后一个周期用作正偏移量的基础周期。"

要在%TIME_SET%中使用多个月,您必须在TIME维度中创建一个属性,例如PREVYEARMONTH并填充它:

01.2018-01.2017

02.2018-02.2017

...

然后您可以使用:

 * DIM TIME = TIME.PREVYEARMONTH 

将根据该属性选择LOOKUP的时间成员。

土豆飞人
2楼-- · 2020-09-09 15:39

"因此,LOOKUP不应在FOR/NEXT循环中使用"-不正确,FOR/NEXT可以在LOOKUP内部使用,

您的脚本通常是正确的,但此行不正确:

 * XDIM_MEMBERSET TIME = TIME.PREVYEARMONTH 

错误的行,请阅读帮助!

p>

其余的就可以了!

me_for_i
3楼-- · 2020-09-09 15:34

此代码:

 * SELECT(%VERSION_LIST%,FX_SOURCE_CATEGORY,VERSION,ID =%VERSION_SET%)
 *查询率
 * DIM TIME = TIME.PREVYEARMONTH
 * DIM R_ENTITY =" GLOBAL"
 * DIM VERSION =%VERSION_LIST%
 * DIM R_ACCT = summary_ACCOUNT.RATETYPE
 * DIM LKPLC:INPUTCURRENCY = E_ENTITY.CURRENCY
 * DIM LKPSUB:INPUTCURRENCY = E_ENTITY.SUBMISSION_CURRENCY
 * ENDLOOKUP

 * XDIM_MEMBERSET E_ENTITY = BAS(%E_ENTITY_SET%)
 * XDIM_MEMBERSET TIME = BAS(%TIME_SET%)
 *当RPTCURRENCY
 * IS Subm
 *当E_ENTITY.SUBMISSION_CURRENCY
 * IS <>""
 *当summary_ACCOUNT.RATETYPE时
 * IS <>""
 * REC(EXPRESSION =%VALUE%* LOOKUP(LKPSUB),RPTCURRENCY = USD)
 *其他
 * REC(FACTOR = 1,RPTCURRENCY = USD)
 *结束
 *结束
 * ENDWHEN 

可以!

LOOKUP/ENDLOOKUP-是一个定义,而不是直接执行的代码。

LOOKUP将在WHEN/的每次迭代中执行 ENDWHEN循环,并将WHEN/ENDWHEN循环的当前成员传递给LOOKUP。

在这种情况下,我们可以查看E_ENTITY和TIME

如果WHEN/ENDWHEN中TIME的当前成员是2019.02,则 LOOKUP将从存储在2019.02的PREVYEARMONTH属性中的2018.02开始获取数据

希望很清楚!

尝试在UJKT中执行脚本

PS 与E_ENTITY

南山jay
4楼-- · 2020-09-09 15:40

P.S相同。 尝试了解LOOKUP正在使用WHEN/ENDWHEN循环中的当前TIME成员。

 * DIM TIME = TIME.PREVYEARMONTH 

此行将根据WHEN的当前成员获取上一年的成员/ENDWHEN

Aaron 3364
5楼-- · 2020-09-09 15:29

嗨Vadim Kalinin,

我的意图是在FOR/NEXT循环中不应该使用LOOKUP。 而且FOR/NEXT可以在LOOKUP内使用,但这无助于解决我的问题。

您错误地提到了以下行。

* XDIM_MEMBERSET TIME = TIME.PREVYEARMONTH

我更改为以下内容(TIME是从提示中选择用户的12个月)

* XDIM_MEMBERSET TIME = BAS(%TIME_SET%)

我已经更新了完整的代码,请确认。

我不清楚您的陈述"尝试了解LOOKUP正在使用WHEN/ENDWHEN循环中的当前TIME成员。"

以前我了解-LOOKUP块将首先执行,结果将传递到WHEN/ENDWHEN循环。 在您的语句之后,将首先执行WHEN/ENDWHEN循环,而在WHEN循环中,LOOKUP关键字将调用LOOKUP/ENDLOOKUP块。

如果我误会了,请纠正我。

 * SELECT(%VERSION_LIST%,FX_SOURCE_CATEGORY,VERSION,ID =%VERSION_SET%)

 *查询率
 * DIM TIME = TIME.PREVYEARMONTH
 * DIM R_ENTITY =" GLOBAL"
 * DIM VERSION =%VERSION_LIST%
 * DIM R_ACCT = summary_ACCOUNT.RATETYPE
 * DIM LKPLC:INPUTCURRENCY = E_ENTITY.CURRENCY
 * DIM LKPSUB:INPUTCURRENCY = E_ENTITY.SUBMISSION_CURRENCY
 * ENDLOOKUP

 * XDIM_MEMBERSET E_ENTITY = BAS(%E_ENTITY_SET%)
 * XDIM_MEMBERSET TIME = BAS(%TIME_SET%)

 *当RPTCURRENCY
 * IS Subm
 *当E_ENTITY.SUBMISSION_CURRENCY
 * IS <>""
 *当summary_ACCOUNT.RATETYPE时
 * IS <>""
 * REC(EXPRESSION =%VALUE%* LOOKUP(LKPSUB),RPTCURRENCY = USD)
 *其他
 * REC(FACTOR = 1,RPTCURRENCY = USD)
 *结束
 *结束
 *结束
 
wang628962
6楼-- · 2020-09-09 15:32

另一种实现不使用新属性的相同逻辑的方法是在LOOKUP和WHEN/ENWHEN中对时间使用FOR/NEXT循环。 但这很慢,不建议使用!



粗暴的香蕉
7楼-- · 2020-09-09 15:28
克里希纳·桑南普迪

PS 而下一个问题的答案-我们可以使用标准的* RUN_PROGRAM CURR_CONVERSION吗?

否,您不能!

标准程序只能转换LC(本地货币),并且您要 转换" Subm"

一周热门 更多>