Since the Dynamic Range (R128) is decimal, you'll have to do the comma --> period conversion where Math() is being used.
Yes, you can save the output of your Album DR into an album-relational field. You can either use a calculated field (as per our discussion above), or make it a non-calculated field and just assign the value once manually.
I took a quick look at your expressions above, and here are some reworkings to employ new MC19 features:
[Media Type]=[Audio] [=1save(0,v_tracks_albumkey())]=1 [=1saveadd(v_tracks_albumkey(),1)]=1 [=1save(0,v_drsum_albumkey())]=1 [=1ifelse(compare([Dynamic Range (DR)],=,0),save(-1,v_drsum_albumkey()))]=1 [=1ifelse(compare(load(v_drsum_albumkey()),>,-1),saveadd(v_drsum_albumkey(), [Dynamic Range (DR)]))]=1 ~sort=[Album Artist (auto)],[Album],[Track #],[Media Type],[Disc #],[Name]
which is:
[Media Type]=[Audio]
save(0,v_tracks_albumkey())
saveadd(v_tracks_albumkey(),1)
save(0,v_drsum_albumkey())
ifelse(compare([Dynamic Range (DR)],=,0),
save(-1, v_drsum_albumkey()))
ifelse(compare(load(v_drsum_albumkey()),>,-1),
saveadd(v_drsum_albumkey(), [Dynamic Range (DR)]))
~sort=[Album Artist (auto)],[Album],[Track #],[Media Type],[Disc #],[Name]
This uses the new saveadd() function, and the old albumkey() function which produces [album artist (auto)] - [Album].
For the first pane, I combined the output of your second pane and pushed those values into a hierarchy. It also employs the new Math() function trunc() to eliminate the FormatNumber() call. There is a new MC18 feature used, that you can reference simple global variables after set using a [var] shortcut (no functions inside). Finally, you only need to change the first "16" at the top of the expression:
save(16,drsize)/
if(isempty([Dynamic Range (DR),0]), * No DR,
save(math(trunc((load(v_drsum_albumkey()) / load(v_tracks_albumkey()) + .005),2)),tmp)/
ifelse(
compare(load(v_drsum_albumkey()), >=, [drsize]), >= [drsize]\[tmp],
compare(load(v_drsum_albumkey()), <, [drsize]), < [drsize]\[tmp]
)
)&datatype=[list]