cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

How to apply forecast script logic calculation to Budget and Plan

BalaValluru
Participant
0 Likes
5,120

Hi

I need a help calculate the Actual vs Forecast and Budget and Plan .

If I am selecting Time dimension 2015.05

Apr 2015 to may 2015 >>> Actual

June 2015 to March 2016>>> Forecast ( =Apr to May actuals/2) dynamically )

Apr 2016 to March 2017 >>> Budget ( same calculation for forecast but time period Apr to March

2017 ,2018,2019,2020 >>> Plan ( Same forecast calculation but time period is 4 years plan)

*SELECT(%TID%,TIMEID,TIME,ID=%TIME_SET%)
*SELECT(%Y%,YEAR,TIME,ID = %TIME_SET%)
*SELECT(%PREV%,ID,TIME,TIMEID<%TID% AND YEAR=%Y% AND CALC=N) //Prev periods
*SELECT(%NEXT%,ID,TIME,TIMEID>=%TID% AND YEAR=%Y% AND CALC=N) //Next periods
*SELECT(%LTID%,TIMEID,TIME,TIMEID<%TID% AND YEAR=%Y% AND CALC=N) //Prev TID's
*SELECT(%NUM%,MONTHNUM,TIME,TIMEID>=%LTID% AND TIMEID<%TID% AND CALC=N) //Number
*XDIM_MEMBERSET TIME=%PREV%
*XDIM_MEMBERSET CATEGORY = Actual
*WHEN TIME
*IS *
*FOR %T%=%NEXT%
*REC(EXPRESSION=%VALUE%/%NUM%,TIME=%T%,CATEGORY=FORECAST)
*NEXT
*ENDWHEN

The Above calculation is working for Actual and Forecast 
Budget and Plan is not working

Please help.

Accepted Solutions (1)

Accepted Solutions (1)

former_member186338
Active Contributor
0 Likes

Final script valid for any user input: YYYY.04,...,YYYX.03:

*SELECT(%NOTMAR%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>12) //%NOTMAR% - empty for MAR
*SELECT(%ISMAR%,ID,TIME,ID=%TIME_SET% AND MONTHNUM=12) //%ISMAR% - empty for not MAR
*SELECT(%NOTFEB%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>11) //%NOTFEB% - empty for FEB

*SELECT(%TID%,TIMEID,TIME,ID=%TIME_SET%)
*SELECT(%Y%,YEAR,TIME,ID = %TIME_SET%)
*SELECT(%PREV%,ID,TIME,TIMEID<=%TID% AND YEAR=%Y% AND CALC=N) //Prev periods
*SELECT(%NUM%,MONTHNUM,TIME,ID=%TIME_SET%) //Number

*SELECT(%TIDG%,TIMEID,TIME,TIMEID>%TID% AND CALC=N) //Next TID's
*SELECT(%NEXTMONTH%,ID,TIME,TIMEID>%TID% AND TIMEID<=%TIDG% AND CALC=N) //Next Month
*SELECT(%NTID%,TIMEID,TIME,ID=%NEXTMONTH%)
*SELECT(%YX%,YEAR,TIME,ID = %NEXTMONTH%)
*SELECT(%NEXT%,ID,TIME,TIMEID>%NTID% AND YEAR=%YX% AND CALC=N) //Next periods current year or next year for MAR

*SELECT(%TIDMAR1%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%YX% AND CALC=N)
*SELECT(%TIDG1%,TIMEID,TIME,TIMEID>%TIDMAR1% AND CALC=N) //Next TID's
*SELECT(%Y1%,YEAR,TIME,TIMEID>%TIDMAR1% AND TIMEID<=%TIDG1% AND CALC=N)
*SELECT(%NEXT1%,ID,TIME,YEAR=%Y1% AND CALC=N) //Budget

*SELECT(%TIDMAR2%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y1% AND CALC=N)
*SELECT(%TIDG2%,TIMEID,TIME,TIMEID>%TIDMAR2% AND CALC=N) //Next TID's
*SELECT(%Y2%,YEAR,TIME,TIMEID>%TIDMAR2% AND TIMEID<=%TIDG2% AND CALC=N)
*SELECT(%NEXT2%,ID,TIME,YEAR=%Y2% AND CALC=N) //Plan1

*SELECT(%TIDMAR3%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y2% AND CALC=N)
*SELECT(%TIDG3%,TIMEID,TIME,TIMEID>%TIDMAR3% AND CALC=N) //Next TID's
*SELECT(%Y3%,YEAR,TIME,TIMEID>%TIDMAR3% AND TIMEID<=%TIDG3% AND CALC=N)
*SELECT(%NEXT3%,ID,TIME,YEAR=%Y3% AND CALC=N) //Plan2

*SELECT(%TIDMAR4%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y3% AND CALC=N)
*SELECT(%TIDG4%,TIMEID,TIME,TIMEID>%TIDMAR4% AND CALC=N) //Next TID's
*SELECT(%Y4%,YEAR,TIME,TIMEID>%TIDMAR4% AND TIMEID<=%TIDG4% AND CALC=N)
*SELECT(%NEXT4%,ID,TIME,YEAR=%Y4% AND CALC=N) //Plan3

*SELECT(%TIDMAR5%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y4% AND CALC=N)
*SELECT(%TIDG5%,TIMEID,TIME,TIMEID>%TIDMAR5% AND CALC=N) //Next TID's
*SELECT(%Y5%,YEAR,TIME,TIMEID>%TIDMAR5% AND TIMEID<=%TIDG5% AND CALC=N)
*SELECT(%NEXT5%,ID,TIME,YEAR=%Y5% AND CALC=N) //Plan4

*FOR %TMAR%=%NOTMAR% //If not MAR is selected

//Store average of %PREV% in %NEXTMONTH% from Actual to FORECAST
//*RUNALLOCATION
//*FACTOR=1/%NUM%
//*DIM TIME WHAT=%PREV%; WHERE=%NEXTMONTH%
//*DIM CATEGORY WHAT=Actual; WHERE=FORECAST
//*ENDALLOCATION
*XDIM_MEMBERSET TIME=%PREV%
*XDIM_MEMBERSET TIME=%NEXTMONTH%

//Run allocation only if user selection is not FEB
*FOR %TFEB%=%NOTFEB%

//Copy %NEXTMONTH% to %NEXT% from FORECAST to FORECAST
//*RUNALLOCATION
//*FACTOR=1
//*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT%
//*DIM CATEGORY WHAT=FORECAST; WHERE=FORECAST
//*ENDALLOCATION
*XDIM_MEMBERSET TIME=%NEXT%

*NEXT //%NOTFEB%

//Copy %NEXTMONTH% to %NEXT1% from FORECAST to Budget
//*RUNALLOCATION
//*FACTOR=1
//*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT1%
//*DIM CATEGORY WHAT=FORECAST; WHERE=Budget
//*ENDALLOCATION
*XDIM_MEMBERSET TIME=%NEXT1%

//Copy %NEXTMONTH% to %NEXT2%,%NEXT3%,%NEXT4%,%NEXT5% from FORECAST to Plan
//*RUNALLOCATION
//*FACTOR=1
//*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT2%,%NEXT3%,%NEXT4%,%NEXT5%
//*DIM CATEGORY WHAT=FORECAST; WHERE=Budget
//*ENDALLOCATION
*XDIM_MEMBERSET TIME=%NEXT2%,%NEXT3%,%NEXT4%,%NEXT5%

*NEXT //%NOTMAR%

*FOR %T1MAR%=%ISMAR% //If MAR is selected

//Store average of %PREV% in %NEXTMONTH% from Actual to Budget
//*RUNALLOCATION
//*FACTOR=1/%NUM%
//*DIM TIME WHAT=%PREV%; WHERE=%NEXTMONTH%
//*DIM CATEGORY WHAT=Actual; WHERE=Budget
//*ENDALLOCATION
*XDIM_MEMBERSET TIME=%PREV%
*XDIM_MEMBERSET TIME=%NEXTMONTH%

//Copy %NEXTMONTH% to %NEXT% from Budget to Budget
//*RUNALLOCATION
//*FACTOR=1
//*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT%
//*DIM CATEGORY WHAT=Budget; WHERE=Budget
//*ENDALLOCATION
*XDIM_MEMBERSET TIME=%NEXT%

//Copy %NEXTMONTH% to %NEXT1%,%NEXT2%,%NEXT3%,%NEXT4% from Budget to Plan
//*RUNALLOCATION
//*FACTOR=1
//*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT1%,%NEXT2%,%NEXT3%,%NEXT4%
//*DIM CATEGORY WHAT=Budget; WHERE=Budget
//*ENDALLOCATION
*XDIM_MEMBERSET TIME=%NEXT1%,%NEXT2%,%NEXT3%,%NEXT4%

*NEXT //%ISMAR%

Allocation code is commented, XDIM_MEMBERSET TIME - for testing!

Answers (2)

Answers (2)

former_member186338
Active Contributor
0 Likes

Corrected script:

*SELECT(%NOTMAR%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>12) //%NOTMAR% - empty for MAR
*SELECT(%NOTFEB%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>11) //%NOTFEB% - empty for FEB

*SELECT(%TID%,TIMEID,TIME,ID=%TIME_SET%)
*SELECT(%Y%,YEAR,TIME,ID = %TIME_SET%)
*SELECT(%PREV%,ID,TIME,TIMEID<=%TID% AND YEAR=%Y% AND CALC=N) //Prev periods
*SELECT(%NUM%,MONTHNUM,TIME,ID=%TIME_SET%) //Number

*SELECT(%TIDG%,TIMEID,TIME,TIMEID>%TID% AND YEAR=%Y% AND CALC=N) //Next TID's
*SELECT(%NEXTMONTH%,ID,TIME,TIMEID>%TID% AND TIMEID<=%TIDG% AND YEAR=%Y% AND CALC=N) //Next Month
*SELECT(%NTID%,TIMEID,TIME,ID=%NEXTMONTH%)
*SELECT(%NEXT%,ID,TIME,TIMEID>%NTID% AND YEAR=%Y% AND CALC=N) //Next periods current year

*SELECT(%TIDMAR1%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y% AND CALC=N)
*SELECT(%TIDG1%,TIMEID,TIME,TIMEID>%TIDMAR1% AND CALC=N) //Next TID's
*SELECT(%Y1%,YEAR,TIME,TIMEID>%TIDMAR1% AND TIMEID<=%TIDG1% AND CALC=N)
*SELECT(%NEXT1%,ID,TIME,YEAR=%Y1% AND CALC=N) //Budget

*SELECT(%TIDMAR2%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y1% AND CALC=N)
*SELECT(%TIDG2%,TIMEID,TIME,TIMEID>%TIDMAR2% AND CALC=N) //Next TID's
*SELECT(%Y2%,YEAR,TIME,TIMEID>%TIDMAR2% AND TIMEID<=%TIDG2% AND CALC=N)
*SELECT(%NEXT2%,ID,TIME,YEAR=%Y2% AND CALC=N) //Plan1

*SELECT(%TIDMAR3%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y2% AND CALC=N)
*SELECT(%TIDG3%,TIMEID,TIME,TIMEID>%TIDMAR3% AND CALC=N) //Next TID's
*SELECT(%Y3%,YEAR,TIME,TIMEID>%TIDMAR3% AND TIMEID<=%TIDG3% AND CALC=N)
*SELECT(%NEXT3%,ID,TIME,YEAR=%Y3% AND CALC=N) //Plan2

*SELECT(%TIDMAR4%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y3% AND CALC=N)
*SELECT(%TIDG4%,TIMEID,TIME,TIMEID>%TIDMAR4% AND CALC=N) //Next TID's
*SELECT(%Y4%,YEAR,TIME,TIMEID>%TIDMAR4% AND TIMEID<=%TIDG4% AND CALC=N)
*SELECT(%NEXT4%,ID,TIME,YEAR=%Y4% AND CALC=N) //Plan3

*SELECT(%TIDMAR5%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y4% AND CALC=N)
*SELECT(%TIDG5%,TIMEID,TIME,TIMEID>%TIDMAR5% AND CALC=N) //Next TID's
*SELECT(%Y5%,YEAR,TIME,TIMEID>%TIDMAR5% AND TIMEID<=%TIDG5% AND CALC=N)
*SELECT(%NEXT5%,ID,TIME,YEAR=%Y5% AND CALC=N) //Plan4

//Run script only if user selection is not MAR
*FOR %TMAR%=%NOTMAR%

//Store average of %PREV% in %NEXTMONTH%
*RUNALLOCATION
*FACTOR=1/%NUM%
*DIM TIME WHAT=%PREV%; WHERE=%NEXTMONTH%
*DIM CATEGORY WHAT=Actual; WHERE=FORECAST
*ENDALLOCATION

//Run allocation only if user selection is not FEB
*FOR %TFEB%=%NOTFEB%

//Copy %NEXTMONTH% to %NEXT% for FORECAST
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT%
*DIM CATEGORY WHAT=FORECAST; WHERE=FORECAST
*ENDALLOCATION

*NEXT

//Copy %NEXTMONTH% to %NEXT1% from FORECAST to Budget
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT1%
*DIM CATEGORY WHAT=FORECAST; WHERE=Budget
*ENDALLOCATION

//Copy %NEXTMONTH% to %NEXT2%,%NEXT3%,%NEXT4%,%NEXT5% from FORECAST to Plan
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT2%,%NEXT3%,%NEXT4%,%NEXT5%
*DIM CATEGORY WHAT=FORECAST; WHERE=Budget
*ENDALLOCATION

*NEXT
BalaValluru
Participant
0 Likes

Thank you for update Vadim.

I will correct the code and will retest.

Thanks

Kishore V

former_member186338
Active Contributor
0 Likes

And silence?

mynynachau
Community Manager
Community Manager
0 Likes

valluru Please DO NOT answer your own question, only if it is the answer to your original question.Please ONLY use the comment functionality to reply to other members. You can also use @ + the user name to make it clear that you are replying to another person.

Thanks and best, Mynyna (SAP Community moderator)

BalaValluru
Participant
0 Likes

Hi Vadim

Ex: Time selection 2009.06 ( Forecast is calculating only from Sept to Dec only not not for Budget and Plan.

and Taking values 1000+2000+3000/4) but our calculation is required 1000+2000+3000/3 and posting should be start from 2009.07 to 2010.03 ) + 1 yr Budget+4 years Plan month wise

