cancel
Showing results for
Did you mean:
Helper I

## Calculated Column: Rolling Maximum by Label (or high water mark)

Hello Community,

I have been calculating Drawdown = Current Value / Rolling Maximum (or high water mark) for each different label. I have this DAX formula working, however, it is very laggy to process that I am looking to optimize.

Portfolio - Drawdown (%) Calculated =

Formula 1:
Var Drawdown =
DIVIDE(
[Portfolio - Equity Total EOD Day Change (\$) Cumulative with Initial] - [Portfolio - Rolling Maximum],
[Portfolio - Rolling Maximum]
)
Return
// If the value is greater than - the drawdown is technically 0
IF(
Drawdown >= 0,
0,
Drawdown
)

I was thinking of adding a specific column for Rolling Maximum would remove the calculation from the DAX. However, I am finding that the same logic filters can not be applied to a calculated column as a DAX formula.

When I try a formula such as what is listed below, it simply populates the max value in that column and does not refer to the date (or an index that I created) to keep proper filtering. Is there a trick to calculated columns that I am missing?

Formula 2:
Portfolio - Rolling Maximum =
CALCULATE( // Searches the maximum value in the total EOD row filtered by the maximum date when using time series
MAXX(
'Daily Ledgers',
'Daily Ledgers'[Portfolio - Equity Total EOD (\$)]
),
FILTER(
ALLSELECTED('Date'),
'Date'[Date] <= MAX('Date'[Date]
)
)
)

Thanks for any hints in advance

1 ACCEPTED SOLUTION
Community Support

For your case, i would suggest you use Date hierarchy in the x-axis, since there are to many day in the axis, so the calculation will be very slow, so you'd better just use Year-quarter-Month in the visual, do not use dim day any more.

here is sample pbix file, please try it.

Regards,

Lin

Community Support Team _ Lin
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
7 REPLIES 7
Post Patron

Can you provide more context behing Laggy?

is the measure taking to long to calculate when you select slicers?

are you using this in a measure or calculated column?

Helper I

@amitchandak That seems to grab the max value within the day across the different IDs but does not create a rolling max per ID.

What I was looking for:
ID // Date // Value // Max

1 // 1.1 // 40 // 40

1 // 1.2 // 30 // 40

1 // 1.3 // 50 // 50

2 ...

@Dnerada here is a link to the file that replicates what I am talking about. My charts on the actual file take ~40 - 60 seconds to load and I am planning to scale the file much more significantly (my file has about 5 IDs). And yes, when changing different factors and parameters needing to reload (or drilling down) takes a while. Ultimately, looking for a less computationally intensive way to calculate this. I was thinking that if I created a calculated column that had preprocessed the rolling maximum value it would cut down on load time significantly.

Thanks for the help so far!

Super User IV

@Power_BI_Help , it can if the ID is present in the visual table

Else put in calculate and force Id using values(Table[ID])

Proud to be a Super User!

Helper I

@amitchandak

The function seems to grab the last non blank value (i.e. the same day) not the maximum value of all the dates leading up to that day. I attached a photo with the formula you've stated and the incorrect graph it creates when compared to the correct chart on the left. The calculated column does the same. It is not an all time high value for the column up to that date....

Ideas?

Community Support

For your case, i would suggest you use Date hierarchy in the x-axis, since there are to many day in the axis, so the calculation will be very slow, so you'd better just use Year-quarter-Month in the visual, do not use dim day any more.

here is sample pbix file, please try it.

Regards,

Lin

Community Support Team _ Lin
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Helper I

D'oh, can't believe that was all I needed to do. So much faster and more scalable, thanks.

Super User IV

@Power_BI_Help , Not clear. Can you share sample data and sample output in table format?

You can try like this

lastnonblankvalue(Date'[Date], max('Daily Ledgers'[Portfolio - Equity Total EOD (\$)]))

Proud to be a Super User!

Announcements

#### Microsoft named a Leader in The Forrester Wave

Microsoft received the highest score of any vendor in both the strategy and current offering categories.