If you were looking to upgrade a Power BI model to Analysis Services Tabular, hopefully you decided to do it before March 1, 2019, that was the day Microsoft decided to remove the tool from Azure. I know I needed to upgrade after that and I was really sorely disappointed. I also blew my schedule as the upgrade process went from a 20 minute process to something that took over 2 hours. I am writing this blog to save you some time as I learned a few tricks which I wish I would have known about before upgrading.
Preparing your Power BI model to Upgrade to Tabular
Unless you are upgrading to analysis services on SQL Server 2019, chances are you are going to have to review your DAX code and make some modifications as DAX on the other versions of SQL Server are not the same as Power BI. I was upgrading to AS on SQL Server 2016, there were some commands that I had to manual edit out of the JSON file. If you have any new DAX commands, take them out of your Power BI Model which means you will not have to manually edit the JSON file to remove them when the new commands are flagged as errors. Make sure your Power BI Model does not include commands such as SELECTEDVALUE, GENERATESERIES as well as all of the automatically generated date hierarchies. After your Power BI desktop file is clean, leave it running as you are going to need to have it running for the next step.
Connect to your Power BI Model in Analysis Services
Power BI is running a version of Analysis Services tabular and once you figure out what version is running; you can connect to it. Open up the Task Manager and take a look at the Power BI Desktop in the Processes tab by clicking on the arrow at the right-hand side so that you see all of the processes running. You see by the picture here, that there are 19 processes running with one Power BI file loaded. Right click on the instance of Microsoft SQL Server Analysis Services running within Power BI Desktop and select Go to Details. This command will bring you to the Details table in Task Manager and will highlight which version and PID to connect in Analysis Services on your computer. You will notice my PID is 3992. Using this number I went to the command prompt and typed
Netstat -anop TCP | findstr 3392.
This command returns the address I need to access Power BI model from Analysis Services, 127.0.0.1:51328
That’s it. Now I can look at my Power BI model in SQL Sever Analysis Services from within Management Studio. It looks like this
TL;DR This model is not usable and you will have to do some tweaks to it to make it work. The first step is to fix the connections, then edit some JSON. Right click on the connection and select properties. Click on the ellipse button next to the connection string, and you will get this error message.
Once you click ok, you can edit the connection to something that will work.
All of my Power BI tables were connecting to views in SQL Server, which is a best practice as this allows you to select only the fields you need and provides you with the ability to sort your data as it is read in, which can improve the compression. I changed the Provider to SQL Server, and fixed the connection. Once the connections are changed, you will need to create an XMLA script and edit it. Right click on the Database with the GUID name and select Script->Script Database As->Create To-> File. Give the file a name as you will be using it after connecting to your analysis Services instance.
Editing the XMLA File
Open up the XMLA file you created in Analysis Sr. The first thing you will need to fix is the compatibility level. Power BI set the value to 1465. 1400 is for Azure AS, SQL Server 2017 and 2016 use 1200, so I edited the script to change the value 1200. I also changed the database name to “SampleAS” from the GUID that it was assigned. I then executed the script, and got my first error
Executing the query …
The JSON DDL request failed with the following error: Unrecognized JSON property: variations. Check path ‘model.tables.columns.variations’, line 362, position 30..
I typed Ctrl G and entered the line number to fix the first error which was on this line
“formatString”: “dddd\\, mmmm d\\, yyyy”,
I deleted that line and ran it again. This time I got this error.
Executing the query …
The JSON DDL request failed with the following error: Unrecognized JSON property: variations. Check path ‘model.tables.columns.variations’, line 361, position 30..
Line 361 starts with the word variations. The section is contained within square brackets .
“hierarchy”: “Date Hierarchy”
Date Hierarchies are not supported the same way in AS, so I need to edit the XMLA to remove this section. I will need to repeat this step for every auto-generated data hierarchy I have, which is why I recommend that you remove them as it will save you a lot of time. Another line which caused an error was this line.
“query”: “SELECT * FROM [Rates]”,
My view is not called Rates. It is called vw_PaidRates. The table in the Power BI model is called Rates. There is no table or view called rates so I needed to change Rates to the name of the view vw_PaidRates. I repeated this for every table in the XMLA file. I estimate that the editing process took over an hour to eliminate all of the code that would not work. After that I was able to create an project in visual studio using the Import From Server(Tabular) option.
Upgrade Process from Power BI to Tabular
The process was tedious, and it made me long for the 15 minute Azure AS conversion. The method I outlined here is not supported by Microsoft, so it is up to you to make it work. I have been able to successfully convert a model, just takes a lot of time. Fixing the Power BI model up front helps, and it would also help if little of your text is formatted but there are some things, like the query fixes that you just have to do on your own. I understand that the conversion process is much easier if you are using SQL Server 2019 as that version of Analysis Services is mostly compatible with the version created by Power BI. Unfortunately I don’t have any clients yet who are using 2019. I hold out hope it will be easier to do next time, but I will allow for a lot more time to make the conversion happen.
Data aficionado et SQL Raconteur