Thanks

Kishore V

former_member186338
Active Contributor

valluru

I am unable to understand what do you want!

User selects last actual month 2009.06

Based on your statement:

"If I am selecting Time dimension 2015.05

Apr 2015 to may 2015 >>> Actual"

2009.06 MONTHNUM=3

Actual months are: 2009.04,2009.05,2009.06

(2009.04+2009.05+2009.06)/3 - average of 3 months

And result is written to remaining months of the year: 2009.07...2010.03 forecast etc...

BalaValluru
Participant
0 Likes

vadim.kalinin

Yes, Your correct

User selects 2016.07

2016.04,2016.05.2016.6 display Actuals data

2016.07,2016.08,2016.09,2016.10,2016.11,2016.12,2017.01,2017.02,2017.03 >>>Dispalys Forecast dynamically

2017.04 to 2018.03 >>> display Budget 1 year

2018.04 ....up to 4 years plan monthly.

Thanks

Kishore

former_member186338
Active Contributor
0 Likes

Explaining my script logic once again:

User select in %TIME_SET% the last actual month: 2009.06

Average to be calculated for actual months from the beginning of fiscal year: 2009.04,2009.05,2009.06

Sum of actual months to be divided by number of months = MONTHNUM of 2009.06=3

Average is written to the first forecast month %NEXTMONTH%=2009.07 CATEGORY=FORECAST

