R Script Visual in Power BI

Power BI desktop provides an option to visualize data with R. I decided to give this a try after exhausting the limits of my knowledge with the other built-in Power BI visualizations. My experience with both R and Power BI is fairly limited, so I covered a lot of new territory with this exercise. There may have been other, better options to reach the goal I was aiming for. But so be it--I learned a lot in the process. Hopefully you get something of value from this recap.
R Environment
The R engine isn't included with the installation of Power BI desktop. I won't go into detail on this, so just know you'd need to install that separately. I had already installed the R component as part of Machine Learning Services for SQL Server 2017. I also had RStudio installed. Within Power BI desktop, take a moment to click File | Options and settings | Options to open the Options page. Then click R scripting in the list of Global Options. Here you'll see options to set the R home directory and the desired R IDE.

In the Visualizations pane, the block "R" icon should be easy to spot. When clicked the first time in the Power BI report, you'll be prompted to enable script visuals:

Click Enable, and you'll see a placeholder for the R script visual on the canvas, with the R script editor below it:

Data Fields
In the images above, note the existing "Query1" with three data fields: Backup Finish Date, BackupType, and Database. The source of this data is a simple SQL Server query:
SELECT bs.database_name, bs.backup_finish_date, CASE bs.type WHEN 'D' THEN 'Full' WHEN 'I' THEN 'Differential' WHEN 'L' THEN 'Log' END AS BackupType FROM msdb.dbo.backupset bs;
With the R script visual selected on the canvas, tick the checkbox next to each data field you want to use for the visual. (You can also drag & drop fields into the Values pane, or on the R script visual on the canvas. This auto-populates the R script editor, where you'll see the names of the fields that were selected.

Note the hierarchy for Backup Finish Date. The individual hierarchy fields are referenced in the R script editor code. I want the Backup Finish Date as a whole, though. So I address this in the Values pane:

The fields in the R script editor are updated accordingly:

Next, I write the R code. The R script editor pane is small and doesn't look user-friendly for development activity. But Power BI gives us the option to use an external development environment. Click the arrow icon for this option.

For me, this opened RStudio with a few lines of code pre-written to create an R data frame. This mimics the dataset in Power BI. (Code is slightly formatted for readability.)
# Input load. Please do not change # `dataset` = read.csv( 'C:/Users/Dave/REditorWrapper_.../input_df_....csv', check.names = FALSE, encoding = "UTF-8", blank.lines.skip = FALSE); # Original Script. Please update your script content here and once # completed copy below section back to the original editing window # ##############################
The rest of the R code is outside the scope of this blog post, but it's included for reference. The visual I create uses the ggplot function from the ggplot2 package:
library(ggplot2) library(scales) dataset$"Backup Finish Date" <- as.POSIXct(dataset$"Backup Finish Date", format = "%Y-%m-%dT%H:%M:%S") dataset <- dataset[order(dataset$BackupType, decreasing = TRUE),] colorValues <- c("Full" = "blue", "Differential" = "magenta", "Log" = "yellow") ggplot(dataset, aes( dataset$"Backup Finish Date", dataset$Database, colour = dataset$BackupType)) + geom_point(aes(size = BackupType != "Log")) + scale_size_manual(values=c(1,3), guide = FALSE) + xlab("Backup Date") + ylab("Database Name") + labs(colour = "Backup Type") + scale_color_manual(values=colorValues) + scale_y_discrete(limits = rev(levels(dataset$Database))) + scale_x_datetime(labels = date_format("%b-%d")) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18), legend.title = element_text(size=18), legend.text = element_text(size=16))
The R code above is copied from RStudio and pasted into the R script editor in Power BI. To view the visual, click the Run Script icon in the R script editor:


Lessons Learned
I stubbed my toe a number of times learning how to make this work. Numerous times I clicked the Run Script icon only for Power BI to tell me there was a script error. Most of my issues were attributed to my inexperience with R. But there may have been a Power BI-related issue or two as well. I'll look to blog about this in another post.
I think there is a need to look for some more crucial aspects of SQL and REST API.
ReplyDeletePowerbi Read Rest