
I was a Data Engineer for a consulting company supporting a primary client’s sales team, with persons around the world, responsible with their data and reporting. A couple of times my team had to go find each of our Power BI Reports to make a change to keep them standardized. For example, legal makes a change to their notice statement located in the footer section. Or, the design team updates their acceptable logo (image). Another opportunity with this is to compose a standard message to all reports using the template. This wouldn’t be an issue if we had 10 reports and a dashboard or 2 that are all centrally located. But with 70+ reports on Power BI Cloud, plus putting out a message to superusers who have created their own local reports based off of our templates (which we encouraged), this can be a huge undertaking.
There are probably many great solutions to this issue. But for most examples and descriptions, I don’t find centralizing the artifacts, that make up the design of reports, a concept that is used consistently. So this article is intended to show how I centralize many of those pieces. Once put together, a change in a single artifact will be distributed to all of the reports – keeping the reports consistent and in line with the companies’ ongoing expectations.
Some considerations before we start creating:
Who – Who should have access to the artifacts? (presumably all users of the reports)
What – Templates artifacts should include logos and standard images, legal statements, links to legal statement details, company name, json theme, standard functional layout templates, company messages*, etc…
Where – Where should the artifacts and templates be located? (consider firewall access, security, modularity, etc…)
When – When the developers are creating reports, will the templates and/or artifacts be available?
How – How will/should developers use the artifacts? How will you train them on using the centralized artifacts?
Why – Developers will ask WHY they should use the centralized artifacts and template… do you have clear answers for them?
When starting a new project I have a couple of steps I start with before ingesting any data:
- On a drive that all types of report viewers have access to
- Create a read only folder (I usually call it [Artifacts])
- Place your company theme .json file there
- If your marketing department doesn’t already have a theme file, you can create one at
https://themes.powerbi.tips/themes
Or Just customize your own theme within PBI Desktop on Design > Customize Theme
- I also create a subfolder (inheriting read only status) generally called [Images]
- I then copy versions of the companies’ logo, and other standard images, for report developers to use in the reporting.
- Some considerations:
- Image should be sized appropriately
- Image types should be in jpg, png or svg (svg needs some additional service to make these work in Power BI – I will do a specific future article on this)
- Some considerations:
- I then copy versions of the companies’ logo, and other standard images, for report developers to use in the reporting.
- Additionally, I create an excel (or csv) file that includes company wide information (note: I also usually make a report specific file that has specific information that stakeholders or superusers can edit). I usually call this file [company_resource]. It usually looks something like:
| Item | Value |
| Company Name | This Company Name |
| Company tag line | Simply a tag line for company |
| Company Logo url | Http://jpbydesign.com/QB-Reporting-Project/Artifacts/Generic Logo width_579.png |
| Legal Statement | Confidential – for internal use only |
| Legal Statement Link | Http://jpbydesign.com/QB-Reporting-Project/Artifacts/LegalInformationPage |
| Legal contact | mailto: LegalInfo@JPByDesign.com |
| License and source info | Http://jpbydesign.com/QB-Reporting-Project/Artifacts/LicenseAndSource.htm |
| IT contact | mailto: TechInfoRequest@jpbydesign.com |
| Company Address | 1234 SE main street, AnyCity, AnyState 10022 |
| Company Phone | 888-888-8888 |
| Company Email | Mailto: CompanyEmail@JPByDesign.com |
| CompanyWide Report Message | Critical!! — data was incorrectly received. Please check back in 24 hours for update |
| CompanyWide Report Message priority | High |
- This should be very thin – limited to only information that is needed to create standardized reports and templates
- Normally the message & priority would be blank…
Power BI template files can be wonderful. If you have not used a template file, you basically create a Power BI Report and then save it as a PBIT (template) file. When developers or superusers want to create a new report, all they have to do is double-click on it and the Power BI report is automatically created – without being saved. Developers and/or superusers just have to add details needed and save it.
The balancing point is how much to put into a template and what to leave out. Should the dataset be added? Should the measures be pre-created? Depending on the client, I have created bare-bones templates through fully configured reports – where users just need to add messages. This example is bare-bones.
Optimally, I would like to see Microsoft create a Header and Footer section that persist through each page… allowing for visualizations to be put on top – like how MS Publisher and/or MS Word work.
Question: Do you centralize formatting and messaging? How do you do it? Let me know in the comments.
The following are details on how I set up a template file…
If you are already familiar with template setup you can skip to the bottom.
setting up the Power BI template that developers and superusers should use:
- Open a blank Power BI report
- Go to Design top tab and choose Import theme – search for the .json file in the explorer window

- Ingest csv/excel file(s) that contain the company basic information (note: I transpose the data and promote headers in Power Query so it easier to access the data). I also pre-pend the table name with a “_” and hide the table to identify that this is data that I don’t want normal users being able to see it.

- Ingest images (Note: I will create a future article regarding how I handle images with Power BI)

Now we use this information to set up the Header and footer of our template pages. I generally use the following steps:
For the header:
- Add a header background (keep as short vertically as possible to maximize the KPI/information space)
- Add logo (from table image, table URL, static URL, or importing image (not preferred)
- Add a textbox, format with Title as the Company Name and Subtitle as Company Tag Line (note: I don’t put any text in the box)
- For testing I added a manually created hidden table _TestingOnOff

- Create a slicer visual with single select “On” based on _TestingOnOff

- Create 3 measures for displaying company messages
CompanyWide Message =
IF(MAX(_TestingOnOff[State]) = "On", "Testing Companywide message",
SWITCH(MAX(_Company_Resource[CompanyWide Report Message priority])
,"High",MAX(_Company_Resource[CompanyWide Report Message])
,"Med",MAX(_Company_Resource[CompanyWide Report Message])
,"Low",MAX(_Company_Resource[CompanyWide Report Message])
,BLANK()
)
)
CompanyWide Criticality txt color =
IF(MAX(_TestingOnOff[State]) = "On", "Orange",
SWITCH(MAX(_Company_Resource[CompanyWide Report Message priority])
,"low","Dark Green"
,"Med","Orange"
,"High","Red"
,BLANK()
)
)
CompanyWide Criticality BG color =
IF(MAX(_TestingOnOff[State]) = "On", "lavender",
SWITCH(MAX(_Company_Resource[CompanyWide Report Message priority])
,"low","light Green"
,"Med","Yellow"
,"High","Pink"
,BLANK()
)
)
//You can use tags from your .json - but I wanted dramatically different colors to really accentuate the issues
- Add a textbox and for the title, make the text [CompanyWide Message], make the text color [CompanyWide Criticality txt color] and the background color [CompanyWide Criticality BG Color]
- Select each of the above visuals and group them as Header
For the footer, do something similar… this is what I Usually do:

Section Panel
I organize my visuals using the selection pane. It generally looks like:

The final solution would look something like:

Save as a template file
- From the top menu choose [file] > [Save] > choose folder location > Add “Name of your template”.pbix – this is so you can make changes to the template easily in the future
- From the top menu choose [file] > [Save as] > choose the folder (I usually use the same as previous) > Change the [Save as type] to “Power BI Template files (*.pbit)”
Instructions
- Encourage your developers and superusers to use the template file as the base.
- If they use the default colors, fonts, etc… the system will automatically update when updated and refreshed.
Put any questions, considerations or recommendations in the comments
Thanks,
John
Not covered:
- Adding templates and/or reports to GIT for version control.
- Formatting for mobile layouts (phones, pads, etc…)