Then average stored in %NEXTMONTH% is copied to remaining forecast months in %NEXT%: 2009.08,...,2010.03 CATEGORY=FORECAST

Then average stored in %NEXTMONTH% CATEGORY=FORECAST is copied to Budget: %NEXT1%=2010.04,...,2011.03 CATEGORY=Budget

...

former_member186338
Active Contributor
0 Likes

Looks like you don't understand me!

"Yes, Your correct

User selects 2016.07

2016.04,2016.05.2016.6 display Actuals data

2016.07,2016.08,2016.09,2016.10,2016.11,2016.12,2017.01,2017.02,2017.03 >>>Dispalys Forecast dynamically

2017.04 to 2018.03 >>> display Budget 1 year

2018.04 ....up to 4 years plan monthly."

NO!!!!!!!

Your original request was DIFFERENT!

User selects 2016.06 <-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2016.04,2016.05.2016.6 display Actuals data


BalaValluru
Participant
0 Likes

vadim.kalinin

The below script was working fine as per my requirement for Actuals and Forecast Dynamically but I want to add same calculations for Budget and Plan also for next 1 year Budget and 4 years Plan.

*SELECT(%TID%,TIMEID,TIME,ID = %TIME_SET%) *SELECT(%Y%,YEAR,TIME,ID = %TIME_SET%) *SELECT(%PREV%,ID,TIME,TIMEID<%TID% AND YEAR=%Y% AND CALC=N) //Prev periods *SELECT(%NEXT%,ID,TIME,TIMEID>=%TID% AND YEAR=%Y% AND CALC=N) //Next periods *SELECT(%LTID%,TIMEID,TIME,TIMEID<%TID% AND YEAR=%Y% AND CALC=N) //Prev TID's *SELECT(%NUM%,MONTHNUM,TIME,TIMEID>=%LTID% AND TIMEID<%TID% AND CALC=N) //Number

