Skip to Content
Technical Articles
Author's profile photo Thomas Yuan

SAP Analytics Cloud Story Supplemented by R Animation


When it comes to visualization, animated charts can be very appealing by showing historical trends and movements. Currently animated visuals can be natively created in SAP Analytics Cloud Applications using Timer: “Using Timer in Your Analytic Applications“. However if we would like to avoid tweaking data filters for every frame of the animation, and therefore causing data refreshing, SAP Analytics Cloud provides R widget support, with which animated charts can be easily created in R and consumed in a Story.

This blog will use the most frequently visualized data these days at the time of writing, COVID-19 cases. It will walk through the steps to create a animated map showing development of total cases around the world over the last five months. I would assume you possess some basic knowledge to create SAP Analytics Cloud Models and Stories.

Let’s start

The data

Our World in Data provides a day-by-day dataset of worldwide COVID-19 cases. It is updated daily and has both daily new cases and cumulated total cases for each country. There is a data quality issue that we will later address: missing dates in the time series. Data can be accessed at:


The Model

We will upload the csv file and create an Import model.

We will have a model with a preview like this.

I saved it with the name ‘COVID-19-OWID‘.

Since the dataset is small, we will deal with the data quality issue later directly in powerful R: it can fix the issue in a couple of lines.


The Story

Time to create the story!

Create a story and include the Model that we have from the previous step. Then add and configure R Visualization, as below: choose Dimensions: iso_code, date and location and choose Account total_cases.


R Code

Let’s go straight to the point: adding following R code to script section. Its logic is explained in embedded comments.

# We use tidyr to cleanse and transform data

# We use plotly to generate the chart

# Source Data Model
  #Remove records that show 0 total cases
  filter(total_cases != 0) %>%
  #Generate a full permutation of countries and dates, filling total_case as NA for any missing records
  mutate(iso_code = factor(iso_code), location=factor(location), date=factor(date)) %>% complete(nesting(iso_code, location), date, fill = list(total_cases = NA)) %>%
  # If, for a country, certain dates are missing in the middle, total_cases is then carried forward from a previous date
  group_by(location) %>% fill(total_cases, .direction="down") %>% ungroup() %>%
  #Data is ready, continue to plot
  plot_geo(locationmode="ISO-3") %>%
    #Scale is capped at 200,000 cases, making it easier to differentiate countries with smaller numbers
    add_trace(z=~total_cases, locations=~iso_code, frame=~date, colorscale="Reds", reversescale=FALSE, zmin=0, zmax=200000) %>%
    layout(geo=list(scope="world"), title=~date) %>% 
    #Frame rate is set to 50ms. Smaller number will result in a faster playback
    animation_opts(frame=50, mode="immediate")



Click on ‘Play’ button and watch it live!



If the R scipt shows any error, please check these:

  1. If you used a different Model name, please replace the name at line 8 of R script
  2. Make you your Rows/Columns settings are same as the screenshot above
  3. Test you R runtime by running a simple command: version


Other thoughts

Some most frequently asked questions are:

Q: Can we bypass ‘Play’ button so that the chart can playback and repeat itself automatically?

A: Depends. The functionality is available in package ‘gganimate’. However it is not installed in default SAP R server runtime environment. If you happen to be using your own remote R connection, install ‘gganimate’ and rewrite R code. Just be mindful some interactive features provided by plotly, such as tooltips, will no longer be available.


Q: How about live data connection?

A: Your system administrator needs to switch it on for you.



This blog illustrated a simple example on how R widgets can help enrich SAP Analytics Cloud Stories. R widgets provide a great addition to the standard SAP Analytics Cloud charts library. They are particularly suitable in those scenarios where highly specialized visualizations are needed. Furthermore, the abundance of R libraries forms a perfect complement to the powerful SAP Analytics Cloud and SAP HANA Platform.

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.