Yes, variables are the solution to album based calculations inside MC, but they aren't necessarily easy to use and it definitely helps to have a background in programming as there are quite a few tripping points.
Anyway, in this case what you want to do is quite easy:
Album DR = ( sum track dynamic ranges ) / ( number of tracks )
Just copy and paste the code below into a smartlist and you're good to go:
[=save(0,var_number_of_tracks[album artist (auto)][album])1]=1
[=save(0,var_album_dynamic_range_sum[album artist (auto)][album])1]=1
[=save(math(1+load(var_number_of_tracks[album artist (auto)][album])),var_number_of_tracks[album artist (auto)][album])1]=1
[=save(math([Dynamic Range (DR)]+load(var_album_dynamic_range_sum[album artist (auto)][album])),var_album_dynamic_range_sum[album artist (auto)][album])1]=1
[=save(math(load(var_album_dynamic_range_sum[album artist (auto)][album]) / load(var_number_of_tracks[album artist (auto)][album])),var_album_dr[album artist (auto)][album])1]=1
The Album DR ends up in the variable: var_album_dr[album artist (auto)][album]
You could create a user field, eg Album DR and set it as a calculated field to:
load(var_album_dr[album artist (auto)][album])
This would then allow use to use the field anywhere inside MC. But you would have to ensure you call the smartlist to populate the field values otherwise they would just be empty.
You'll notice I use [album artist (auto)][album] in the variables. This helps to keep albums with the same title, but different artists, from clashing with each other, but won't keep compilation albums with the same title apart. But that's another level of problem to solve.
Hope that helps
Mark
PS The above calculates the TT-DR for the album. If you wanted R128 averages you'd need to replace Dynamic Range (DR) with Dynamic Range (R128)
PPS You could also use:
formatnumber(load(var_album_dr[album artist (auto)][album]),0)
In the user field to round the Album DR to the nearest decimal