This is the definitive guide to income statements in Power BI. It includes tips and tricks and a couple of new features in Zebra BI visuals as well as certain best practices for making your income statements more understandable, more actionable, easier to create, more flexible to work with and much easier to maintain. We will look at how to prepare your data, how to create a basic income statement in Power BI and how to move forward once you know the basics.
Note: This Definitive Guide to Income Statements in Power BI is based on our 1-hour webinar on the same topic. If you prefer to watch the video, scroll to the bottom of this tutorial, enter your details and we'll send you the webinar recording and all PBIX examples to go along with it.
First look at our Power BI income statement
Here is what we will be building - our income statement or Profit and Loss statement or P&L statement which is actually so much more than that.
Let's look at the main features:
- This is a hierarchical statement. You can expand and collapse certain rows - for example, the cost of goods sold in this example comprises product cost as well as service and other costs. We are using a hierarchy with several levels.
- Included calculations. You can track KPIs, such as operating income as a percent of revenue or net income as a percent of revenue.
- Live comments. If you switch between months, different comments are shown to explain your data.
- Report view switching. In addition to switching between month to date and year to date views, you can switch from the income statement to the balance sheet and cash flow views. Each of these views also contains dynamic comments and all other features. One simple slicer gets you access to the holy trinity of financial statements.
The anatomy of a financial report
So what do you need in order to build something like this?
Here are the 10 things making up this effective report:
- The calendar filter because you're reporting by month and year.
- Period calculations so you can switch between month-to-date and year-to-date views as well as full year view.
- Account hierarchy is really crucial for every financial report. The structure of your accounts needs to be clean and merge data from several sources. It has to have a proper hierarchy across several levels and so on.
- Subtotals which are essentially calculations of your rows. For example, cost of goods sold is made up of product cost as well as service and other costs.
- Results, which are similar to subtotals but offer more. Instead of just aggregating your financial data they are calculations. Take the gross margin row, for example, as it is calculated as revenue minus cost of goods sold.
- Inverted rows that allow us to work effectively with KPIs. In financial reporting, some KPIs are bad and some are good, so you need a way to handle this in your visualization.
- Report switch to move between different reports.
- Visualization so you don't have to rely on tables alone but can tell a story with a combination of tables and charts. In this example, we used the very effective waterfall charts.
- Variances are at the heart of any business report like the income statement. They show how your actual results stack against your plan or previous year results, etc.
- Comments are very important for financial reporting as financial reports are typically delivered to the top management who prefer comments. They need short explanations that actually explain what's going on.
Preparing the financial data model
Where to start if you want to build a Power BI income statement? First of all, you need to fix your data, which is a major challenge here.
Let's start with the ideal financial model. Ideally, your fact table would consist of nothing but numbers.
In addition to values, our fact table has data about accounts (AccountID), business units (BusinessUnitID), date and scenarios, which describe whether this particular data is actual data, plan data or forecast data.
Around this data you have dimensions. You probably have a table named Accounts. This table should contain the whole hierarchy of your accounts and the entire structure. This table is then related to your fact table to make sure that accounts properly filter your values and other data.
Next up are the Calendar table, also related to your fact table, and the Period calculations table. For financial reporting it is recommended that you use a short and simple disconnected table for your period calculations.
You might also have business units or regions or another way to group and categorize your data.
If you want to use dynamic comments, you should create another fact table that will contain all your comments. It should be linked at least to your calendar to make sure that your comments will refer to a certain month.
You also might want to link your comments table to your account table if you want to comment on specific accounts such as product revenue or costs or specific type of costs. If you need comments on specific regions or business units, relate your comments table to these dimensions.
Below is the screenshot of a sample data model showing the central fact table (Financials) with comments (another fact table) and individual dimensions, such as business units, accounts, calendar, and period calculations. The data model also shows relations between individual fact tables and dimensions.
Merging the data
The next step is to populate the data into our model.
You should take all your data - actuals, plans and previous year - and put it into a single table.
The important thing is to prepare a hierarchy of your accounts, such as product revenue, service revenue, gross margin etc. You might have several levels of hierarchy. For example, your inventory falls under current assets group that falls under the more general assets group. Each of these columns needs to have an ID. These IDs will serve you as you display your data in different reports.
To create a slicer for switching between different types of reports we used a trick. We have merged the accounts from the income statement with the accounts from the balance sheet and cash flow statements.
We now have all the accounts in the same table. The idea here is very simple - after merging the tables we just added another column (ReportType) that actually marks each row with the report type. This allows you to filter out all the accounts for the income statement or balance sheet or cash flow report.
We'll use this ReportType column to create a slicer a bit later.
Marking the important KPIs
Here is another useful trick. We have marked certain accounts. such as Revenue or Gross margin as an important KPI. This value is stored in the IsKPI column and marked with value 1.
This will help us build quick financial reports from across the three types of financial reports. We can mark certain accounts from our Power BI income statement and balance sheet and cash flow statement as important. Then, we can quickly create reports with data from all three statements.
We can do that because we merged everything into a single large data table.
Creating a basic income statement in Power BI
Before we begin designing, a quick note: we will not be covering the switch between the year-to-date and monthly views or commenting. We have covered this in our past webinars - Top 5 DAX tricks for super effective Power BI dashboards and Dynamic Commentary in Power BI.
Let's add a Zebra BI Table. We're using the latest version that offers some interesting features.
Start by adding the actuals (Value AC) and the comparison to previous year (Value PY) from the Financials table. Then add the Account field to the Category placeholder get a simple income statement.
The next step is to add Account Groups field and drop it in the Category placeholder in the Visualizations pane.
Switch the previous year (PY) and actual revenues (AC) columns to the waterfall chart view.
Then switch sorting to Sort by Account Group and Sort ascending.
This is something you need to get right in your data. To get the sort order of your accounts right you have to make sure that the IDs of your accounts are sorted in the right order in your table of accounts.
You need to give the correct IDs to all your accounts - for example, your product revenue is going to be your number one, your service and other revenue is going to be number two and so on.
The same goes for your account group IDs. Your revenue here is the first account group. Your cost of goods sold are the second account group and so on.
If you didn't do this, your accounts would have been sorted alphabetically by default and you don't want that.
In case you'd like to learn more about sorting, you can read the article in the Knowledge Base about options for Sorting rows in the Zebra BI Tables visual, or how to sort a hierarchy by custom sort logic.
Making sure the data is displayed correctly
Once we have that in place, we need to make sure that the rows with expenses, costs and so on are inverted. You have two options to do this.
If you're using regular native Power BI visuals, there's no way to handle this. You have to go back to your data and make sure that your costs are negative numbers. Many people do that but we believe it's better to keep positive numbers across the board.
If you're using the Zebra BI visuals right-click the row name and make sure that you invert this number. You can invert numbers like product and service costs.
Both of these costs make up the cost of goods sold subtotal which is automatically summed up and inverted because we have set up the hierarchy of accounts properly.
Gross margin account is another type of a subtotal. However, it's actually a result. In Zebra BI, just right-click on it and mark it as a result. Zebra BI then takes the revenue and the costs to immediately calculate the gross margin.
You should then invert your operating expenses as they constitute costs and mark Operating Income as a Result. Income before income taxes is another result and Provision for income taxes is also inverted as an expense.
Your final Income is of course again a result of preceding accounts.
If you use Zebra BI, you don't have to do anything special about variances, because our extension does it all for you. It adds the absolute variance to previous year and the relative variance to previous year automatically.
Adding a formula to your Power BI income statement
The next thing we are adding is a formula for the gross margin percentage. The formula editor is a new feature only available in Zebra BI 4.5.
We'll add the Gross margin percentage by using a formula. Right-click on the account name and click Add Formula.
The formula for this is:
Gross margin % = [Gross margin] / [Revenue]
It's all very intuitive. Start typing Gross margin and Zebra BI will suggest the right account here. Confirm the suggestion by clicking or pressing Tab.
If you are working with a number that is a percentage, just click on the percent button to format this formula as a percent.
You also have some formatting options, such as number of decimal places, bold and italic. Once you're done, click Add. This adds an entire row and calculates values for all columns.
You can do the same for other calculations like operating income as a percent of revenue. Add another formula:
Operating income % = [Operating income] / [Revenue]
Switching between three financial statements
Now let's look at the slicer. The easiest way to understand how it works is to remove it. Once you remove it, all of your accounts are shown - your P&L, your cash flow and your balance sheet.
The easiest way to restore it is to just take the Report Type field from your Accounts table and drop it onto the visual. Once you have it there, just turn that part of the visual into a slicer using your Visualizations pane. You can use it as a dropdown menu or turn it into a horizontal list for easier switching.
You can then move on to editing your balance sheet. Here, you also need to invert liabilities to make sure your visual makes sense.
Adding dynamic comments
While we explained how to build a comments table previously, I would like to share how to add comment markers that show up in your visual to indicate where comments belong.
If you'd like to learn more about creating dynamic comments in Power BI, take a look at our ultimate guide (+ PBIX example) here: Dynamic Commentary in Power BI.
This is another new feature of Zebra BI 4.5 and it adds a new placeholder to your Visualizations pane. Add two fields to it: comment number and the actual Comments. Add the Comments field as a secondary field in the Comments placeholder.
Zebra BI visual now enables the user to hover over the numbers on the visual and see the exact tooltip text above the comment marker.
You can even design the tooltips. Do this in the standard group of tooltip settings of Power BI, where you can choose the color, text size, transparency and other properties.
Advanced income statements in Power BI
You have now laid the groundwork for different reports. For example, you might not want to switch between months using the dropdown menu and would like to have them in one table.
To do that, take your Month field from your Calendar group and put it in the Group placeholder. Then remove the dropdown month selector. This creates a wide table that needs to be worked on a bit. You can condense it and just focus on actual and variances, hide some columns and reduce the font size.
There is one more thing you can do in a table like this. You can add quarters where the months making up individual quarters can be collapsed or expanded.
It's easy to do. Just add your Quarters field on top of the Month field in your Group placeholder.
You could also add a grand total which is essentially your year-to-date value. Hover over the Q1 label on your chart so a small plus sign is displayed. Click on it and select the Show grand total item. This will add the grand total as the last column in the table.
Using Period calculation
You can build on this view and create a month versus year to date view. Remove Month and Quarter fields from your Group. Then, instead of using the MTD and YTD slicer, you can take your period calculation and put it in the group placeholder.
This gives you a great single-page overview of your month-to-date and year-to-date data. You can select individual months on the horizontal month slicer to switch between them.
Instead of the period calculation, you can now bring in your business units to do a breakdown by business unit. Simply replace Period calculation field in your Group placeholder with the Business unit field to get income statement for all the business units.
The powerful thing here is that you have all the data ready and you could easily switch to cash flow view, if you had the data. And that is the beauty of merging all your accounts into one big accounts table. You can do all your financial reporting directly using just one data model.
One thing that is kind of chronically missing in financial reporting is trend charts. Financial reports are typically just tables although it doesn't have to be like this. You should make sure that you also include charts that show the trends in the movement of values. Let's look at the example we'll be building.
Start by adding the Zebra BI charts visual. We'll compare actual values versus previous year values broken down by month. Add Value AC to your Values placeholder, Value PY field to your Previous Year placeholder and Month field (Calendar table) to your Category placeholder.
To make sure you can switch between different KPIs, pull your Account groups field onto your workspace. This puts down a list of KPIs you can switch between, like gross margin, operating expenses, operating income, net income, etc.
An even better approach is to take the Account groups field and pull it onto your Group placeholder. This creates multiple charts within the same visual or small multiples. This is one of the best features of Zebra BI charts.
Because we merged all the accounts, you could also switch from this P&L statement to your balance sheet of your cash flow report.
Let's look at one more trick here. If you look at the chart, you see your revenue grew by 4.5% but your gross margin stayed almost the same. Something happened here and you can find the culprit in the cost of goods sold that grew by 12.5%. To show this is a negative development, you need to invert this specific element. Simply right-click on the label and select Invert.
The waterfall (bridge) chart
The bridge chart is an interesting idea, especially for the cash flow or things like net income. Essentially, you have the opening and closing balance of your cash. You take all the changes and present them in a waterfall chart.
In this case, we could invert the chart, something made possible by the Zebra BI charts visual. In the Visualizations pane, click the Format button and expand the Chart settings. Then just toggle the Show vertical charts option.
The bridge charts work quite nicely in financial reporting and the financial management and the top executives love these types of charts. You can do the same thing with the net income plan or previous year and compare it to net income actuals.
How to impress with your Power BI income statements
This guide was all about the tips and tricks to create income statements in Power BI that tell a story and provide intuitive and actionable information for business decision makers.
We began by preparing the data and data model for a rich visual report that integrates three of the most common financial reports - income statement, balance sheet and cash flow report.
Leveraging advanced Zebra BI features, we turned a basic income statement report into a rich and meaningful report that integrates groups, variances, dynamic comments, calculations and period calculations.
If you want to try this yourself, enter your data below and get the follow-along PBIX file.
You can also download a 30-day free trial of Zebra BI visuals for Power BI and start working on your own data and stories.
Get follow-along PBIX example
If you'd like to try any of these tricks yourself, enter your data below to get immediate access to the full 1-hour video recording of the webinar and all PBIX examples used in the this tutorial.