Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Power_BI_Help
Helper I
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

HI  @Power_BI_Help 

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.

View solution in original post

7 REPLIES 7
Anonymous
Not applicable

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? 

 

need a bit more info to try and help 

@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 ... 

 

@Anonymous 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.

 

 https://1drv.ms/u/s!AqA0zdOdqkphhU41gG8baO20fZTq?e=2K4VPX

 

 

Thanks for the help so far!

@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])

@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.... 


https://imgur.com/a/pZmebtn

 

Ideas?
I appreciate the comments.

HI  @Power_BI_Help 

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.

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

amitchandak
Super User
Super User

@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 ($)]))

 

refer:https://www.linkedin.com/pulse/five-recent-power-bi-functions-you-should-use-more-often-amit-chandak

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.