Why the pair only gets really good when it is dynamic. The waterfall explains how much: steps, signs, variance, anchors. The Sankey explains where to: flow, shares, structure. In the P&L visual both sit on the same data binding, and one click in the toolbar switches the story.
At month-end close there are almost always two questions. First: how far are we above or below plan, and where does it come from? One slide later: and where does the money actually go? The first is what the waterfall is for; for the second I long needed a side calculation in Excel. Version 1.6 gave the P&L visual a Sankey, version 1.7 the switches that bring both views together. Played through with the demo P&L of the Daten-WG brewery (fictitious figures, January to September 2026). The screenshots show the German demo data.
After nine months the brewery's operating result stands at 2,047 TEUR, 451 above plan (+28%). The table with variance waterfall (template T04B) shows how it gets there: draught beer to restaurants +596 (the hot summer, comment ①), alcohol-free +273, against that bottled beer to retail −158 and merchandise −20. On the cost side, materials eat 298 of it, mostly malt and packaging. Energy is 112 below plan; the gas contract was renegotiated as of January (②; the 15% in the comment is against prior year). Every step has a sign, every subtotal anchors, and the scale is the same for all rows.
Same numbers, a different question. Of 18,746 TEUR revenue, 43% comes from draught beer and 41% from bottled beer. Two thirds remain as gross profit, personnel alone takes 28% of revenue, 10.9% remains as operating result. The financial result is an expense here (−268 interest) and flows out in the Sankey; 6.6% remains as net income. You do not see that in the variance waterfall, because it shows variances, not shares. A structure waterfall on actuals or a “% of revenue” column shows shares too; the Sankey shows them as a flow.
About the colours, honestly: without ⚡, teal and red in the Sankey are family colours, profit strand and costs, not a judgement. Red on personnel (+0.8% against plan) means “cost block”, not “problem”. The legend in the picture still says “favourable/unfavourable Δ” here; switching it per view is on the backlog. With ⚡ the colours mean favourable and unfavourable, with a mark they show the marked part.
A click on a node opens the detail tile of that row with monthly columns and scenarios (docs).
When the Sankey does not fit. In a loss year with negative flows, because a Sankey knows no signs. With very many small accounts. For pure variance analysis. On small tiles and in print. And one limit of the metaphor: an accrual-based P&L is not a cash flow, depreciation flows nowhere. “Where does the money go” is meant figuratively.
Two static pictures would be nice, nothing more. It gets interesting with three switches from version 1.7.
⚡ Only exceptions. The threshold sits in the toolbar: |Δ%| ≥ 5% against plan. The Sankey then keeps colour only on the streams that cross the threshold, now in the colour of their variance. For the brewery that is 7 of 16 accounts (draught beer, alcohol-free and energy favourable, merchandise, malt, packaging and income taxes unfavourable) plus four totals; the rest turns grey.
In the variance waterfall, “hide” folds the quiet steps of each section together: 8 of the 16 account steps merge into “other” or into their total, and the cascade stays closed.
A caveat: “other” nets. In “other (3)”, 37 TEUR saved on marketing offset 88 TEUR of extra cost in personnel and logistics, leaving an inconspicuous +51. So I set both thresholds, say 5% or 100 TEUR (then bottled beer at −158 has colour too), and check grouped steps in the tooltip. And the threshold sorts, it does not judge: income taxes (+33%) mechanically follow the higher result, and malt (+7%) is hardly “unfavourable” without volume adjustment when more beer was sold.
Cross-highlight. When a reader marks part of the data in another visual, the Sankey shows the marked part within the grey whole. The demo has no channel column, so here it is the month: a click on “July” in a column chart.
July brings 15% of revenue (2,820 of 18,746 TEUR) but 34% of the operating result (691 of 2,047). My reading: the fixed-cost leverage of a strong summer month. The picture shows the proportion, not the cause. With a channel or region column the same works: click “Export”, and the Sankey shows the export share at every level.
View, Δ reference, ⚡ threshold, root and fold state are saved by Power BI bookmarks. One bookmark “Exceptions against plan” and one “Structure” cover the whole closing meeting.
Since 1.7 the visual knows stocks. A stock row is not summed over the months but shown as the balance at the reporting date. In the cash flow bridge (template T05B) the opening and closing balances anchor on the zero line and the flows float in between: 600 TEUR at the start of the year, +1,373 from operations, −715 for investments, −760 for loan repayment and dividend, 498 at the end of September (prior year 440).
Put honestly: the cash flow demo is a separate data set and not reconciled with the P&L above. Net income there is 923 instead of 1,246, depreciation 495 instead of 1,127. In a real model both come from the same accounts, and that is exactly what to check when building it. The Sankey can draw the same flow with stocks as grey anchors, but for cash it was hard to read. That is why there is no Sankey picture here.
From the point of view of someone presenting the month-end close:
privileges: []: no network access, no downloads, no local storage; the only exception is “Open docs”, which opens a link and sends no data. Provided without warranty and without a support commitment, a one-person project with GitHub issues; embedded versions keep running in reports independently of the project. Comments ①② come from a comment role in the model (no input, no writeback), RLS and permissions likewise. Consolidation and intercompany are not the visual's job; it shows what the model delivers. Details: security & deployment.| Before | Now |
|---|---|
| Waterfall in the report, Sankey in a second visual or tool | One visual, switched in the toolbar |
| Important variances marked by conditional formatting per visual or by hand | ⚡ with a threshold across all views, saved as a bookmark |
| Segment question: new page or filter, the big picture is gone | Cross-highlight: the part within the grey whole |
| Cash flow bridge rebuilt in Excel | Cash flow bridge (T05B) from the account dimension, stocks anchor |
If you want to try it: the quick start gets you to a first P&L in two minutes, and the documentation of the views describes the Sankey in detail.
The quick start links the current .pbiviz and shows the first steps. The brewery demo data is in the repository.
In the docs: The views (Sankey) · ⚡ Only exceptions · Cross-highlight · Stocks & flows · T05A/T05B · Security & deployment