*XDIM_MEMBERSET TIME=%PREV%

*XDIM_MEMBERSET CATEGORY = Actual

*WHEN TIME *IS * *FOR %T%=%NEXT%

*REC(EXPRESSION=%VALUE%/%NUM%,TIME=%T%,CATEGORY=FORECAST)

*NEXT

*ENDWHEN

Thanks

Kishore V

BalaValluru
Participant
0 Likes

vadim.kalinin

Explaining my script logic once again:

User select in %TIME_SET% the last actual month: 2009.06

Average to be calculated for actual months from the beginning of fiscal year: 2009.04,2009.05,2009.06

Sum of actual months to be divided by number of months = MONTHNUM of 2009.06=3

Average is written to the first forecast month %NEXTMONTH%=2009.07 CATEGORY=FORECAST

Then average stored in %NEXTMONTH% is copied to remaining forecast months in %NEXT%: 2009.08,...,2010.03 CATEGORY=FORECAST

Then average stored in %NEXTMONTH% CATEGORY=FORECAST is copied to Budget: %NEXT1%=2010.04,...,2011.03 CATEGORY=Budget

Your understanding is correct but Plan for 4 years month wise required.


Thanks

KishoreV

former_member186338
Active Contributor
0 Likes

valluru

"Your understanding is correct but Plan for 4 years month wise required."

Yes, look on my script!!!! At the end we have:

Then average stored in %NEXTMONTH% CATEGORY=FORECAST is copied to Plan: %NEXT2%,%NEXT3%,%NEXT4%,%NEXT5% CATEGORY=Plan

Sorry, but try to understand!!!


former_member186338
Active Contributor
0 Likes

valluru

Have to repeat unlimited number of times:

"The below script was working fine as per my requirement for Actuals and Forecast Dynamically but I want to add same calculations for Budget and Plan also for next 1 year Budget and 4 years Plan. ..."

This script was created for another requirements!!!

In this script user will enter the first Forecast month, not the last Actual month!!!!

Do you understand the difference?

BalaValluru
Participant
0 Likes

vadim.kalinin

Yes.Thank you and I got the difference. I have added together your previous code and current code and tested.

Fortunately it working as per my requirement. but only to fix small issue. i.e.

If user selection 2015.03>>> Forecast value is calculating positing in 2015.03 but not copying to Budget and Plan only problem in March month . I know that we have kept the select statement not to calculate in March. But need help to correct the code.

Script Logic:

*SELECT(%NOTMAR%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>12) //%NOTMAR% - empty for MAR *SELECT(%NOTFEB%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>11) //%NOTFEB% - empty for FEB

*SELECT(%TID%,TIMEID,TIME,ID = %TIME_SET%) *SELECT(%Y%,YEAR,TIME,ID = %TIME_SET%) *SELECT(%PREV%,ID,TIME,TIMEID<%TID% AND YEAR=%Y% AND CALC=N) //Prev periods *SELECT(%NEXT%,ID,TIME,TIMEID>=%TID% AND YEAR=%Y% AND CALC=N) //Next periods *SELECT(%LTID%,TIMEID,TIME,TIMEID<%TID% AND YEAR=%Y% AND CALC=N) //Prev TID's *SELECT(%NUM%,MONTHNUM,TIME,TIMEID>=%LTID% AND TIMEID<%TID% AND CALC=N) //Number *SELECT(%TIDG%,TIMEID,TIME,TIMEID>%TID% AND YEAR=%Y% AND CALC=N) //Next TID's *SELECT(%NEXTMONTH%,ID,TIME,TIMEID>%TID% AND TIMEID<=%TIDG% AND YEAR=%Y% AND CALC=N) //Next Month *SELECT(%NTID%,TIMEID,TIME,ID=%NEXTMONTH%)

// *SELECT(%NEXT%,ID,TIME,TIMEID>%NTID% AND YEAR=%Y% AND CALC=N)

//Next periods current year *SELECT(%TIDMAR1%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y% AND CALC=N) *SELECT(%TIDG1%,TIMEID,TIME,TIMEID>%TIDMAR1% AND CALC=N) //Next TID's *SELECT(%Y1%,YEAR,TIME,TIMEID>%TIDMAR1% AND TIMEID<=%TIDG1% AND CALC=N) *SELECT(%NEXT1%,ID,TIME,YEAR=%Y1% AND CALC=N) //Budget *SELECT(%TIDMAR2%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y1% AND CALC=N)

*SELECT(%TIDG2%,TIMEID,TIME,TIMEID>%TIDMAR2% AND CALC=N) //Next TID's *SELECT(%Y2%,YEAR,TIME,TIMEID>%TIDMAR2% AND TIMEID<=%TIDG2% AND CALC=N) *SELECT(%NEXT2%,ID,TIME,YEAR=%Y2% AND CALC=N) //Plan1 *SELECT(%TIDMAR3%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y2% AND CALC=N)

