Forum Discussion
Multiplication with Previous Values
Excel File: Link
Hello,
Could you please help me write the following DAX Querry?
I want to create a measure to calculate values highlighted blue in the predicted-CO2 emission column using the formula given in the formula column.
So, for the forecast emission for July, I am taking the previous month's value ( i.e. actual emission in june=100) and multiplying it by 1.15 to get a 15% increase for July. For August, I take the forecast value of July (i.e. 100*1.15= 115) and multiply it by 1.15 to get a 15% increase ( (i.e. 115*1.15= 132).
Any given help will be appreciated.
Thanks,
Sam
sam_hoccane
Your wishes are my command 😉 Here is the workable solution exactly as you wish
https://we.tl/t-bo914kjbfJPredicted_Measure_4 = VAR CurrentEmission = SUM ( Data[Emission] ) VAR CurrentMonth = SELECTEDVALUE ( data[Year_Month] ) VAR CurrentForcast = SELECTEDVALUE ( Data[forcast] ) VAR PreviousMonths = FILTER ( ALLSELECTED ( Data ), data[Year_Month] < CurrentMonth ) VAR PreviousN_Months = FILTER ( PreviousMonths, Data[forcast] = "N" ) VAR PreviousN_Month = MAXX ( PreviousN_Months, data[Year_Month] ) VAR PreviousN_Emission = SUMX ( FILTER ( PreviousN_Months, data[Year_Month] = PreviousN_Month ), Data[Emission] ) VAR YearMonthOnly = DISTINCT ( SELECTCOLUMNS ( PreviousMonths, "@YearMonth", Data[Year_Month] ) ) VAR NumberOfY_Months = COUNTROWS ( FILTER ( YearMonthOnly, [@YearMonth] > PreviousN_Month && [@YearMonth] <= CurrentMonth ) ) + 1 VAR Result = IF ( CurrentForcast = "N", CurrentEmission, PreviousN_Emission * POWER ( 1.15, NumberOfY_Months ) ) RETURN Result
12 Replies
- tamerj1Community Champion
Hi sam_hoccane
Here is a sample file with the solution https://we.tl/t-cRyZP69iROFor calculated column:
Predicted = VAR CurrentEmission = Sheet1[CO2 Emission] VAR CurrentMonth = Sheet1[Month] VAR PreviousMonths = FILTER ( Sheet1, Sheet1[Month] < CurrentMonth ) VAR PreviousN_Months = FILTER ( PreviousMonths, Sheet1[forecast] = "N" ) VAR PreviousN_Month = MAXX ( PreviousN_Months, Sheet1[Month] ) VAR PreviousN_Emission = MAXX ( FILTER ( PreviousN_Months, Sheet1[Month] = PreviousN_Month ), Sheet1[CO2 Emission] ) VAR NumberOfY_Months = COUNTROWS ( FILTER ( PreviousMonths, Sheet1[Month] > PreviousN_Month && Sheet1[Month] <= CurrentMonth ) ) + 1 VAR Result = IF ( Sheet1[forecast] = "N", Sheet1[CO2 Emission], PreviousN_Emission * POWER ( 1.15, NumberOfY_Months ) ) RETURN ResultFor measure:
Predicted Measure = VAR CurrentEmission = SELECTEDVALUE ( Sheet1[CO2 Emission] ) VAR CurrentMonth = SELECTEDVALUE ( Sheet1[Month] ) VAR CurrentForcast = SELECTEDVALUE ( Sheet1[forecast] ) VAR PreviousMonths = FILTER ( ALL ( Sheet1 ), Sheet1[Month] < CurrentMonth ) VAR PreviousN_Months = FILTER ( PreviousMonths, Sheet1[forecast] = "N" ) VAR PreviousN_Month = MAXX ( PreviousN_Months, Sheet1[Month] ) VAR PreviousN_Emission = MAXX ( FILTER ( PreviousN_Months, Sheet1[Month] = PreviousN_Month ), Sheet1[CO2 Emission] ) VAR NumberOfY_Months = COUNTROWS ( FILTER ( PreviousMonths, Sheet1[Month] > PreviousN_Month && Sheet1[Month] <= CurrentMonth ) ) + 1 VAR Result = IF ( CurrentForcast = "N", CurrentEmission, PreviousN_Emission * POWER ( 1.15, NumberOfY_Months ) ) RETURN Result- sam_hoccaneHelper I
- tamerj1Community Champion
sam_hoccane
Please check the updated solution in the original reply
- DhacdResolver III
Hi sam_hoccane,
Please find another way to achieve the desired solution below,
PredictedEmissions = Var TableN = filter('Table','Table'[forecast]="N") Var MaxMonth = CALCULATE(MAX('Table'[Month]),TableN) Var LastEmission = CALCULATE(MAX('Table'[CO2 Emission]),'Table'[Month]=MaxMonth,all('Table')) Var Difference =datediff(MaxMonth,'Table'[Month],MONTH) Var Predicted = (LastEmission *power(1.15,Difference)) return if( 'Table'[forecast]="Y",Predicted,'Table'[CO2 Emission])
Screenshot Attached
If this post helps, then please consider accepting it as the solution to help the other members find it more quickly.
Regards,Atma.
- tamerj1Community Champion
Dhacd
Good job!
A few issues here.
We don't know whether "N" and "Y" cycle overtime. Therefore the maximum Month with "N" might be after the first "Y" row.
If a month reading is missing from the data (not taken or not recorded for any reason) the DATEDIFF will not provide a correct result. COUNTROWS seems to be more reliable in this case.
- sam_hoccaneHelper I
- tamerj1Community Champion
Hi sam_hoccane
Do you want that for each type / each manager?- sam_hoccaneHelper I
Yes please, I also want apply filter on Manager level and also I need without manager filter.