Using groups in Power BI to publish content to production on your schedule.

When developing dashboards and reports for a large group of business users you want to make sure you deploy the right content at the right time. In this article we will look at an approach that allows me to create and maintain dashboards and reports with a group of developers without disturbing the business users using the reports and dashboards and only deploy the changes to them when we deem the dashboard ready. To do this we will use the groups and content pack functionality of Power BI.

To get started I create a group in Power BI, that I called ContentCreateGroup:


This group we will use to develop the dashboard(s) and report(s). After it is created I select the group, this gives me a nice and empty group to work in:


Next I create my model and reports in Power BI desktop:


This will form the basis of my solution. Now I go back to the group and select files:


This brings me to a special OneDrive for Business folder dedicated to this group where I can upload my Power BI desktop file:


Note: If you have a standalone Power BI without Office 365 this option is not available for you. Instead you can use OneDrive to keep your Power BI files. This works similar as using OneDrive for business.

Next I want load this Power BI desktop file to my Power BI group, to do this I click on the Plus sign next to DataSets and select Get Files:


Here I can select the “OneDrive ContentCreatergroup”:


This allows me to pick the File and click connect:


This will add the report and dashboard to the Power BI service. Anytime I make changes to the reports or model and re-upload the Power BI desktop file to the OneDrive for business the reports and dataset in Power BI will automatically be updated to the changes.

Now I can create the appropriate dashboard as needed:


Now to get this dashboard into the hands of your end users you have several options:

1. Give your users access to the group that we just created. They can now access the group directly and interact with the dashboard. The downside of this approach is that changes made by you are immediately visible to the end users.

2. Create a content pack for your dashboard. This allows you to package up your dashboard at any time you deem your dashboard ready to be shared with your end users. Your end users do have to go the content pack library and instantiate the content pack for the first time.

3. Share the dashboard you just created to your end users, they will now get to see the dashboard in their main group. The downside of this approach is similar as the previous that changes made by you are immediately visible to the end users.

In this article we will actually use a combination of 1 and 2. Now let’s go ahead and publish my dashboard. This is the general flow used:

1. Create a content pack from my dashboard and report, this allows me to publish an update of the dashboard and reports at any time.

2. I will create a second group where I instantiate the content pack, this group will be used by the end users to consume the dashboard and reports.

Let’s walk through the steps, first I created a second group that I will use to host the dashboard with the end users:


This is the group where your end users will go to see the reports and dashboards, you can give them access by going to members and adding them individually or by group:


Now that we have set up this group we need to get dashboard from the other group into this new group. I go back to my first group where the main dashboard lives and select “create content pack” at settings:


Now you can pick the dashboards, reports and datasets that you want to share and enter some information about it, observe that for this content pack I choose the content pack to be accessible only with the new group I just created. Now its ready to be published and I press publish:


Now I go back to the newly created group and instantiate the content pack by getting the content pack from the content pack library:


Here I can find the content pack I just created:


When I click “get” it will add the dashboard, reports and datasets to my group:


Everyone with access to the group will now be able to see this dashboard. The content is fully controlled by the content pack.

Let’s go ahead and make a change to the dashboard and roll it out in a managed fashion. To do this I go back to the original group and pin an additional visual.


You will notice that as soon as you make a change to the dashboard Power BI will give you a notification:


This means that even though you changed the dashboard your end users do not see this yet until you actually publish the update. You can go ahead and make as many changes as you want. Only at the moment that you are comfortable with all the changes you can publish the update by going to “View content packs”:


And select edit on my “Sales Dashboard”:


Now you will notice it contains an update button:


This updates the content pack:


Now it automatically updates the dashboard in the group accessible by your end users.

Note: one additional step that might make this a bit more complex is in the case where you have different data sources for dev and production. In that case you can change the connectionstring in the Power BI desktop file before updating the “production” content pack, then change it back immediately afterwards for the dev tenant. Or if you want to take it even further you can introduce another environment if you want to have a clear separation between dev and prod. In that case you would get something like this:

  • The dev team would build the report and dashboard in the dev workspace like described above
  • When ready for publishing they give the PBIX file to the deployment team, the deployment team then will take the report (and potentially change the connectionstring) and potentially update the dashboard, this has to be done manually unfortunately.
  • After that they can package it up in a content pack, all the next steps are now similar as described above .

As you can see using groups and content packs we have a great way of collecting all the changes the development team makes to an enterprise dashboard and publishing it to the end users only when you are ready.

On twitter I got notified about this great blog post by Steve Howard that is very similar to my approach below at well worth the read!

  • Ivan Bondarenko

    Thanks for covering this topic! Such scenario is very important.
    What would be also useful – best practices for O365 groups maintain process. How to align everything within distribution lists, security groups, possibly custom roles from ERP (HR)… transition to O365 groups 1 to 1.
    Without automated way of handling users in O365 groups (e.g. based on HR system) I do not see opportunity to integrate solution on enterprise level.

  • Kasper, you wouldn’t believe how timely this was for me. I’m working with two clients (within Microsoft as it happens) and for both teams I was struggling to find an approach to do what you just described. Big Thanks my friend!