How to Build an Income Statement in Power BI

Cody Schneider

Building an income statement in a spreadsheet feels routine, but a static report can hide the story behind the numbers. Transforming your income statement into an interactive Power BI dashboard unlocks a new level of financial analysis. This guide shows you exactly how to do it, step-by-step, turning flat data into dynamic insights.

Why Use Power BI for an Income Statement?

Unlike a traditional Excel P&L, a Power BI income statement isn't just a static grid of numbers. It’s a dynamic and interactive tool. You can instantly filter by month, quarter, or business unit. You can drill down from a high-level expense category to individual transactions with a single click. Most importantly, you can connect it to other data sources - like sales data from your CRM or marketing spend from your ad platforms - to get a complete picture of your business's financial health.

Step 1: Get Your Financial Data in Order

Before you open Power BI, the most critical step is structuring your financial data correctly. A well-organized dataset makes the entire process incredibly smooth. You'll primarily need two tables: a Chart of Accounts (COA) and a General Ledger (GL) transactions table.

The Chart of Accounts (COA)

Your COA is a map of all your financial accounts. It organizes every account into logical categories. For an income statement, your COA table must at least include:

  • Account Number: A unique ID for each account.

  • Account Name: A descriptive name (e.g., "Software Subscriptions," "Product Sales").

  • Account Type: The main P&L category, like 'Revenue', 'Cost of Goods Sold (COGS)', or 'Operating Expenses'.

  • Sub-Type (Optional, but recommended): A more granular category, like 'General & Administrative' or 'Marketing'.

Here’s a simplified example of how your COA table should look:

Account Number

Account Name

Account Type

4000

Product Sales

Revenue

4100

Service Revenue

Revenue

5000

Cost of Materials

COGS

6100

Salaries & Wages

Operating Expenses

6200

Marketing Ads

Operating Expenses

6300

Software Subscriptions

Operating Expenses

The General Ledger (GL)

Your GL table contains every single transaction. To build an income statement, this table needs:

  • Date: The date of the transaction.

  • Account Number: A key that links back to your COA.

  • Amount: The value of the transaction.

A key tip: To make your DAX formulas incredibly simple, format your Amount column using standard accounting principles. This means that revenue accounts (credits) should be positive numbers, while expense and COGS accounts (debits) should be represented as negative numbers. This might require a simple transformation in Power Query when you load your data, but it will save you headaches later.

Here’s what your GL data table should resemble:

Date

Account Number

Amount

2023-11-01

4000

15000.00

2023-11-02

4100

2500.00

2023-11-05

5000

-5000.00

2023-11-15

6100

-8000.00

2023-11-20

6200

-1500.00

Once you have these two tables prepared (likely as Excel or CSV files), import them into Power BI using the "Get Data" feature. Then, go to the "Model view" and create a relationship between the Account Number columns in both tables. This tells Power BI how your transactions relate to their account categories.

Step 2: Write Your Core DAX Measures

DAX (Data Analysis Expressions) is Power BI's formula language. Don't let that intimidate you, we only need a few simple but powerful DAX measures to bring our income statement to life. Go to the "Report View," right-click your GL table, and select "New measure."

1. The Base Amount Measure

This is the cornerstone measure that calculates the total of your transactions. Because we pre-formatted our expense and COGS values as negatives, this simple SUM will be the basis for all our calculations.

2. Key Financial Category Measures

Next, we will use the CALCULATE function to create measures for each individual section of the income statement. CALCULATE modifies the context of a calculation. In our case, it will calculate _Net Amount for only the rows that match our specified account type from the COA table.

Total Revenue:

Total COGS:

Remember, this result will be negative because the underlying data is negative.

Total Operating Expenses:

This will also result in a negative number.

3. Create Your Summary Profitability Measures

Now, you can create measures for the key profitability lines on an income statement by simply combining the measures we just built. Because we signed our numbers correctly, the math is simple addition.

Gross Profit:

This adds your positive revenue to your negative COGS.

Operating Income:

This measure takes your Gross Profit and adds your negative operating expenses to find your income from core business operations.

With these six measures created, the heavy lifting is done. You now have all the calculations needed to build your professional-looking income statement.

Step 3: Build the Income Statement Visual

The best visual for an income statement is the Matrix. Its row-based hierarchy is perfect for displaying the nested structure of a P&L statement.

  1. On the Power BI canvas, select the "Matrix" visual from the Visualizations pane.

  2. Drag your account hierarchy from your 'Chart of Accounts' table into the "Rows" field. A great hierarchy is Account Type first, then Account Name below it. This will allow you to see the totals for Revenue and Expenses and then expand them to see the individual accounts within them.

  3. Drag your base measure, [_Net Amount], into the "Values" field.

You’ll immediately see a structured P&L forming. Power BI automatically calculates subtotals for each 'Account Type', and the ‘Grand Total’ at the bottom should reflect your Operating Income (or Net Income if you added taxes, interest, etc.).

But what about Gross Profit? The matrix visual doesn't have a natural spot for this summary measure. The cleanest way to present this is with "Card" visuals.

  • Add cards for key metrics: Drag a few Card visuals onto your report canvas. Dedicate one to Total Revenue, one to Gross Profit, and a final one for Operating Income. Place these at the top of your report for at-a-glance visibility.

This dashboard style - with clear KPIs in cards and a detailed Matrix for drill-down - provides the best of both worlds: a quick summary and deep detail.

Step 4: Make Your Report Interactive and Polished

Now for the fun part: turning this data table into a user-friendly reporting tool.

Add a Date Slicer

Find the "Slicer" visual in the Visualizations pane. Drag your Date column from the General Ledger table into the slicer's "Field" well. This instantly adds a filter to your report, allowing you or your team to analyze performance for a specific month, quarter, or year.

Polish Your Formatting

Use the "Format your visual" pane (the paintbrush icon) to refine the look of your matrix.

  • Stepped Layout: Under formatting options for Row headers, turn off the stepped layout for a more traditional financial statement appearance where subtotals and account details are in the same indented column.

  • Icons and Indentation: Still in Row headers, you can customize the +/- icons and adjust the indentation to create a clean, readable layout.

  • Conditional Formatting: Select your matrix, go to the formatting pane, and find the Cell elements section. Here, you can apply rules to your _Net Amount column. For example, you can add data bars to visualize the magnitude of each line item or automatically an "up" or "down" icon next to each value to show positive or negative variance vs. a budget.

Final Thoughts

Creating an interactive income statement in Power BI moves your financial reporting from a static, historical document to a living, explorable analytics tool. By structuring your Chart of Accounts and GL data correctly, building a few fundamental DAX measures, and using the Matrix visual, you can empower your whole team with deep, accessible financial insights.

Of course, this process of preparing data, setting up the right schema, writing formulas, and designing reports can take time - especially when you're connecting multiple marketing and sales data sources beyond your accounting software. At Graphed , we’ve streamlined this entire workflow. We designed a tool that lets you connect all your data in one click and then simply ask for what you need in plain English. Instead of building it all manually, you could just ask, "Create a dashboard showing our income statement for this quarter," and get a live, interactive report built for you in seconds.