We have our PBIX file opened (1). Our Excel is also opened. We click on button in the ribbon (2) and new pivot table is added to active sheet (4). This pivot table is connected to our PBIX file. Now we can easily create pivot table by using data from Power BI Desktop.
After closing Power BI Desktop, our pivot table will be non interactive. We can open PBIX file again, but this time Power BI Desktop will have some other credentials. This mean that our pivot table will still be non interactive. We have to click on button (3) “Reconnect” to establish connection again. Now we can use our pivot again.
This post will not explain how to create buttons (2,3). It will only explain VBA code needed to achieve described functionality. Code is simple, so it will work with only one PBIX file. Name of that file is hardcoded. This code has no error handling.
Structure of code
On the top we have two procedures “subCreateNewPivot” (1) and “subReconnect” (2). Beside them we have two groups of functions. “Red Orange” group is used to provide credentials of our PBIX file. “Green” group is used to create pivot table. “subCreateNewPivot” is using both groups, but “subReconnect” is using only the “red orange” one.
As explained in one of previous posts, each time Power BI Desktop is opened, it has different credentials and it writes them into location:
C:\Users\<Username>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces (1)
That location has several subfolders (2), each for any of opened Power BI Desktop files. Sometimes there are subfolders that belong to already closed PBIX files, but this subfolders are incomplete and they will be deleted automatically after some time. Inside those subfolders there are two important files. File (3) has name of database in its name ( 601ae6aa-a3c6-4abb-8833-2253863854e4 ). File (4) is ordinary TXT file and it has port number of Power BI Desktop server as its only content.
There are two problems with this setup:
1) Credentials are changed each time Power BI Desktop is opened.
2) We don’t know which credentials belong to which opened PBIX file.
Solution is to read all available credentials with function “funcAllCredentials”. This function is using two helper functions “funcPort” and “funcDatabaseName”. Those helper functions reads values of port number and database name from computer disk. This credentials are then given to function “funcPowerBIpivotDataCredentials” which have to decide which of credentials are the ones we are looking for. We are looking for credentials of “PowerBIpivotData” file. In order to identify correct credentials we are going to read values from tables that we previously created in all of our Power BI Desktop files. Each our PBIX files has table named “NameValue” that looks like (1,2). We will use function “funcPBIXname” to read from each open PBIX file from such table. If, by using some of credentials, we read the value “PowerBIpivotData” (1) from some of the opened PBIX files, that would indicate that those are credentials we need.
Credentials are all we need for “Reconnect” functionality. Procedure “subReconnect” will look for connection that has name starting with “PowerBIpivotData”. This indicate connection that was created before, to create pivot tables. Procedure will then update this connection and its name with new credentials. After this, pivot tables will become interactive again.
Pivot table creation
“New pivot” button also needs information about credentials. This button will use those credentials to create new pivot table. Top procedure “SubCreateNewPivot” will call procedure “subNewPivot”, and that procedure will create new pivot table, by using provided credentials. First, procedure subNewPivot will chech whether connection already exists. If we previously created some pivot table, then we already have connection and we don’t have to create new one. We are using helper function “funcConnectionMissing” to check existance of such connection. If this is not true, then we will create new connection.
New connection will be used to create new pivot table. New pivot table will be created in the top left cell of user selection in the spreadsheet.
VBA code is long enough to not be shown in the text of this blog. Bellow is link for downloading Excel file that has all VBA code and buttons in its ribbon tab. PBIX files are also included.