on ‎2019 Mar 27 10:34 AM
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.
Request clarification before answering.
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!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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)
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
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...
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
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
...
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
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
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
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?
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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...
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
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
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%
...
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
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
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
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
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 PLANCan you adjust your previous code and help me.
Thanks
Kishore V
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
| User | Count |
|---|---|
| 41 | |
| 4 | |
| 4 | |
| 4 | |
| 4 | |
| 3 | |
| 3 | |
| 2 | |
| 2 | |
| 2 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.