Pricing analytics report displays incorrect currency after exchange rate update in pricing management

Our pricing analytics report is showing incorrect converted amounts after we updated exchange rates last week. The report displays pricing data in multiple currencies with automatic conversion to group currency (EUR), but after updating USD/EUR rates from 1.08 to 1.12, the report still shows conversions using the old rate.

The currency conversion logic is implemented in our CDS view that feeds the BW extraction:

currency_conversion(
  amount => NetPrice,
  source_currency => LocalCurrency,
  target_currency => 'EUR',
  exchange_rate_date => PricingDate
)

I’ve verified that the new exchange rates are correctly maintained in table TCURR with valid-from date of last Monday. When I check individual pricing documents in VK13, they show the correct converted amounts using the new rate. But the analytics report continues to display the old conversions.

I suspect this is related to how the CDS view references the exchange rate table or how the analytics cache handles currency conversion. Has anyone dealt with exchange rate updates not flowing through to analytics reports correctly?

The currency_conversion function in CDS views caches exchange rates for performance. Check if your CDS view has @Analytics.query: true annotation - this can cause additional caching at the query level. You might need to explicitly refresh the currency conversion cache using transaction RSCUR or wait for the scheduled nightly refresh.

The analytics cache refresh is definitely part of the problem. Even if the CDS view is reading current exchange rates, the analytics layer maintains its own materialized results. Check transaction RSRT and look for your analytical query - there’s usually a ‘Refresh’ option to clear cached results. You might also need to invalidate the OLAP cache in transaction RSRCACHE.

I’ve dealt with this multiple times. The issue is usually that the exchange rate table reference in the CDS view isn’t dynamic. Make sure your view is using the standard SAP currency conversion function with proper date parameters, not a direct join to TCURR. If you have custom logic joining to TCURR, the view might be compiled with the old rates and needs reactivation.

Look at your exchange_rate_date parameter in the currency_conversion function. You’re using PricingDate, which is the date of the pricing document, not the current date. If your pricing documents are dated before the exchange rate change, the function correctly uses the old rate that was valid on that pricing date. This might be by design, not a bug, depending on your business requirements for historical pricing analysis.

If you’re extracting to BW, the exchange rates are also maintained separately in the BW system. Check table /BI0/PEXCHRATE in BW - it has its own copy of exchange rates that needs to be synchronized with the S/4HANA rates. The BW extraction might be using the BW-side rates which haven’t been updated yet. You need to reload the exchange rate master data in BW.

After extensive troubleshooting with our technical team, we’ve identified and resolved the currency conversion issue. The problem involved all three focus areas: currency conversion logic in the CDS view, exchange rate table reference configuration, and analytics cache refresh timing.

Currency Conversion Logic Problem: Our currency_conversion function was syntactically correct but had a logical flaw. We were using PricingDate as the exchange_rate_date, which meant historical pricing records always used the exchange rate valid on their original pricing date. For historical analysis, this is correct. But for current reporting where we want to see “today’s value” of historical prices, we needed a different approach.

We modified the CDS view to support both scenarios:

@Analytics.parameter: 'P_CONV_DATE'
currency_conversion(
  amount => NetPrice,
  source_currency => LocalCurrency,
  target_currency => 'EUR',
  exchange_rate_date => case
    when :P_CONV_DATE = 'CURRENT' then $session.system_date
    else PricingDate
  end
)

This allows the report to use either historical rates (for trend analysis) or current rates (for current valuation).

Exchange Rate Table Reference Issue: The more critical problem was that our BW extraction was using a separate exchange rate table. We have both embedded analytics (CDS-based) and BW reporting, and they were out of sync. The CDS view correctly read from S/4HANA’s TCURR table with updated rates, but BW’s /BI0/PEXCHRATE table still had old rates.

We implemented automatic synchronization:

  1. Created a custom program to extract exchange rates from TCURR to BW daily
  2. Modified the BW InfoPackage to include exchange rate master data in the daily load
  3. Set up a process chain to reload /BI0/PEXCHRATE immediately after exchange rate updates in S/4HANA

Analytics Cache Refresh Solution: The third issue was multi-layered caching. Even after fixing the data sources, cached results persisted:

  1. CDS View Cache: Used transaction SFSW to clear the CDS view cache for our pricing analytics view
  2. Currency Conversion Cache: Ran transaction RSCUR to refresh the currency conversion buffer
  3. OLAP Cache: Cleared query-specific cache in transaction RSRCACHE for all pricing-related queries
  4. BW Cache: Invalidated BW query cache using transaction RSRT → ‘Delete OLAP Cache’

We also discovered that the currency_conversion function maintains an internal buffer that’s refreshed only nightly by default. We modified the CDS view to include:

@Analytics.settings.cacheExpirationTime: '1H'

This forces the currency conversion to refresh hourly instead of daily.

After implementing all changes, we tested with a pricing document from last month (when USD/EUR was 1.08). Using the ‘historical’ conversion mode, it correctly shows the old rate. Using ‘current’ mode, it now shows conversion at the new 1.12 rate. The report updates within one hour of any exchange rate changes.

One critical learning: When using BW alongside embedded analytics, exchange rate master data must be synchronized between systems. We now have a monitoring job that compares TCURR and /BI0/PEXCHRATE daily and alerts if they’re out of sync by more than 1%.

For anyone facing similar issues, I recommend checking the entire currency conversion pipeline: the CDS function parameters, the source exchange rate tables in both S/4HANA and BW (if applicable), and all caching layers from CDS to OLAP to application cache.