Is it worth considering the 'peek' function, giving you something like:
Budget + Peek('YTD',-1) as YTD,
Spend + Peek('[YTD Spend]',-1) as [YTD Spend]
I'm not sure how you would initiate the YTD and YTD Spend fields, probably need to do an if statement to identify the first row of each new year and set the value to Budget or Budget Spend. This is not tested so is only really for a rough idea rather than a certain solution.