on 03-03-2016 9:39 AM
Hi,
I use some Member Formulas to calculated key figures.
My first Formula Looks like this
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "1", AVG(LastPeriods(1,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "2", AVG(LastPeriods(2,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "3", AVG(LastPeriods(3,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "4", AVG(LastPeriods(4,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "5", AVG(LastPeriods(5,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "6", AVG(LastPeriods(6,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "7", AVG(LastPeriods(7,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "8", AVG(LastPeriods(8,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "9", AVG(LastPeriods(9,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "10", AVG(LastPeriods(10,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "11", AVG(LastPeriods(11,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92]) * 0.01,
IIF([H_TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "12", AVG(LastPeriods(12,[H_TIME].CURRENTMEMBER),[H_ACCOUNT].[BPCN92] ) * 0.01, NULL))))))))))))
In the 2nd formula I would like to use the result of Formula 1 and add the value of another postion but this time a add another selection. It Looks like this
[H_ACCOUNT].[KF_ONE] + ([3RD_IC].[PARENTH1].[3RD] , [H_ACCOUNT].[PARENTH1].[NODE99])
The result is the value onf KF_ONE ... Why don't I get the Value for the 2nd part?
BPC 10.1
HANA Support
and yes, I've activated MDX in spro
Hi,
I've to come back on this post. Is there an easy way to sum up all results per Periode on year Level?
The formula is based on an AST account an it calculates a values / month. I use the property "MONTHNUM" of the time Dimension to get an average value for X periods * percentage. On the "total" Level I would like to get the sum of all periods. Since underlying account is AST this is not that easy. I thougt changing the "MONTHNUM" value of e.g. 2016.TOTAL from 12 to 13 and to recalculate all values again but 1st it doesn't work and 2nd the formula is very Long.
IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "", 1,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "1", [ACCOUNT].[ACCGR_99] * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "2", AVG(LastPeriods(2,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "3", AVG(LastPeriods(3,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "4", AVG(LastPeriods(4,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "5", AVG(LastPeriods(5,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "6", AVG(LastPeriods(6,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "7", AVG(LastPeriods(7,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "8", AVG(LastPeriods(8,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "9", AVG(LastPeriods(9,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "10", AVG(LastPeriods(10,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "11", AVG(LastPeriods(11,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99]) * 0.015,IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "12", AVG(LastPeriods(12,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99] ) * 0.015, IIF([TIME].CURRENTMEMBER.PROPERTIES("MONTHNUM") = "13", AVG(LastPeriods(1,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(2,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(3,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(4,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(5,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(6,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(7,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(8,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(9,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(10,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(11,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015+AVG(LastPeriods(12,[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015) * 0.015, 1))))))))))))))
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Just some results of experiments
IIF([TIME].CURRENTMEMBER.PROPERTIES("PERIOD")="TOTAL",(
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*3.1032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-1),[ACCOUNT].[ACCGR_99])*2.1032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-2),[ACCOUNT].[ACCGR_99])*1.6032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-3),[ACCOUNT].[ACCGR_99])*1.2698773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-4),[ACCOUNT].[ACCGR_99])*1.0198773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-5),[ACCOUNT].[ACCGR_99])*0.8198773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-6),[ACCOUNT].[ACCGR_99])*0.6532107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-7),[ACCOUNT].[ACCGR_99])*0.5103535+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-8),[ACCOUNT].[ACCGR_99])*0.3853535+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-9),[ACCOUNT].[ACCGR_99])*0.2742424+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-10),[ACCOUNT].[ACCGR_99])*0.1742424+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-11),[ACCOUNT].[ACCGR_99])*0.0833333)*0.015
,AVG(PERIODSTODATE([TIME].[LEVEL00], [TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR_99])*0.015;SOLVE_ORDER=10
Hi Vadim,
it's very close already
I've tried to add the AVG to the TOTAL Level but there is still an error and I get a short dump in EXCEl
Any hint?
IIF([TIME].CURRENTMEMBER.PROPERTIES("PERIOD")="TOTAL",
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-0), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-1), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-2), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-3), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-4), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-5), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-6), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-7), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-8), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-9), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-10), [ACCOUNT].[ACCGR])*0.015+
AVG(PERIODSTODATE([TIME].[LEVEL00], OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-11), [ACCOUNT].[ACCGR])*0.015 ,
AVG(PERIODSTODATE([TIME].[LEVEL00],[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR])*0.015)
It's a school level arithmetic
Hint:
1 month avg: X1 (X1 - value in first month)
2 month avg: (X1+X2)/2
3 month avg: (X1+X2+X3)/3
...
12 month avg: (X1+X2+X3+...+X12)/12
5*7*8*9*11=27720
Sum=(X1*27720+X1*13860+X2*13860+X1*9240+X2*9240+X3*9240...)/27720
Sum=X1*(27720+13860+9240+...)/27720+X2*(13860+9240+...)/27720+...
Do I need to continue ?
"calculating the avg is okay for me" - but not okay for the system
OK, back to school
You want to sum fractions:
X1/1+(X1+X2)/2+(X1+X2+X3)/3+(X1+X2+X3+X4)/4...
You need to find the minimal integer that can be divided by 1,2,3,4,...,12
This integer is: 5*7*8*9*11=27720
Then we convert the expression to the same:
X1*27720/(1*27720)+(X1+X2)*27720/(2*27720)+(X1+X2+X3)*27720/(3*27720)+(X1+X2+X3+X4)*27720/(4*27720)...
Then to:
X1*27720/27720+(X1+X2)*13860/27720+(X1+X2+X3)*9240/27720+(X1+X2+X3+X4)*6930/27720...
Then opening the brackets:
(X1*27720+X1*13860+X2*13860+X1*9240+X2*9240+X3*9240+X1*6930+X2*6930+X3*6930+X4*6930...)/27720
Then rearranging:
X1*(27720+13860+9240+6930+...)/27720+X2*(13860+9240+6930+...)/27720+X3*(9240+6930+...)/27720+X4*(6930+...)/27720+...
And we have coefficients!
okay, the coefficients stay constant and I only Change the percentage like this:
IIF([TIME].CURRENTMEMBER.PROPERTIES("PERIOD")="TOTAL",
(
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR])*3.1032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-1),[ACCOUNT].[ACCGR])*2.1032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-2),[ACCOUNT].[ACCGR])*1.6032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-3),[ACCOUNT].[ACCGR])*1.2698773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-4),[ACCOUNT].[ACCGR])*1.0198773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-5),[ACCOUNT].[ACCGR])*0.8198773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-6),[ACCOUNT].[ACCGR])*0.6532107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-7),[ACCOUNT].[ACCGR])*0.5103535+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-8),[ACCOUNT].[ACCGR])*0.3853535+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-9),[ACCOUNT].[ACCGR])*0.2742424+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-10),[ACCOUNT].[ACCGR])*0.1742424+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-11),[ACCOUNT].[ACCGR])*0.0833333
)*0.1731,
AVG(PERIODSTODATE([TIME].[LEVEL00],[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR])*0.014425)
but I still have a delta of 0,11
Look on the sample with the same coefficient for month and year with Excel calculation test:
Small rounding error in the 7 digit can be ignored!
Formula:
IIF([TIME].CURRENTMEMBER.PROPERTIES("PERIOD")="TOTAL",
(
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR])*3.1032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-1),[ACCOUNT].[ACCGR])*2.1032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-2),[ACCOUNT].[ACCGR])*1.6032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-3),[ACCOUNT].[ACCGR])*1.2698773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-4),[ACCOUNT].[ACCGR])*1.0198773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-5),[ACCOUNT].[ACCGR])*0.8198773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-6),[ACCOUNT].[ACCGR])*0.6532107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-7),[ACCOUNT].[ACCGR])*0.5103535+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-8),[ACCOUNT].[ACCGR])*0.3853535+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-9),[ACCOUNT].[ACCGR])*0.2742424+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-10),[ACCOUNT].[ACCGR])*0.1742424+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-11),[ACCOUNT].[ACCGR])*0.0833333
)*0.1731,
AVG(PERIODSTODATE([TIME].[LEVEL00],[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR])*0.1731)
This time I'm on vacation and the office is bothering me with this issue
I would like to com back on post: Aug 11, 2016 11:08 AM
Even if it is slow it should give me the right result by repeating the calculations on TOTAL level and sum that up. But there is an error in that since I've a dump in Excel
Different values but the same problem with the result
this is how the current formula looks like:
IIF([TIME].CURRENTMEMBER.PROPERTIES("PERIOD")="TOTAL",
((OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER),[ACCOUNT].[ACCGR])*3.1032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-1),[ACCOUNT].[ACCGR])*2.1032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-2),[ACCOUNT].[ACCGR])*1.6032107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-3),[ACCOUNT].[ACCGR])*1.2698773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-4),[ACCOUNT].[ACCGR])*1.0198773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-5),[ACCOUNT].[ACCGR])*0.8198773+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-6),[ACCOUNT].[ACCGR])*0.6532107+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-7),[ACCOUNT].[ACCGR])*0.5103535+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-8),[ACCOUNT].[ACCGR])*0.3853535+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-9),[ACCOUNT].[ACCGR])*0.2742424+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-10),[ACCOUNT].[ACCGR])*0.1742424+
(OPENINGPERIOD([TIME].[LEVEL02],[TIME].CURRENTMEMBER).LAG(-11),[ACCOUNT].[ACCGR])*0.0833333)*0.10,
AVG(PERIODSTODATE([TIME].[LEVEL00],[TIME].CURRENTMEMBER),CoalesceEmpty([ACCOUNT].[ACCGR],0))*0.10)
MDX is a complex language and you have to read a lot of documents on Microsoft site: MDX Function Reference (MDX)
For the rest - just search forum...
What HANA Revision are you using?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Christian,
First of all please test some simple nested formula, like:
KF_ONE=[BPCN92]
KF_TWO=[KF_ONE]
Is it working?
Second - you first formula can be optimized (without IIF - BASEPERIOD is a number, not string like MONTHNUM)
Vadim
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
10 | |
3 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.