*SELECT(%TIDG3%,TIMEID,TIME,TIMEID>%TIDMAR3% AND CALC=N) //Next TID's *SELECT(%Y3%,YEAR,TIME,TIMEID>%TIDMAR3% AND TIMEID<=%TIDG3% AND CALC=N) *SELECT(%NEXT3%,ID,TIME,YEAR=%Y3% AND CALC=N) //Plan2 *SELECT(%TIDMAR4%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y3% AND CALC=N)

*SELECT(%TIDG4%,TIMEID,TIME,TIMEID>%TIDMAR4% AND CALC=N) //Next TID's *SELECT(%Y4%,YEAR,TIME,TIMEID>%TIDMAR4% AND TIMEID<=%TIDG4% AND CALC=N) *SELECT(%NEXT4%,ID,TIME,YEAR=%Y4% AND CALC=N) //Plan3 *SELECT(%TIDMAR5%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y4% AND CALC=N)

*SELECT(%TIDG5%,TIMEID,TIME,TIMEID>%TIDMAR5% AND CALC=N) //Next TID's *SELECT(%Y5%,YEAR,TIME,TIMEID>%TIDMAR5% AND TIMEID<=%TIDG5% AND CALC=N) *SELECT(%NEXT5%,ID,TIME,YEAR=%Y5% AND CALC=N)

//Plan4 //Run script only if user selection is not MAR *FOR %TMAR%=%NOTMAR%

//Store average of %PREV% in %NEXTMONTH%

*RUNALLOCATION

*FACTOR=1/%NUM%

*DIM TIME WHAT=%PREV%; WHERE=%NEXT%

*DIM CATEGORY WHAT=Actual; WHERE=FORECAST

*DIM RPTCURRENCY WHAT=LC;WHERE=LC

*ENDALLOCATION

//Run allocation only if user selection is not FEB

*FOR %TFEB%=%NOTFEB%

//Copy %NEXTMONTH% to %NEXT% for FORECAST

*RUNALLOCATION

*FACTOR=1

*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT%

*DIM CATEGORY WHAT=FORECAST; WHERE=FORECAST

*DIM RPTCURRENCY WHAT=LC;WHERE=LC

*ENDALLOCATION

*NEXT //Copy %NEXTMONTH% to %NEXT1% from FORECAST to Budget

*RUNALLOCATION

*FACTOR=1 *DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT1%

*DIM CATEGORY WHAT=FORECAST; WHERE=BUDGET

*DIM RPTCURRENCY WHAT=LC;WHERE=LC

*ENDALLOCATION

//Copy %NEXTMONTH% to %NEXT2%,%NEXT3%,%NEXT4%,%NEXT5% from FORECAST to Plan

*RUNALLOCATION

*FACTOR=1 *DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT2%,%NEXT3%,%NEXT4%,%NEXT5%

*DIM CATEGORY WHAT=FORECAST; WHERE=Plan

*DIM RPTCURRENCY WHAT=LC;WHERE=LC

*ENDALLOCATION

*NEXT


Thanks

Kishore V

former_member186338
Active Contributor
0 Likes

valluru

Sorry, but I am simply wasting my time trying to answer your questions!

Instead of explaining you requirements you are posting some code in the NOT READABLE form, with line breaks missing!

REQUIREMENTS, NOT CODE!!!!

former_member186338
Active Contributor
0 Likes

The final script will be:

*SELECT(%NOTMAR%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>12) //%NOTMAR% - empty for MAR
*SELECT(%NOTFEB%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>11) //%NOTFEB% - empty for FEB

*SELECT(%TID%,TIMEID,TIME,ID=%TIME_SET%)
*SELECT(%Y%,YEAR,TIME,ID = %TIME_SET%)
*SELECT(%PREV%,ID,TIME,TIMEID<=%TID% AND YEAR=%Y% AND CALC=N) //Prev periods
*SELECT(%NUM%,MONTHNUM,TIME,TIMEID=%TIME_SET%) //Number

*SELECT(%TIDG%,TIMEID,TIME,TIMEID>%TID% AND YEAR=%Y% AND CALC=N) //Next TID's
*SELECT(%NEXTMONTH%,ID,TIME,TIMEID>%TID% AND TIMEID<=%TIDG% AND YEAR=%Y% AND CALC=N) //Next Month
*SELECT(%NTID%,TIMEID,TIME,ID=%NEXTMONTH%)
*SELECT(%NEXT%,ID,TIME,TIMEID>%NTID% AND YEAR=%Y% AND CALC=N) //Next periods current year

*SELECT(%TIDMAR1%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y% AND CALC=N)
*SELECT(%TIDG1%,TIMEID,TIME,TIMEID>%TIDMAR1% AND CALC=N) //Next TID's
*SELECT(%Y1%,YEAR,TIME,TIMEID>%TIDMAR1% AND TIMEID<=%TIDG1% AND CALC=N)
*SELECT(%NEXT1%,ID,TIME,YEAR=%Y1% AND CALC=N) //Budget

*SELECT(%TIDMAR2%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y1% AND CALC=N)
*SELECT(%TIDG2%,TIMEID,TIME,TIMEID>%TIDMAR2% AND CALC=N) //Next TID's
*SELECT(%Y2%,YEAR,TIME,TIMEID>%TIDMAR2% AND TIMEID<=%TIDG2% AND CALC=N)
*SELECT(%NEXT2%,ID,TIME,YEAR=%Y2% AND CALC=N) //Plan1

