How to: Build a SQL Server Dashboard with Power BI Desktop
Posted by denglishbi on August 25, 2015
Just last month Microsoft released the new Power BI which included a new self-service BI application called Power BI Desktop. I introduced this when it was first launched in the following blog posts – Power BI Desktop Install Experience & Publish Feature! and Ready, Set, and Go! PowerBI.com, Power BI Desktop, and Pyramid Analytics Alliance. A few weeks ago I was exploring some new uses for this application and the first one I tried out was to create a SQL Server Dashboard that would provide some information about my local SQL Server instance running on my laptop. Let’s take a look at the final result –
Here we can see that I included the SQL Server logo, the name of my machine, the version and build number of SQL Server I am running, and then some information about the databases – the count, sizes, types, last backup, recovery model, and file information.
Now let’s take a quick look at how this was built. First thing you will need to download and install the Power BI Desktop application. It appears that since the initial release the application has already been updated a few times, latest build version is 2.26.4128.403 and it was released on August 20, 2015. The application is available in both 32 and 64-bit versions.
Once you have the application downloaded, installed, and started up, the first thing we will want to do is get some data. You can either click on the Get Data on the Getting Started screen when you open the application or in the Ribbon you can click on Get Data and then SQL Server.
Then enter in your server name and provide the query to get the information. In this case the query will be running against the master database and the query will be the following:
SELECT @@servername ServerName,
@@version SQLVersion,
sdb.NAME DatabaseName,
sdb.create_date CreateDateTime,
sdb.compatibility_level CompatibilityLevel,
sdb.collation_name CollationName,
sdb.recovery_model_desc RecoveryModel,
Max(bus.backup_finish_date) AS LastBackUpTime,
size.sizeinmb DatabaseSize,
CASE
WHEN sdb.database_id < 5 THEN ‘System’
ELSE ‘User’
END DatabaseType
FROM sys.databases sdb
LEFT OUTER JOIN msdb.dbo.backupset bus
ON bus.database_name = sdb.NAME
INNER JOIN (SELECT [DatabaseName] = Db_name(database_id),
[Type] = CASE
WHEN type_desc = ‘ROWS’ THEN ‘Data File(s)’
WHEN type_desc = ‘LOG’ THEN ‘Log File(s)’
ELSE type_desc
END,
[SizeinMB] = Cast(( ( Sum(size) * 8 ) / 1024.0 ) AS
DECIMAL(18, 2))
FROM sys.master_files
GROUP BY grouping sets ( ( Db_name(database_id), type_desc )
, ( Db_name(database_id) ) )) size
ON sdb.NAME = size.databasename
AND size.type IS NULL
GROUP BY sdb.NAME,
sdb.create_date,
sdb.compatibility_level,
sdb.collation_name,
sdb.recovery_model_desc,
size.sizeinmb,
sdb.database_id
Once the query has been populated to create the data we clean it up a little bit by splitting some columns, changing data types, renaming the columns to be more user friendly, and provide a name for the data query.
We can then close this query and add more, in this case we have another query that will provide the information about the files associated with each database. The query we are going to use was actually used in the first query and was from the following post located here:
SELECT [DatabaseName] = Db_name(database_id),
[Type] = CASE
WHEN type_desc = ‘ROWS’ THEN ‘Data File(s)’
WHEN type_desc = ‘LOG’ THEN ‘Log File(s)’
ELSE type_desc
END,
[SizeinMB] = Cast(( ( Sum(size) * 8 ) / 1024.0 ) AS DECIMAL(18, 2))
FROM sys.master_files
GROUP BY grouping sets ( ( Db_name(database_id), type_desc ),
( Db_name(database_id) ) )
Once this data set is added we apply a filter, pivot the data, rename the columns, and then provide a name for the query and close and load the data.
Now that we have the two data queries, we can establish a relationship between the two (you could also merge them together if you would prefer).
And then you can create reports and add text boxes, images, slicers, and visualizations.
Now we could stop here at this point, but what fun would that be. What if I wanted to be able to monitor and report on my databases while I am out on the road or having a conversation with a colleague? Hmmm, there must be a solution for that…and ‘Yes’ there is!
Microsoft provides the online PowerBI.com service that allows you to upload (or Publish) your Power BI Desktop creations. I already have an account, so I can click on the Publish button in the Ribbon and then I will be prompted to save the file and if I have already published this before an option to Replace the existing dataset (or Cancel).
The solution will then be published and you will be provided a link to access the item directly.
Once published I can create a dashboard in the online service and pin the items I want to my dashboard from the reports I included (see the initial image in the blog post for the final result). You can also enhance the reports and edit them if needed, just be careful though, if you publish from the desktop you could override changes in the online version of the reports.
Now, are we done yet? No way, what about refreshing the data? But how can I do that, the data is running on my laptop… No worries, download and install the Power BI Personal Gateway. Once this is downloaded, installed, and configured (Power BI Personal Gateway online knowledge base article) you will have the ability to refresh the dataset that is loaded in the online PowerBI.com service.
How cool is that! And you can see in the below screenshot that is exactly what I did, if you compare this to the initial dashboard at the top of the post you will see that there are two additional databases (flashback goodies – Northwind and pubs return!).
And I can view this on the mobile application on my phone as well:)
There are lots of possibilities for expanding on this set of reports – analyzing database and table statistics, usage, queries, and more.
I would really love to hear what you think of the “new” Power BI and the ideas and creations you are building, leave a comment and let me know, thanks!
Adam Seniuk said
Great article, can you post the code for PowerBI as a download?
Jason said
Details: “Microsoft SQL: Incorrect syntax near ‘‘’.
Incorrect syntax near ‘DatabaseType’.
Incorrect syntax near ‘‘’.
Incorrect syntax near ‘Sum’.”
denglishbi said
This is most likely because of the font and the single quotes. You will just need to change those once you copy the statement into the editor.
Banks Coggin said
When I run the query I get 0 results….I am the DB owner. Should I have changed something in the original SQL?
denglishbi said
In order to run the queries and return results you need server level permissions, view this post on StackOverflow https://stackoverflow.com/questions/18911953/how-to-give-a-user-access-to-sys-master-files-in-sql-server