Thanks for posting this - this has also been a timely problem for the central tech team too. In October we added 2014 IATI spend $USD aggregations for all publishers on the Dashboard coverage tab.
We spoke to D-Portal about how they are managing conversions and their approach seems to be to scrape daily exchange rates from the IMF website each night, and then to save a local copy in Git. When the data is collected, these are averaged out for the whole month, and that average rate is used for USD (based on the month in the value-date).
(I've also asked @Matt for some clarification on the process here, as the IMF link appears to only list currency to SDR rates, rather than currency to USD rates.)
They also have an 'exchange' tab on a Google sheet that is used for for currencies which aren’t in the nightly IMF data. This stores exchange rate data on an annual basis.
In terms of the implementation on the Dashboard, we went for an MVP approach, using the annual data in the D-portal exchange tab. The spreadsheet we use, together with logic is available here: https://github.com/IATI/IATI-Stats/tree/master/helpers/currency_conversion In time, we would like to move to a monthly granularity, based on automated inputs of IMF data, although this is not a priority at present.
Would be interesting to hear others perspectives, and do post back with details, in due course, of your implementation approach @Murrx