*SELECT(%TIDMAR3%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y2% AND CALC=N)
*SELECT(%TIDG3%,TIMEID,TIME,TIMEID>%TIDMAR3% AND CALC=N) //Next TID's
*SELECT(%Y3%,YEAR,TIME,TIMEID>%TIDMAR3% AND TIMEID<=%TIDG3% AND CALC=N)
*SELECT(%NEXT3%,ID,TIME,YEAR=%Y3% AND CALC=N) //Plan2

*SELECT(%TIDMAR4%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y3% AND CALC=N)
*SELECT(%TIDG4%,TIMEID,TIME,TIMEID>%TIDMAR4% AND CALC=N) //Next TID's
*SELECT(%Y4%,YEAR,TIME,TIMEID>%TIDMAR4% AND TIMEID<=%TIDG4% AND CALC=N)
*SELECT(%NEXT4%,ID,TIME,YEAR=%Y4% AND CALC=N) //Plan3

*SELECT(%TIDMAR5%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y4% AND CALC=N)
*SELECT(%TIDG5%,TIMEID,TIME,TIMEID>%TIDMAR5% AND CALC=N) //Next TID's
*SELECT(%Y5%,YEAR,TIME,TIMEID>%TIDMAR5% AND TIMEID<=%TIDG5% AND CALC=N)
*SELECT(%NEXT5%,ID,TIME,YEAR=%Y5% AND CALC=N) //Plan4

//Run script only if user selection is not MAR
*FOR %TMAR%=%NOTMAR%

//Store average of %PREV% in %NEXTMONTH%
*XDIM_MEMBERSET TIME=%PREV%
*XDIM_MEMBERSET CATEGORY = Actual
*WHEN TIME
*IS *
*REC(EXPRESSION=%VALUE%/%NUM%,TIME=%NEXTMONTH%,CATEGORY=FORECAST)
*ENDWHEN

//Run allocation only if user selection is not FEB
*FOR %TFEB%=%NOTFEB%

//Copy %NEXTMONTH% to %NEXT% for FORECAST
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT%
*DIM CATEGORY WHAT=FORECAST; WHERE=FORECAST
*ENDALLOCATION

*NEXT

//Copy %NEXTMONTH% to %NEXT1% from FORECAST to Budget
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT1%
*DIM CATEGORY WHAT=FORECAST; WHERE=Budget
*ENDALLOCATION

//Copy %NEXTMONTH% to %NEXT2%,%NEXT3%,%NEXT4%,%NEXT5% from FORECAST to Plan
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT2%,%NEXT3%,%NEXT4%,%NEXT5%
*DIM CATEGORY WHAT=FORECAST; WHERE=Budget
*ENDALLOCATION

*NEXT
former_member186338
Active Contributor
0 Likes

P.S. You can also add code that will ensure that user selected only single time member!

Please read my blog: https://blogs.sap.com/2018/11/04/how-to-check-that-only-single-member-is-passed-from-dm-prompt-in-bp...

former_member186338
Active Contributor
0 Likes

P.S. The average calculation can be also done using RUNALLOCATION!

Instead of:

//Store average of%PREV%in%NEXTMONTH%
*XDIM_MEMBERSET TIME=%PREV%
*XDIM_MEMBERSET CATEGORY = Actual
*WHEN TIME
*IS *
*REC(EXPRESSION=%VALUE%/%NUM%,TIME=%NEXTMONTH%,CATEGORY=FORECAST)
*ENDWHEN

Can be:

//Store average of %PREV% in %NEXTMONTH%
*RUNALLOCATION
*FACTOR=1/%NUM%
*DIM TIME WHAT=%PREV%; WHERE=%NEXTMONTH%
*DIM CATEGORY WHAT=Actual; WHERE=FORECAST
*ENDALLOCATION
BalaValluru
Participant
0 Likes

Thank you so much for your inputs Vadim.

I will test with this script and let you know.

Thanks a lot

Kishore V

mynynachau
Community Manager
Community Manager
0 Likes

Hi valluru Please use the comment button to reply to Vadim. Submitting an answer should only be used if you have an answer to the original question.

Thanks and best, Mynyna

former_member186338
Active Contributor

The idea is to calculate TIME scopes using SELECT statements and based on the sequence of TIMEID values.

Instead of real WHEN/ENDWHEN or RUNALLOCATION you can test the script in UJKT replacing WHEN/ENDWHEN or RUNALLOCATION with *XDIM_MEMBERSET TIME=... to check scopes

BalaValluru
Participant
0 Likes

Hi Vadim,

I have validated the script in UJKT and I am getting error Factor=1/ is not valid in default.


UJKT validation

Could you please him . Is any thing I have missed.

Thanks

Kishore V

former_member186338
Active Contributor
0 Likes

valluru

Sorry, but this is obvious!

If you didn't specify TIME in UJKT data region, then %TIME_SET% is empty...

And it will be empty in validation...

Use EXECUTE(Simulate) to see the correct code with some member selected for TIME dimension in data region!

Look on the code:

*SELECT(%NUM%,MONTHNUM,TIME,TIMEID=%TIME_SET%) //Number
...
*RUNALLOCATION
*FACTOR=1/%NUM%
...
BalaValluru
Participant
0 Likes

Hi Vadim,

I have give the time selection 2015.05 in UJKT and in Input form after saving the data getting factor =1/not validated (Script is calling from Default for testing purpose later I will call through DM package)

Input form :

Logic is getting calculated if I am removing %NUM% in (factor =1/%NUM%) but only copying April month values to Forecast,Budget.

Thanks

Kishore V

former_member186338
Active Contributor
0 Likes

Looking on the part of the script on your screenshot I see that it's not my script!

What are you doing??? Just playing?

former_member186338
Active Contributor
0 Likes

Ups, just found typo error in my code:

Not:

*SELECT(%NUM%,MONTHNUM,TIME,TIMEID=%TIME_SET%) //Number

But:

*SELECT(%NUM%,MONTHNUM,TIME,ID=%TIME_SET%) //Number

BalaValluru
Participant
0 Likes

Hi Vadim

Thanks a lot for answering my questions and support .We are almost done and below code is working fine.

My intention is calculate for March month also. How to unblock the March month . If user selects 2015.02 ...

Forecast month : 2015.03 display +Budget+Plan ( now march month also calculating but not copying the values to Budget and Plan periods)

*SELECT(%NOTMAR%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>12) //%NOTMAR% - empty for MAR
*SELECT(%NOTFEB%,ID,TIME,ID=%TIME_SET%AND MONTHNUM<>11) //%NOTFEB% - empty for FEB

*SELECT(%TID%,TIMEID,TIME,ID = %TIME_SET%)
*SELECT(%Y%,YEAR,TIME,ID = %TIME_SET%)
*SELECT(%PREV%,ID,TIME,TIMEID<%TID% AND YEAR=%Y% AND CALC=N) //Prev periods
*SELECT(%NEXT%,ID,TIME,TIMEID>=%TID% AND YEAR=%Y% AND CALC=N) //Next periods
*SELECT(%LTID%,TIMEID,TIME,TIMEID<%TID% AND YEAR=%Y% AND CALC=N) //Prev TID's
*SELECT(%NUM%,MONTHNUM,TIME,TIMEID>=%LTID% AND TIMEID<%TID% AND CALC=N) //Number

*SELECT(%TIDG%,TIMEID,TIME,TIMEID>%TID% AND YEAR=%Y% AND CALC=N) //Next TID's
*SELECT(%NEXTMONTH%,ID,TIME,TIMEID>%TID% AND TIMEID<=%TIDG% AND YEAR=%Y% AND CALC=N) //Next Month
*SELECT(%NTID%,TIMEID,TIME,ID=%NEXTMONTH%)
*SELECT(%TIDMAR1%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y% AND CALC=N)

*SELECT(%TIDG1%,TIMEID,TIME,TIMEID>%TIDMAR1% AND CALC=N) //Next TID's
*SELECT(%Y1%,YEAR,TIME,TIMEID>%TIDMAR1% AND TIMEID<=%TIDG1% AND CALC=N)
*SELECT(%NEXT1%,ID,TIME,YEAR=%Y1% AND CALC=N) //Budget

*SELECT(%TIDMAR2%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y1% AND CALC=N)
*SELECT(%TIDG2%,TIMEID,TIME,TIMEID>%TIDMAR2% AND CALC=N) //Next TID's
*SELECT(%Y2%,YEAR,TIME,TIMEID>%TIDMAR2% AND TIMEID<=%TIDG2% AND CALC=N)
*SELECT(%NEXT2%,ID,TIME,YEAR=%Y2% AND CALC=N) //Plan1

*SELECT(%TIDMAR3%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y2% AND CALC=N)
*SELECT(%TIDG3%,TIMEID,TIME,TIMEID>%TIDMAR3% AND CALC=N) //Next TID's
*SELECT(%Y3%,YEAR,TIME,TIMEID>%TIDMAR3% AND TIMEID<=%TIDG3% AND CALC=N)
*SELECT(%NEXT3%,ID,TIME,YEAR=%Y3% AND CALC=N) //Plan2

*SELECT(%TIDMAR4%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y3% AND CALC=N)
*SELECT(%TIDG4%,TIMEID,TIME,TIMEID>%TIDMAR4% AND CALC=N) //Next TID's
*SELECT(%Y4%,YEAR,TIME,TIMEID>%TIDMAR4% AND TIMEID<=%TIDG4% AND CALC=N)
*SELECT(%NEXT4%,ID,TIME,YEAR=%Y4% AND CALC=N) //Plan3

*SELECT(%TIDMAR5%,TIMEID,TIME,MONTHNUM=12 AND YEAR=%Y4% AND CALC=N)
*SELECT(%TIDG5%,TIMEID,TIME,TIMEID>%TIDMAR5% AND CALC=N) //Next TID's
*SELECT(%Y5%,YEAR,TIME,TIMEID>%TIDMAR5% AND TIMEID<=%TIDG5% AND CALC=N)
*SELECT(%NEXT5%,ID,TIME,YEAR=%Y5% AND CALC=N) //Plan4

//Runscript only if user selection is not MAR
*FOR%TMAR%=%NOTMAR%
//Store average of %PREV% in %NEXTMONTH%
*RUNALLOCATION
*FACTOR=1/%NUM%
*DIM TIME WHAT=%PREV%; WHERE=%NEXT%
*DIM CATEGORY WHAT=Actual; WHERE=FORECAST
*DIM RPTCURRENCY WHAT=LC;WHERE=LC
*ENDALLOCATION

//Run allocation only if user selection is not FEB
*FOR %TFEB%=%NOTFEB%
//Copy %NEXTMONTH% to %NEXT% for FORECAST
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT%
*DIM CATEGORY WHAT=FORECAST; WHERE=FORECAST
*DIM RPTCURRENCY WHAT=LC;WHERE=LC
*ENDALLOCATION
*NEXT

//Copy %NEXTMONTH% to %NEXT1% from FORECAST to Budget
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT1%
*DIM CATEGORY WHAT=FORECAST; WHERE=BUDGET
*DIM RPTCURRENCY WHAT=LC;WHERE=LC*ENDALLOCATION

//Copy %NEXTMONTH% to %NEXT2%,%NEXT3%,%NEXT4%,%NEXT5% from FORECAST to Plan

*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT2%,%NEXT3%,%NEXT4%,%NEXT5%
*DIM CATEGORY WHAT=FORECAST; WHERE=Plan
*DIM RPTCURRENCY WHAT=LC;WHERE=LC
*ENDALLOCATION
*NEXT

Thanks
Kishore V

former_member186338
Active Contributor
0 Likes

valluru

Have to repeat hundred times!!!!!!!!!!!!!!!!!!!!!!

Not code but logic description!

What is the required logic for all months of the year?

User selects:

YYYY.04 - ...

YYYY.05 - ...

YYYY.06 - ...

...

YYYY.03 - ...

BalaValluru
Participant
0 Likes
vadim.kalinin

Apologies..

Ex;User selection: 2015.05

Actuals/2015.04,2015.05+ forecast /2015.06, 2015.07.2015.08,2015.09,2015.10,2015.11,2015.12,2016.01,2016.02,2016.03 + BUDGET 2016.04 to 2017.03 + Plan/ 2017.04 to 2018.03/2018.04 to 2019.03/2019.04 to 2020.03/2020.04 to 2021.03

Logic: Avg Actuals= 2015.04+2015.05/2 months copy same formula to Forecast, Budget and Plan month wise

Ex; User selects: 2016.02

Actuals/2015.04,2015.05,2015.06,2015.07,2015.08,2015.09,2015.10,2015.11,2015.12,2016.01,2016.02+ forecast /2016.03 +

BUDGET 2016.04 to 2017.03 + Plan/ 2017.04 to 2018.03/2018.04 to 2019.03/2019.04 to 2020.03/2020.04 to 2021.03

Logic: AvgActuals= 2015.04,2015.05,2015.06,2015.07,2015.08,2015.09,2015.10,2015.11,2015.12,2016.01,2016.02/11 months

copy same formula to Forecast, + 1yr Budget +4 years Plan month wise

Ex; User selects: 2016.03

Actuals/2015.04,2015.05,2015.06,2015.07,2015.08,2015.09,2015.10,2015.11,2015.12,2016.01,2016.02+ 2016.03 +

*no forecast ******

+

BUDGET 2016.04 to 2017.03 + Plan/ 2017.04 to 2018.03/2018.04 to 2019.03/2019.04 to 2020.03/2020.04 to 2021.03

Logic: AvgActuals= 2015.04,2015.05,2015.06,2015.07,2015.08,2015.09,2015.10,2015.11,2015.12,2016.01,2016.02,2016.03/12months

copy formula to ..1yr Budget +4 years Plan month wise

(No forecast)

Thanks

Kishore V

former_member186338
Active Contributor
0 Likes

Sorry, but looks like you are unable to specify requirements!

First - you are not providing results for all months of the year.

Second - you assume again that user selection is the last month of actual, not the first month of forecast...

How often you will change the logic?

Each day???

BalaValluru
Participant
0 Likes

vadim.kalinin

Hi Vadim,

Yes, user selection is the last month of actual, not the first month of forecast and there is no change in requirement.

Results: Average of each month copy to Forecast,Budget ,Plan

2015.04: Actual,1000/1 month= >>> copy to Forecast ,Budget ,Plan

2015.05: Actual,1000+1000/2 month=>>> copy results to Forecast,Budget,Plan

2015.06: Actual 1000+1000+1000/3 month =>>> copy results to Forecast,Budget,Plan

Many thanks for your help for code.

Kishore V

former_member186338
Active Contributor
0 Likes

valluru

OK, then my script is correct!

But what do you want to have for 2016.03?

Initially you told that user will never select 2016.03

BalaValluru
Participant
0 Likes

vadim.kalinin

Thank you Vadim,

what do you want to have for 2016.03?

Full year Actual display No forecast on March

Example

Results Avg Actual from APR to MAR copy to BUDGET 1 year and Plan 4 years montly =12000/12 >>>>>>> copy to BUDGET AND PLAN

Can you adjust your previous code and help me.

Thanks

Kishore V

BalaValluru
Participant
0 Likes

vadim.kalinin

Can you please help the code to calculate the FEB and March results which is not copying avg actuals to Forecast, Budget and Plan

User selection : 2016.02

Actuals/APR to FEB calculating avg actuals and Posting only to 2016.03 Forecast and copying to Budget and Plan

User Selection :2016.03

Actuals/APR to MARCH results not posting to Budget and Plan (No forecast required in March)

*SELECT(%NOTMAR%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>12) //%NOTMAR% - empty for MAR
*SELECT(%NOTFEB%,ID,TIME,ID=%TIME_SET% AND MONTHNUM<>11) //%NOTFEB% - empty for FEB

//Run script only if user selection is not MAR
*FOR %TMAR%=%NOTMAR%
//Store average of %PREV% in %NEXTMONTH%
*RUNALLOCATION
*FACTOR=1/%NUM%
*DIM TIME WHAT=%PREV%; WHERE=%NEXT%
*DIM CATEGORY WHAT=Actual; WHERE=FORECAST
*DIM RPTCURRENCY WHAT=LC;WHERE=LC
*ENDALLOCATION

//Run allocation only if user selection is not FEB
*FOR %TFEB%=%NOTFEB%
//Copy %NEXTMONTH% to %NEXT% for FORECAST
*RUNALLOCATION
*FACTOR=1
*DIM TIME WHAT=%NEXTMONTH%; WHERE=%NEXT%
*DIM CATEGORY WHAT=FORECAST; WHERE=FORECAST
*DIM RPTCURRENCY WHAT=LC;WHERE=LC
*ENDALLOCATION
*NEXT


Thanks
Kishore V