15 Reports for Management Decisions
Learning Objectives
After completing this chapter, you will be able to:
- Design a report page for a named reader and decision, with key performance indicators shown against their comparisons and a layout that passes a five-second test.
- Build drill-through pages and report-page tooltips that let a reader move from a summary to its detail.
- Model a budget at the grain of month, account, and cost center beside the ledger, and explain a budget variance as volume, classification, timing, rate, or spending.
- Write visual calculations for running sums and moving averages, and decide when a measure in the model is the better choice.
- Assemble a reporting package with navigation, an About page, and validation.
- Use what-if parameters and the Analytics pane’s forecast, and judge their results against the models of Chapter 7 and the Part II case.
Opening Scenario
It is April 2027, and the controller wants Charles River Reports to become the company’s monthly reporting package. “Three people will open it first,” she says. The sales manager wants to know what the promotions of fiscal 2026 cost and which ones cost the most. The department managers want to see how their spending compared with the budget the CFO approved. The production manager wants to know whether the plant’s hours are under control, the question Part III answered with queries. A first look at the budget already shows why the package needs care: one department spent far less than its budget and another far more, and neither result means what it seems to mean.
Your task is to design a page for each of these readers, to connect the pages so that a reader can move from a summary to the detail behind it, and to make sure each number is explained before it reaches someone who will act on it. This chapter teaches the design of report pages, drill-through and tooltip pages, budget-versus-actual reporting, visual calculations, and the assembly of a documented package, and it closes with two tools that look ahead: what-if parameters and forecasts.
15.1 Designing Reports for Their Readers
A report page serves a reader who has a question and a decision to make. The pages of Chapters 13 and 14 were built for exploration by the person who built them. The pages of this chapter are built for readers who did not build the model, may not know DAX, and will give the page a few seconds before deciding whether it answers their question. Design therefore starts with the reader: what decision the page supports, what the reader must compare to make it, how much detail the reader needs, and how often the page will be read.
A key performance indicator (KPI) is a measure chosen because it tracks progress toward an objective, shown with the comparison that gives it meaning. A number on its own says little. Operating expense of several million dollars is neither good nor bad until the reader knows the budget, the same period last year, or a target. Few (2013) argues that a display meant for monitoring should fit on one screen and show each measure in the context that lets the reader judge it at a glance. Few calls such displays dashboards. Power BI, as Chapter 13 explained, reserves that word for a page of tiles in the Power BI service, so this chapter says report page.
Research on performance reports shows that the choice and the presentation of measures shape the judgments readers make. Lipe and Salterio (2000) found that participants acting as superiors, evaluating two business units, relied on the measures common to both units and ignored the measures unique to each, which a balanced scorecard includes to capture each unit’s own strategy. The finding is a warning, not a reason to give every department the same KPIs. A package that compares department managers should define the measures they share the same way, keep the measures that reflect each department’s own responsibilities, and make clear that those count too, because readers tend to pass over them. Cardinaels and van Veen-Dirks (2010) found that organizing the measures into the scorecard’s categories changed how heavily evaluators weighted them, and that in a second experiment, with markers for above-target, below-target, and on-target performance on both scorecards, the organized scorecard drew more weight to any category in which the units differed. Formatting is not neutral. A marker should appear only where it signals something the reader should act on, and its threshold should be stated.
The layout follows the reader’s path. The KPI and its comparison go at the top left, where the eye starts. The breakdown that explains it comes next, and the detail behind it is available on demand, through the drill-through pages and tooltips of the next section, rather than crowding the page. A useful check is a five-second test: show the page to someone for five seconds and ask what it says. If they cannot answer the question the page exists to answer, the page needs a simpler design. Table 15.1 lists the readers of the Charles River package and what each page must show, and Figure 15.1 maps the package.
| Reader | Question | KPI and its comparison | Page |
|---|---|---|---|
| Sales manager | What did the promotions cost, and where? | Revenue from list price to net, by step; discounts by promotion | Promotions |
| Department manager | Is my cost center within its budget? | Operating expense against the budget, flexed for volume | Budget |
| Production manager | Are the plant’s hours under control? | Hours per standard hour over twelve months | Plant |
| Controller | Do the pages agree with the ledger? | Control totals of earlier chapters | Validation |
15.2 Drill-Through and Report-Page Tooltips
Chapter 6 defined drill-down as moving from a total to the parts or rows behind it, and the matrix of Chapter 13 drills down by expanding an item group into its product types. Drill-down stays inside one visual. Drill-through moves the reader to another page, filtered to the item the reader selected. On a page that lists the promotions, the reader right-clicks one promotion and chooses Drillthrough, and Power BI opens a detail page that shows only that promotion: its terms, its discounts month by month, and the number of its invoice lines. The detail page holds the drill-through field in a well of its own, and Power BI adds a back button to it automatically. The field must also appear in the visual the reader right-clicks, or the option does not appear (Microsoft, 2026d). This is how a report lets managers explore causes on their own, as Chapter 1 promised, without placing every detail on the summary page.
A report-page tooltip is a small report page that appears when the reader points at a data point, filtered to that data point. It replaces the default tooltip, which only repeats the values of the visual, with a chart or a few numbers chosen for the purpose. A tooltip page is set to the tooltip canvas size and switched on as a tooltip in its page settings, and a visual can be told which tooltip page to use. Tooltips are for quick context. They are not interactive, and screen readers cannot read them, so nothing the reader must know should appear only in a tooltip (Microsoft, 2026c). Table 15.2 compares the three ways of moving from a summary to detail, and Figure 15.2 contrasts drill-down with drill-through.
| Drill-down | Drill-through | Report-page tooltip | |
|---|---|---|---|
| What changes | The level shown in the same visual | The page, filtered to the selected item | A small page shown while pointing |
| How the reader starts it | Expand a level or use the drill buttons | Right-click, then Drillthrough | Point at a data point |
| Best for | Moving down a hierarchy | Studying one item in detail | A quick second view |
| Accessible to screen readers | Yes | Yes | No |
15.3 Guided Tutorial 15.1: The Promotions Page
Context and objective. In this tutorial, you will build the sales manager’s page. A waterfall chart will take fiscal 2026 revenue from list price to net, step by step, and a bar chart will show which promotions gave away the most. A drill-through page will show any one promotion in detail, and a tooltip page will show its discounts month by month when the reader points at it. A promotion’s cost here is the discount recorded on its invoice lines, not the profit it cost or earned against the sales that would have happened without it. Along the way, you will add the promotions as a dimension of the invoice lines and build your first disconnected table, a table the model uses without relating it to anything.
Prerequisites. You need Charles River Reports.pbix as you left it at the end of Chapter 14, with the Key Measures table and the Tests tab. If you start here, download Charles River Reports as it stands at the end of Chapter 14 from Companion Files: a Power BI project that you point at your copy of CharlesRiver.xlsx, refresh, and save as Charles River Reports.pbix, as that page explains.
Step-by-step instructions.
Step 1. Import the promotions.
- Choose Home > Get data > Excel workbook, and select CharlesRiver.xlsx.
- In the Navigator, select T7_PromotionProgram, and click Transform Data.
- Rename the query
PromotionProgram, and choose Home > Choose Columns to keep PromotionID, PromotionCode, PromotionName, ScopeType, DiscountPct, EffectiveStartDate, and EffectiveEndDate. - Set the data type of the two date columns to Date, and choose Home > Close & Apply.
The table holds one row for each promotion, nine in all, three a year.
Step 2. Relate the promotions to the invoice lines.
- Select Model view, and drag PromotionID from SalesInvoiceLine onto PromotionID in PromotionProgram.
- Check that the relationship reads many to one, with a single cross filter direction.
- Hide PromotionID in both tables, as you hid the other keys in Tutorial 14.1.
- Select DiscountPct in the Data pane, and on the Column tools tab set Summarization to Don’t summarize and format it as a percentage with no decimals.
Most invoice lines carry no promotion, so their PromotionID is blank. In a visual grouped by promotion, they appear under (Blank), a meaningful blank in Chapter 5’s term, which Chapter 13 met in a visual: lines sold without a promotion. DiscountPct is a rate, so the detail page of Step 7 shows it as it is, never added up.
Step 3. Build a table of the steps from list price to net. The waterfall needs one category for each step, and no table in the model holds them, so you will type them in.
- Choose Home > Enter data.
- In the Create Table dialog, name the first column
Stepand add a second column namedOrder, by double-clicking the column headers. - Type three rows:
At list priceand1,Price lists and overridesand2,Promotionsand3. - Type
Stepsas the table’s name, and click Load. - Select the Step column in the Data pane, and on the Column tools tab choose Sort by column > Order.
Steps is a disconnected table: it has no relationship to any other table. Its rows exist only to give a visual its categories, and a measure decides what each category shows.
Step 4. Write the gross-to-net measure.
- Select the Key Measures table, and choose Modeling > New measure.
- Type the measure below, and format it as an amount.
Gross to Net =
SWITCH (
SELECTEDVALUE ( Steps[Step] ),
"At list price", [List Amount],
"Price lists and overrides", [Price Before Discount] - [List Amount],
"Promotions", [Revenue] - [Price Before Discount],
[Revenue]
)
SELECTEDVALUE returns the step of the current bar, or a blank when the filter context holds more than one step, as it does for a total. SWITCH compares that step with each name in turn and returns the matching expression. The last argument is the value when no single step is selected, revenue itself. The three steps add up to revenue: the list amount, less what the price lists and overrides took off, less what the promotions took off. The promotions step is revenue less the price before discount, a negative amount, rather than the Discounts measure with its sign reversed, so that the steps add up to the cent; the two differ only by the rounding of each line’s total.
Step 5. Chart the steps as a waterfall.
- Add a page named
Promotions. - Add a slicer with Year from the Date table, and select 2026.
- Add a Waterfall chart with Step on Category and Gross to Net on Y-axis.
- Give the chart the title
Revenue from list price to net, fiscal 2026.
The waterfall starts with a column for the list amount, steps down twice, and ends with a total column that Power BI adds itself (Microsoft, 2025f). The total equals the fiscal 2026 revenue of Chapter 6. The price lists and overrides take far more off the list amount than the promotions do: most of what Charles River gives away is in its everyday prices, not in its promotions, as the Part II case found.
Step 6. Show the discounts by promotion.
- Add a Clustered bar chart with PromotionName on Y-axis and Discounts on X-axis.
- In Filters on this visual, exclude the (Blank) promotion, and sort the bars by Discounts, largest first.
- Give the chart the title
Promotional discounts by promotion.
Figure 15.3 shows the page. The Furniture Seasonal Promotion gave away several times as much as any other promotion invoiced in 2026, and two promotions of fiscal 2025 still appear, because their last orders were invoiced early in 2026.
Step 7. Build the drill-through page.
- Add a page named
Promotion Detail. - With no visual selected, drag PromotionName from the Data pane into the Drillthrough section of the Visualizations pane, where it says Add drillthrough fields here.
- Add a table visual with PromotionName, ScopeType, DiscountPct, EffectiveStartDate, and EffectiveEndDate.
- Add a Clustered column chart with YearMonth from Date on X-axis and Discounts on Y-axis.
- Add a card visual with Invoice Lines and Discounts.
Power BI adds a back button to the page as soon as the drill-through field is in place. The page shows nothing useful on its own: it is designed to be reached from another page, with one promotion selected.
Step 8. Build the tooltip page.
- Add a page named
Promotion Tooltip. - In the Format pane of the page, open Canvas settings and set Type to Tooltip, and in Page information turn Tooltip on.
- Add a Clustered column chart with YearMonth on X-axis and Discounts on Y-axis, sized to fill the small page.
- Return to the Promotions page, select the bar chart, and in Format visual > General > Tooltips set Page to Promotion Tooltip.
Step 9. Use the detail pages.
- On the Promotions page, point at the bar of the Furniture Seasonal Promotion, and read the tooltip.
- Right-click the same bar, and choose Drillthrough > Promotion Detail.
- Read the promotion’s dates and its discounts by month, and return with the back button, holding Ctrl as you click it.
- Drill through on the Harbor Collection Promotion, and compare its effective dates.
Figure 15.4 and Figure 15.5 show the two detail views. The Furniture Seasonal Promotion ran in September and October, but its discounts continue into November and December: Chapter 5 found that those lines were ordered within the promotion’s dates and invoiced later. The Harbor Collection Promotion shows an end date before its start date, which cannot be right. The Part II case found recorded dates that fail in every collection promotion, and their orders point to the end date as the likely error in the master data. A summary page could not have shown either finding; the detail pages show them in two clicks.
Checkpoint. Before you move on, confirm the following:
- The waterfall’s total equals fiscal 2026 revenue, and its steps are the list amount, the price lists and overrides, and the promotions.
- PromotionProgram is related to the invoice lines, and Steps is related to nothing.
- Pointing at a promotion shows its tooltip page, and right-clicking it opens Promotion Detail filtered to that promotion.
The sales manager’s question now has a one-page answer and two levels of detail behind it. The page also shows something the question did not ask: the promotions are the smaller of the two reductions from list price.
15.4 Budget Versus Actual
A budget is a plan expressed in the accounts of the ledger, and comparing it with the ledger is a common management report. Charles River’s budget, which Chapter 7 analyzed in a workbook, is a second fact table. Each line of BudgetLine is one account, one month, and one cost center, with the item on the sales and cost-of-sales lines, and each year’s lines were approved by the CFO in the December before. To compare the budget with the ledger, the two fact tables must share dimensions: Account, CostCenter, and Date. Account and CostCenter relate to BudgetLine on their keys, exactly as they relate to GLEntry. Date needs care, because a budget line has a month but no day. Microsoft’s guidance for facts recorded at a higher grain than the date table is to store the first day of each period and relate that date to the date table (Microsoft, 2025c). The budget then adds up correctly by month, quarter, and year, but a visual that shows days would place each month’s budget on its first day, so budget measures are read by month or above.
A budget variance is the difference between an actual amount and its budget. This book computes it as actual less budget, so for an expense a positive variance means spending above the budget, which is unfavorable, and a negative variance is favorable; for revenue the signs mean the opposite. Variance percent divides the variance by the budget. A report must say which convention it uses, because a reader who assumes the other will reach the wrong conclusion.
A variance measures a difference. It does not explain one. Table 15.3 lists the usual causes, and Charles River’s 2026 operating expense shows four of them at once. The Sales department spent far less than its budget, but most of the difference is volume: the commission budget was calculated on the budget’s sales volume, which Chapter 7 found to be several times the actual, so the commission flexed to actual sales, Chapter 7’s flexible budget applied to one variable cost, is much smaller. The Warehouse spent more than its budget and Administration less, and the two differences offset: depreciation was budgeted entirely in Administration but recorded partly in the Warehouse. Chapter 2 warned that a budget-versus-actual report misleads when the budget and the ledger classify the same cost differently, and this is that case. Once volume and classification are set aside, almost every cost center is a few percent under budget, which is consistent with the payroll burden rate that Chapter 7 found budgeted well above the actual rate. And the months with three pay dates, which Chapters 11 and 14 traced, are unfavorable against a budget that spreads salaries evenly, while the other months are favorable.
| Cause | What happened | Charles River, fiscal 2026 |
|---|---|---|
| Volume | Activity differed from the budget’s assumption | Commission budgeted on the budget’s sales volume |
| Classification | The budget and the ledger record the cost in different places | Depreciation budgeted in Administration, recorded partly in the Warehouse |
| Timing | The cost fell in a different month from the budget | Salaries paid in months with three pay dates |
| Rate | The price per unit differed from the budget’s | Payroll burden below the budgeted rate |
| Spending | More or less was used than planned | To be investigated in what remains after the other causes |
The page should signal the variances that need attention without relying on color alone, the rule that Chapters 4 and 6 set and Chapter 13 applied to every visual. Power BI’s conditional formatting can place an icon beside a value according to rules, such as an arrow pointing up for spending five percent or more above budget, a circle for spending less than five percent either way, and an arrow pointing down for spending five percent or more below. An icon whose shape differs, with the signed percentage beside it, carries the meaning in grayscale and to a reader who does not see color (Microsoft, 2025a). The five percent is this package’s choice, not a standard: a threshold should match the size of variance the managers would look into.
15.5 Visual Calculations
A visual calculation is a DAX calculation defined on a single visual, which works on the visual’s data matrix, the rows and columns of the visual, including any fields hidden from the display (Microsoft, 2026g). It is stored with the visual, not in the model. Because it works on the visual’s own rows, a running sum, a moving average, or a comparison with the previous row takes one short formula. You add one by selecting a visual and choosing New visual calculation on the Home tab, which opens an editor showing the visual, a formula bar, and the visual’s rows as a grid, called the visual matrix. Templates write the common calculations for you (Microsoft, 2026a).
Visual calculations have functions of their own. RUNNINGSUM adds each row to the rows before it, MOVINGAVERAGE averages a number of rows ending at the current one, PREVIOUS returns the value of the row before, and FIRST the value of the first row. An optional argument names the direction in which the calculation moves through the visual, down the rows or across the columns, and another restarts it at each change of a higher level, such as each year in a visual of months. They are conceptual counterparts of the window functions of Chapter 11, not translations of them, as Table 15.4 shows: the order of the rows in the visual plays the part of ORDER BY, restarting at a higher level plays the part of PARTITION BY, and the number of rows in a moving average plays the part of the frame.
| Visual calculation | What it returns | SQL counterpart (Chapter 11) |
|---|---|---|
RUNNINGSUM |
The running total down the rows | SUM with an OVER clause ending at the current row |
MOVINGAVERAGE |
The average of the last n rows | AVG over a frame of n rows |
PREVIOUS |
The value of the previous row | LAG |
FIRST |
The value of the first row | FIRST_VALUE |
COLLAPSE |
The value at the parent level | An aggregate at the parent level, such as SUM over a window partitioned by the parent |
The same property that makes visual calculations simple limits them. A visual calculation sees only the rows of its visual. If a chart of trailing twelve-month ratios is filtered to start in January 2025, the moving average for January 2025 has one month to average, not twelve, because the eleven months before it are not on the visual. A measure written with the time intelligence of Chapter 14 reaches into the model and finds them. Visual calculations also cannot be reused in another visual or pinned to a dashboard, and an export of the underlying data leaves their results out (Microsoft, 2026g). Microsoft’s page on exporting says that every other export includes them, while its overview says that exports leave them out, so test the export your readers will use before a KPI depends on it (Microsoft, 2026e, 2026g). The rule of thumb follows: a calculation that shapes how one visual reads, such as a year-to-date line on one chart, can be a visual calculation; a number that readers rely on, compare across pages, or export belongs in the model as a measure, with a description and a test. Table 15.5 compares the three places a calculation can live, and Figure 15.6 shows the editor with a calculation from Tutorial 15.2.
| Measure | Visual calculation | Calculated column | |
|---|---|---|---|
| Defined in | The model | One visual | A table of the model |
| Sees | The whole model, through the filter context | Only the rows and columns of its visual | The current row and related rows |
| Calculated | When a visual asks for it | When its visual is drawn | At refresh, and stored |
| Reused elsewhere | Yes | No | Yes |
| Exported with the data | Yes | Test the export mode and version | Yes |
15.6 Guided Tutorial 15.2: The Cost-Center Budget Page
Context and objective. In this tutorial, you will build the page the department managers will read: each cost center’s operating expense for fiscal 2026 against its budget. You will add the budget lines as a second fact table that shares Account, CostCenter, and Date with the ledger, mark the variances that need attention, and then explain them. A flexed budget will set aside the volume in the commission budget, a drill-through page will expose a cost that the budget and the ledger classify differently, and a reconciliation will show what remains. A visual calculation will show how the variance built up through the year.
Prerequisites. You need Charles River Reports.pbix from Tutorial 15.1, with the ledger star of Tutorial 14.3. If you start here, download Charles River Reports as it stands at the end of Tutorial 15.1 from Companion Files: a Power BI project that you point at your copy of CharlesRiver.xlsx, refresh, and save as Charles River Reports.pbix, as that page explains.
Step-by-step instructions.
Step 1. Import the budget lines.
- Choose Home > Get data > Excel workbook, select CharlesRiver.xlsx, select T77_BudgetLine, and click Transform Data.
- Rename the query
BudgetLine, and keep BudgetLineID, FiscalYear, Month, AccountID, CostCenterID, BudgetAmount, BudgetCategory, and DriverType. - Open the filter on BudgetCategory, and clear Balance Sheet, so that only the income statement lines remain.
- Choose Add Column > Custom Column, name the column
BudgetDate, enter the formula below, and set its type to Date. - Choose Home > Close & Apply.
#date([FiscalYear], [Month], 1)
Each budget line now carries the first day of its month, the date through which the budget will relate to the calendar.
Step 2. Relate the budget to the ledger’s dimensions.
- In Model view, drag AccountID from BudgetLine onto AccountID in Account.
- Drag CostCenterID from BudgetLine onto CostCenterID in CostCenter.
- Drag BudgetDate from BudgetLine onto Date in the Date table.
- Hide the two keys of BudgetLine.
Figure 15.7 shows the result. BudgetLine and GLEntry are two fact tables sharing three dimensions, so a visual grouped by cost center or account can place the budget beside the ledger. Each of the three relationships should read many to one, with the budget on the many side and a single filter direction, which holds when the key in Account, CostCenter, and Date is unique and never blank in its own table.
Step 3. Write the budget measures.
- Add the measures below to the Key Measures table, one at a time.
- Format the first three as amounts and Variance % as a percentage with one decimal.
Budget = SUM ( BudgetLine[BudgetAmount] )
Actual = [GL Amount]
Variance = [Actual] - [Budget]
Variance % = DIVIDE ( [Variance], [Budget] )
Actual is the GL Amount of Tutorial 14.3, debits less credits without the closing entries, which for an expense account is the amount spent. Variance is actual less budget, so for an expense a positive variance is spending above the budget.
Step 4. Compare each cost center with its budget.
- Add a page named
Budget, with a slicer of Year set to 2026. - Add a matrix with CostCenterName on Rows and Budget, Actual, Variance, and Variance % as Values.
- In Filters on this visual, add AccountSubType from Account and keep only Operating Expense.
- Record the cost centers whose variance is five percent of their budget or more, above or below.
Three cost centers stand out. Sales spent far less than its budget, the Warehouse far more, and Administration less. Every other cost center is a few percent under budget. The (Blank) row holds the expenses budgeted and recorded without a cost center, such as rent, utilities, and insurance, which Chapter 7’s Budget Table left out. Here both the budget and the actual amounts are present, and they agree within one percent.
Step 5. Mark the variances that need attention.
- In the Values well, open the menu of Variance %, and choose Conditional formatting > Icons.
- Set Format style to Rules, choose an icon set of arrows, and set Icon layout to the left of the data.
- Write three rules, with Number values: at least 0.05, an arrow pointing up; greater than -0.05 and less than 0.05, a neutral circle; at most -0.05, an arrow pointing down.
Figure 15.8 shows the matrix. The markers differ in shape and sit beside the signed percentages, so they carry their meaning without color. The arrows point to the three cost centers a manager would ask about first.
Step 6. Flex the commission budget. The commission budget was calculated as a rate on the budget’s sales volume, which Chapter 7 found to be several times the actual; flexing restates it at the actual volume.
- Add the measure below, and format it as an amount.
Flexed Budget =
VAR CommissionBudget =
CALCULATE ( [Budget], KEEPFILTERS ( Account[AccountNumber] = 6290 ) )
VAR CommissionRate =
DIVIDE (
CALCULATE ( [Budget], REMOVEFILTERS ( Account ), REMOVEFILTERS ( CostCenter ),
Account[AccountNumber] = 6290 ),
CALCULATE ( [Budget], REMOVEFILTERS ( Account ), REMOVEFILTERS ( CostCenter ),
Account[AccountNumber] IN { 4010, 4020, 4030, 4040 } )
)
VAR ProductRevenue =
CALCULATE ( [Revenue], 'Item'[ItemGroup] <> "Services" )
RETURN
[Budget] - CommissionBudget
+ IF ( NOT ISBLANK ( CommissionBudget ), CommissionRate * ProductRevenue )
Read the measure one variable at a time. CommissionBudget is the commission budget in the current filter context; KEEPFILTERS keeps it blank on any row that is not account 6290. CommissionRate divides the whole commission budget by the whole product revenue budget, with the filters on Account and CostCenter removed, which gives the rate the budget assumed. ProductRevenue is the actual revenue of the invoice lines without design services, which the commission budget did not include. The result replaces the commission budget with the rate times actual revenue and leaves every other budget line as it was.
Step 7. Compare the spending with the flexed budget.
- Add the measure below, and format it as an amount.
- Add Flexed Budget and Variance to Flexed to the matrix.
Variance to Flexed = [Actual] - [Flexed Budget]
The Sales cost center’s flexed budget is less than half its static budget, and against the flexed budget its variance is small. The rate times actual product revenue reproduces the flexed commission of Chapter 7.
Step 8. Drill through to the accounts.
- Add a page named
Cost Center Detail, and drag CostCenterName into its drill-through well. - Add a matrix with AccountNumber and AccountName on Rows and Budget, Actual, and Variance as Values, filtered to Operating Expense.
- On the Budget page, right-click the Warehouse row, and choose Drillthrough > Cost Center Detail.
- Return, and drill through on Administration.
The Warehouse has a depreciation account with actual expense and no budget at all. Administration has a depreciation budget well above its actual depreciation. The two differences are equal and opposite: the company budgeted all of its depreciation in Administration and recorded part of it in the Warehouse, where the warehouse equipment is. The total is right; only the cost center differs.
Step 9. Reconcile the variances.
- Add the measures below, formatting the first three as amounts and Remaining % as a percentage with one decimal.
- On the Budget page, add a table visual with CostCenterName, Variance, Volume Effect, Classification Effect, Remaining Variance, and Remaining %, filtered to Operating Expense as the matrix is.
Volume Effect = [Flexed Budget] - [Budget]
Classification Effect =
CALCULATE ( [Actual] - [Budget], KEEPFILTERS ( Account[AccountNumber] = 6130 ) )
Remaining Variance = [Variance] - [Volume Effect] - [Classification Effect]
Remaining % = DIVIDE ( [Remaining Variance], [Flexed Budget] )
Figure 15.9 shows the reconciliation. Each cost center’s variance as booked is the sum of the volume in the commission budget, the classification of depreciation, and what remains. Volume Effect here is Chapter 7’s sales-volume variance, not the volume effect of Chapter 6’s margin bridge. The classification column adds up to zero across the cost centers, the signature of a classification difference: it moves cost from one cost center to another without changing the total. What remains is a few percent below budget nearly everywhere, consistent with the payroll burden rate that Chapter 7 found budgeted well above the actual rate. A remaining variance still has to be explained before anyone calls it efficient or wasteful spending. Sales remains further below budget than the others, because the actual commission rate on merchandise was also below the budgeted rate.
Step 10. Show how the variance built up during the year.
- Add a table visual with YearMonth from Date and Variance to Flexed, filtered to 2026 and to Operating Expense.
- With the table selected, choose Home > New visual calculation.
- Type the formula below in the formula bar, and click Back to report.
YTD Variance = RUNNINGSUM ( [Variance to Flexed] )
A visual calculation reads the rows in the order the visual shows them, so leave the table sorted by YearMonth, oldest first, with one row for each month. Sorting by an amount would change what the running sum adds up.
The year-to-date column climbs in January, falls through June, climbs again in July, and falls for the rest of the year to the total of Step 9, within a cent: each month is flexed at its own month’s budgeted commission rate, which differs from the year’s rate only in its last digits. January and July are the months with three pay dates, which Chapter 11 traced to payroll recorded when it is paid: against a budget that spreads salaries evenly, they look unfavorable, and every other month looks favorable. A reader in July would have seen operating expense close to the flexed budget for the year to date, and the months between show the payroll timing behind that near-zero total. Figure 15.6 showed this calculation in the editor.
Step 11. Add the budget test.
- In DAX query view, open the Tests tab, and add the query below at the end.
- Run it, and save the report.
// Test 4: the 2026 operating expense budget and actual must equal Chapter 7's
EVALUATE
CALCULATETABLE (
ROW (
"Budget", ROUND ( [Budget], 2 ),
"Flexed Budget", ROUND ( [Flexed Budget], 2 ),
"Actual", ROUND ( [Actual], 2 )
),
'Date'[Year] = 2026,
Account[AccountSubType] = "Operating Expense"
)
The budget equals the operating-expense budget lines of Chapter 7, including the lines without a cost center that its Budget Table left out, and the actual amount equals the operating expense of Tutorial 14.3. The flexed budget differs from the budget by exactly the change in the commission budget.
Checkpoint. Before you move on, confirm the following:
- BudgetLine relates to Account, CostCenter, and Date, and the Budget page compares each cost center’s operating expense with its budget.
- The flexed budget restates only the commission budget, and Test 4 returns the budget, flexed budget, and actual amounts of Chapter 7 and Tutorial 14.3.
- The classification effect totals zero, and the remaining variance is a few percent below budget for nearly every cost center.
The department managers’ page now answers their question and explains its own largest numbers. Without the flex and the reconciliation, the page would have rewarded Sales for a budget inflated by volume and blamed the Warehouse for a cost it was never budgeted.
15.7 Assembling the Reporting Package
A set of pages becomes a package when a reader can find their way through it and trust what it says. Navigation comes first. A page navigator is a group of buttons, one for each page, that Power BI keeps in step with the report: when you add, remove, rename, or reorder pages, the buttons follow (Microsoft, 2026b). Detail and tooltip pages are reached from the summary pages, so they are hidden from the page tabs and from the navigator. Hiding a page tidies the navigation; it does not decide who may see the page’s data, which is a question of security, the subject of the appendix on publishing and security. In Power BI Desktop, and while a report is being edited in the Power BI service, a button responds to a click only while Ctrl is held, so that you can still select it to edit it; a reader viewing the report simply clicks it (Microsoft, 2026b).
A bookmark saves the current state of a page, such as its filters, its slicer selections, its sort order, and which visuals are visible, so that a reader can return to it; its options choose which of these it restores and whether it opens its own page (Microsoft, 2025b). Bookmarks suit saved views, such as Furniture in fiscal 2026, or a version of a page prepared for a meeting. For ordinary page navigation, the page navigator is the better choice: it follows the report’s pages by itself, while a bookmark keeps the state it captured until someone updates it. A field parameter lets a reader choose which measure or column a visual shows, from a slicer of field names, so that one chart can switch between, say, hours per standard hour and the overtime share. Power BI creates it as a small table that lists the fields with NAMEOF (Microsoft, 2026f). A field parameter cannot serve as the field of a drill-through or tooltip page. Microsoft’s workaround links the page to the individual fields that the parameter references, which a parameter of measures, like the one in Exercise 15.3, does not offer.
Documentation completes the package. Chapter 4 kept a Documentation worksheet in every workbook, and Chapter 13 promised its Power BI counterpart: an About page that states the purpose of the report, who it is for, where the data comes from and the period it covers, and what each KPI means, together with a description on every measure. The Validation page of Chapter 13 keeps reproducing the sales totals, and the Tests tab of Chapter 14 grows with each new page, so that the totals of the budget and the plant pages are tested against Chapters 7 and 11 the same way the sales totals were tested against Chapter 6.
15.8 Guided Tutorial 15.3: The Plant Page and the Package
Context and objective. In this tutorial, you will build the production manager’s page and finish the package. You will add the labor time and the production completions as two more fact tables, with the employee, the work center, the item, and the date as their dimensions, the cross-group model that Chapter 1 promised. You will measure the plant’s hours per standard hour over a trailing twelve months, as Chapter 11 did in SQL, and compare the measure with a visual calculation that looks simpler but answers a different question when the chart is filtered. Then you will add an About page and a page navigator, and test the plant measures against Chapter 11.
Prerequisites. You need Charles River Reports.pbix from Tutorial 15.2. If you start here, download Charles River Reports as it stands at the end of Tutorial 15.2 from Companion Files: a Power BI project that you point at your copy of CharlesRiver.xlsx, refresh, and save as Charles River Reports.pbix, as that page explains. The labor and production Tables hold tens of thousands of rows each, so the refresh at the end of Step 3 takes several minutes.
Step-by-step instructions.
Step 1. Choose the plant’s Tables.
- Choose Home > Get data > Excel workbook, and select CharlesRiver.xlsx.
- In the Navigator, select T60_LaborTimeEntry, T52_WorkOrderOperation, T56_ProductionCompletion, T57_ProductionCompletionLine, T74_Employee, and T47_WorkCenter, and click Transform Data.
- Rename the queries
LaborTimeEntry,WorkOrderOperation,ProductionCompletion,ProductionCompletionLine,Employee, andWorkCenter.
Step 2. Keep the columns the model needs.
- In LaborTimeEntry, keep LaborTimeEntryID, EmployeeID, WorkOrderOperationID, WorkDate, LaborType, RegularHours, OvertimeHours, and ExtendedLaborCost, and set WorkDate’s type to Date.
- In WorkOrderOperation, keep WorkOrderOperationID and WorkCenterID.
- In ProductionCompletion, keep ProductionCompletionID and CompletionDate, and set CompletionDate’s type to Date.
- In ProductionCompletionLine, keep ProductionCompletionLineID, ProductionCompletionID, ItemID, and QuantityCompleted.
- In Employee, keep EmployeeID, EmployeeName, JobTitle, and PayClass, and in WorkCenter, keep WorkCenterID, WorkCenterCode, and WorkCenterName.
Step 3. Merge the headers into the facts. As in Tutorial 14.1, each fact table needs its date and its dimension keys on its own rows.
- Select LaborTimeEntry, merge it with WorkOrderOperation on WorkOrderOperationID with a left outer join, and expand only WorkCenterID, without the prefix.
- Select ProductionCompletionLine, merge it with ProductionCompletion on ProductionCompletionID, and expand only CompletionDate, without the prefix.
- Clear Enable load on WorkOrderOperation and ProductionCompletion.
- Select the Item query, click the settings icon beside its Removed Other Columns step under Applied Steps to reopen Choose Columns, and select StandardLaborHoursPerUnit as well.
- Choose Home > Close & Apply.
A labor line takes the work center of the operation it was recorded against. Only direct manufacturing time is recorded against an operation, so indirect time, and the handful of direct lines that Chapter 10 found without a matching operation, have no work center. In a visual grouped by work center they appear under (Blank), another meaningful blank.
Step 4. Relate the plant tables.
- In Model view, relate LaborTimeEntry to Employee on EmployeeID, to WorkCenter on WorkCenterID, and to the Date table on WorkDate.
- Relate ProductionCompletionLine to Item on ItemID and to the Date table on CompletionDate.
- Hide the keys of the two fact tables.
The Date table now filters five fact tables: the invoice lines, the ledger, the budget, the labor time, and the completions. Item filters both the invoice lines and the completions, so a selection of Furniture limits the sales and the output together, but not the labor time, which records no item. WorkCenter and Employee filter the labor time and not the completions. A ratio of hours to output is therefore meaningful for the whole plant over a period, not for one item, work center, or job title, a limit that Step 11 protects.
Step 5. Write the hours measures.
- Add the measures below to the Key Measures table, formatting the hours as whole numbers.
Manufacturing Hours =
CALCULATE (
SUM ( LaborTimeEntry[RegularHours] ) + SUM ( LaborTimeEntry[OvertimeHours] ),
KEEPFILTERS ( LaborTimeEntry[LaborType] <> "NonManufacturing" )
)
Direct Hours =
CALCULATE ( [Manufacturing Hours], LaborTimeEntry[LaborType] = "Direct Manufacturing" )
Indirect Hours =
CALCULATE ( [Manufacturing Hours], LaborTimeEntry[LaborType] = "Indirect Manufacturing" )
Overtime Hours =
CALCULATE (
SUM ( LaborTimeEntry[OvertimeHours] ),
KEEPFILTERS ( LaborTimeEntry[LaborType] <> "NonManufacturing" )
)
Manufacturing hours are the regular and overtime hours of direct and indirect manufacturing time, the hours Chapter 11 compared with output. Time recorded outside manufacturing is left out. KEEPFILTERS matters here. Without it, the filter on LaborType inside Manufacturing Hours would replace any filter already on that column, as Chapter 14 explained, and Direct Hours, which filters LaborType to direct time, would return all manufacturing hours. With it, the two filters combine, and Direct Hours returns direct time only.
Step 6. Measure the output and the ratio.
- Add the measures below, formatting Standard Hours and Standard Hours to Cut-off as whole numbers and the ratio with two decimals.
Standard Hours =
SUMX (
ProductionCompletionLine,
ProductionCompletionLine[QuantityCompleted] * RELATED ( 'Item'[StandardLaborHoursPerUnit] )
)
Standard Hours to Cut-off =
VAR LastTimeRecord =
CALCULATE ( MAX ( LaborTimeEntry[WorkDate] ), REMOVEFILTERS () )
RETURN
CALCULATE ( [Standard Hours], KEEPFILTERS ( 'Date'[Date] <= LastTimeRecord ) )
Hours per Standard Hour = DIVIDE ( [Manufacturing Hours], [Standard Hours to Cut-off] )
Standard hours are the hours the standards allow for the units completed, Chapter 10’s standard hours allowed. The time records end in December 2026, before the end of the month, because the last two pay periods are marked Open in the data, while the completions run to the year’s last day. The cut-off keeps only the output completed up to the last day with time records, as Chapters 10 and 11 did. That day, December 11, 2026, is the last day of direct time, but indirect time ends a week earlier, on December 4, 2026. The ratio is therefore an observed-records diagnostic, as Chapter 10 called it, not a labor efficiency variance, and its last week holds direct time and output but no indirect time. REMOVEFILTERS inside the variable finds that last day in the whole table, whatever the visual is filtered to.
Step 7. Measure the trailing twelve months.
- Add the measure below, with two decimals.
- Add a page named
Plant, and add a line chart with YearMonth on the X-axis and Hours per Standard Hour TTM on the Y-axis, filtered to the years 2024 to 2026.
Hours per Standard Hour TTM =
VAR Window =
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH )
VAR MonthsInWindow =
COUNTROWS ( CALCULATETABLE ( VALUES ( 'Date'[YearMonth] ), Window ) )
RETURN
IF (
MonthsInWindow = 12 && NOT ISBLANK ( [Manufacturing Hours] ),
DIVIDE (
CALCULATE ( [Manufacturing Hours], Window ),
CALCULATE ( [Standard Hours to Cut-off], Window )
)
)
The window is the twelve months that end with the last day of the current month. The guard asks for twelve months of the Date table in the window and for manufacturing hours in the current month, so the measure is blank before December 2024, where the view of Chapter 11 began, and for the months of 2027, which have no time records. It counts calendar months, not months whose records are complete, and its last point, December 2026, is provisional for the reason Step 6 gave. The line rises from the level of 2024 through 2025 and keeps rising through most of 2026: the plant recorded more hours for each standard hour of output in every successive year, the trend Part III explained.
Step 8. Add the trailing ratio as a visual calculation.
- Add a table visual with YearMonth, Manufacturing Hours, Standard Hours to Cut-off, and Hours per Standard Hour TTM, filtered to the years 2024 to 2026.
- Choose Home > New visual calculation, type the formula below, and click Back to report.
- Compare the two trailing columns from December 2024 to December 2026.
TTM (visual) = DIVIDE (
MOVINGAVERAGE ( [Manufacturing Hours], 12 ),
MOVINGAVERAGE ( [Standard Hours to Cut-off], 12 )
)
Keep the table sorted by YearMonth, oldest first, with one row for each month, because the moving average reads the rows in the order the visual shows them. The ratio of two twelve-month averages over the same months equals the ratio of the twelve-month totals, so while the table starts in January 2024, the visual calculation agrees with the measure from December 2024 on.
Step 9. Filter the table’s axis. Change the visual’s year filter to 2025 and 2026 only, and compare the two trailing columns for 2025 again.
Once the table starts in January 2025, the visual calculation has only the months on the table to work with: in January 2025 it averages a single month, in February two, and it agrees with the measure again only in December 2025, as Figure 15.10 shows. The measure is unaffected, because its window reaches into the model. The trailing figure the production manager will rely on is therefore the measure.
Step 10. Add the KPI card.
- Delete the table of Steps 8 and 9, which served only for the comparison.
- Add a card visual with Hours per Standard Hour TTM and a second measure, written below, that holds the 2024 level for comparison.
- Filter the card to the years 2024 to 2026, like the line chart.
- In Format visual > General > Title, give the card the title
December 2026 is provisional.
Hours per Standard Hour 2024 =
CALCULATE ( [Hours per Standard Hour], REMOVEFILTERS ( 'Date' ), 'Date'[Year] = 2024 )
The card sets the latest trailing figure beside the 2024 level, the KPI with its comparison. Its title carries the warning of Step 6 to the place where the number is read, because direct time and output run to December 11, 2026, and indirect time to December 4, 2026, so the figure is an observed-records diagnostic, not a labor efficiency variance, even when the page is opened without the About page. Without the year filter, the card is blank: its window would end in December 2027, the last month of the Date table, which has no time records.
Step 11. Chart the work centers and the overtime share.
- Add a clustered bar chart of Direct Hours by WorkCenterName, with a visual filter on 2026.
- Add a clustered column chart with JobTitle on the X-axis, Year on Legend, and the Overtime Share measure below on the Y-axis, filtered to the years 2024 to 2026 and to the job titles Assembler, Machine Operator, and Quality Technician.
- Select the bar chart, choose Format > Edit interactions, and click the None icon above the card and above the line chart. Select the column chart, and do the same.
Overtime Share = DIVIDE ( [Overtime Hours], [Manufacturing Hours] )
Figure 15.11 shows the page. The bar chart shows that most direct hours of 2026 were recorded at Packing, the work center Chapter 11 found far above its planned load. The overtime share rose by about two-thirds or more from 2024 to 2026 for each of the three manufacturing job titles, the plant-wide pattern of the surge days that Chapter 12 found. Editing the interactions keeps the card and the line chart plant-wide. Without it, clicking Packing in the bar chart would divide Packing’s direct hours by the whole plant’s output, because the work center filters the labor time and not the completions: a ratio well below the plant’s that describes neither Packing nor the plant. A ratio for one work center would first need its output measured there.
Step 12. Add the About page and the navigation.
- Add a page named
About, and drag its tab to the first position. - Choose Insert > Text box, and write a short statement of the report’s purpose, its readers, its source (CharlesRiver.xlsx), its period and the last dates of its direct and indirect time records, and where each KPI is defined, ending with a pointer to the Validation page and the Tests tab.
- In Model view, give every measure that has no description one in the Properties pane, as in Tutorial 14.2, Step 9, saying what it measures and any filter or cut-off it applies.
- Choose Insert > Buttons > Navigator > Page navigator, and place the navigator below the text.
- Right-click the tabs of Promotion Detail, Promotion Tooltip, and Cost Center Detail, and choose Hide Page.
- Copy the navigator to the top of each visible page, and test it by holding Ctrl and clicking its buttons.
Figure 15.12 shows the About page. The navigator lists the visible pages in order and updates itself as pages change, and the hidden detail pages are reached only from the pages they serve. Every measure now has the description the About page promises.
Step 13. Add the plant test.
- In DAX query view, open the Tests tab, add the query below, and run it.
- Select Report view and the About page, and save the report.
// Test 5: hours per standard hour by year must equal Chapter 11's December figures
EVALUATE
SUMMARIZECOLUMNS (
'Date'[Year],
TREATAS ( { 2024, 2025, 2026 }, 'Date'[Year] ),
"Hours", ROUND ( [Manufacturing Hours], 0 ),
"Standard Hours", ROUND ( [Standard Hours to Cut-off], 0 ),
"Hours per Standard Hour", ROUND ( [Hours per Standard Hour], 2 )
)
The ratio for each year equals the trailing figure of its December and the figures of Chapter 11’s MonthlyLaborEfficiency view, so the model’s yearly figures agree with the queries of Part III. The test shows that the model reproduces Part III’s ratio, not that the ratio is a complete measure of the plant’s labor performance. Counted to December 4, 2026, on both sides, hours and output alike, the 2026 figure would be a little lower, and the pattern of the three years would be the same. The test covers those totals, not what each visual shows under its filters and interactions, which Chapter 16 examines when it audits a report. When no landing page is set, a report opens on the page that was active when it was saved, which is why About is selected before saving.
Checkpoint. Before you hand the package to its readers, confirm the following:
- LaborTimeEntry and ProductionCompletionLine relate to their dimensions, and Test 5 returns Chapter 11’s yearly ratios.
- The trailing measure and the visual calculation agree on the full axis and differ on the filtered one, for the reason Step 9 gave.
- The report opens on the About page, the navigator reaches every visible page and lists none of the hidden ones, and the detail pages are hidden.
- Clicking a work center in the bar chart leaves the card and the line chart unchanged.
The package now answers three readers’ questions on three pages, each with its comparison and its detail, and documents itself on the first. Its control totals are tested against the earlier Parts, which is what makes it fit to be sent every month.
15.9 What-If Parameters and Forecasts
Most of this chapter is descriptive and diagnostic analytics, in the terms of Table 1.1: it reports what happened and explains why. Power BI also supports the predictive and prescriptive questions of Chapter 7, with two features that need the same caution Chapter 7 applied in Excel.
A what-if parameter lets a reader change an assumption with a slider and watch the measures that use it change. Choosing Modeling > New parameter > Numeric range creates a one-column table of the values the slider allows and a measure that returns the value the reader selected, and can place the slider on the page (Microsoft, 2025d). A measure that refers to the parameter’s value then recalculates with each move. Chapter 7 used Goal Seek to find the break-even lift, the increase in volume a promotion needs to earn the same contribution after its discount, and the Part II case found that lift for each promotion of its proposal. With a what-if parameter for the discount, the same calculation becomes a page on which the sales manager can try discounts and see the lift each would require. The evidence the case examined, which found no unusual increase in volume in any promotion’s months, is what the reader must weigh the required lift against.
The Analytics pane of a line chart can add a forecast to a series of dates, with a chosen length and confidence interval (Microsoft, 2025e). When Microsoft introduced the forecast, in Power View, it described the method as exponential smoothing, a family of methods that weight recent observations more heavily than older ones and that can detect a seasonal pattern on their own, and showed that the forecast can also be run on older data to see how it would have predicted the recent past, a hindcast (Microsoft, 2014). The Analytics pane’s documentation still points to that article, as dated but still relevant, rather than describing the method itself (Microsoft, 2025e). Chapter 7’s advice applies unchanged: a forecast is judged by how well it would have predicted periods you already know, against simple benchmarks such as the same period last year.
15.10 Looking Ahead
This chapter has turned the model of Chapter 14 into a reporting package for three readers. You designed pages around their questions, with each KPI shown against its comparison, and gave readers ways to reach the detail behind a number through drill-through pages and tooltips. You placed the budget beside the ledger and found that the largest variances of fiscal 2026 were volume and classification, not spending, and that what remained is consistent with a rate and a timing pattern the earlier chapters had already traced. You wrote visual calculations, saw where they stop being reliable, and kept the numbers readers depend on in measures with tests. The package now has navigation and an About page, and its Validation page and Tests tab tie each page’s control totals to the earlier Parts. Most of this work was descriptive and diagnostic analytics; the what-if parameter and the forecast are its first predictive and prescriptive tools, each to be judged before it is trusted.
The package is ready for its readers, but not yet for its auditors. Chapter 16 turns to the internal auditor of Chapters 8 and 12, who will monitor the same data for exceptions, keep a record of what each exception turned out to be, and test whether the package itself can be relied on. How the package reaches its readers, and how each department manager sees only the cost center they manage, is the subject of the appendix on publishing and security.
15.11 Chapter Summary
A report page serves one reader, one question, and one decision. Design starts with that reader: what they must decide, what they must compare to decide it, and how much detail they need. A key performance indicator is a measure that tracks progress toward an objective, shown with the comparison that gives it meaning, such as a budget, the prior year, or a target. Research on performance reports shows that readers rely on measures common to the units they compare and that the way measures are organized and marked changes how they weight them, so a package defines shared measures the same way, makes sure the measures unique to a unit are not passed over, and uses markers deliberately. The KPI goes where the eye starts, the breakdown next, and the detail on demand.
Drill-through moves a reader from a summary to another page filtered to the selected item, and Power BI adds a back button to the target page. A report-page tooltip shows a small page when the reader points at a data point. Tooltips are not interactive and screen readers cannot read them, so they offer context, not essential information. Tutorial 15.1 built the sales manager’s page: a waterfall from list price to net revenue, driven by a disconnected table of steps and a measure that tests the selected step, and promotions that can be drilled through and previewed.
A budget is a second fact table. Charles River’s BudgetLine has a month, an account, and a cost center on each line; relating it through the first day of each month lets it share Account, CostCenter, and Date with the ledger. A budget variance, actual less budget, measures a difference without explaining it. The largest operating-expense variances of fiscal 2026 were volume, a commission budget calculated on an inflated sales volume, and classification, depreciation budgeted in one cost center and recorded partly in another; once these are set aside, almost every cost center is a few percent under budget, consistent with the payroll burden rate, and the months with three pay dates are timing. Conditional formatting with icons and signed percentages signals the variances without relying on color.
A visual calculation is DAX defined on one visual, which works on the rows the visual shows. RUNNINGSUM, MOVINGAVERAGE, and PREVIOUS make running totals, moving averages, and comparisons with the previous row short formulas, the counterparts of Chapter 11’s window functions. A visual calculation sees only its visual’s data matrix, so filtering the axis shortens its window, and it cannot be reused in another visual; its exports must be tested for the mode and version in use, and a number readers depend on belongs in a measure. The plant page measured hours per standard hour over a trailing twelve months, reproducing Chapter 11’s observed-records ratio with its provisional last month, and showed that the measure and the visual calculation agree only when the visual holds all the months the window needs.
A package needs navigation, documentation, and tests. A page navigator keeps itself in step with the report’s pages, bookmarks save views, and field parameters let a reader switch the measure a visual shows. An About page states the report’s purpose, readers, source, and definitions, and the Validation page and Tests tab tie each page’s control totals to the earlier Parts. What-if parameters and the Analytics pane’s forecast bring prescriptive and predictive questions into the report; each should be tested against what is already known, as Chapter 7 tested its forecasts, before a manager relies on it.
15.12 Key Terms
Bookmark. A saved state of a Power BI report page, including its filters, slicer selections, and the visibility of its visuals, that a reader can return to. Bookmarks suit saved views; page navigation is better built with a page navigator.
Budget variance. The difference between an actual amount and its budget, computed in this book as actual less budget. For an expense a positive variance is unfavorable and a negative one favorable; for revenue the reverse. A variance measures a difference; its causes, such as volume, classification, timing, rate, and spending, must be found separately.
Conditional formatting. An Excel feature that changes the appearance of cells that meet a rule, such as values above a threshold, the top items in a range, or rows for which a formula returns TRUE. In Power BI it formats the values of a table or matrix by color scale, rules, or field value, and can add data bars or icons, which carry meaning in their shape as well as their color.
Disconnected table. A table in a model that has no relationship to any other table, used to supply the categories of a visual or the values of a parameter. A measure reads the selected value, typically with SELECTEDVALUE, and decides what to return.
Drill-through. Moving from a visual on one report page to another page filtered to the item selected, such as a promotion or a cost center. The target page holds the drill-through field, and Power BI adds a back button to it.
Exponential smoothing. A family of forecasting methods that weight recent observations more heavily than older ones, with variants that also model a trend and a seasonal pattern. Microsoft described the forecast as using it when the feature was introduced in Power View, and the documentation of Power BI’s Analytics pane still points to that description.
Field parameter. A small table, created in Power BI with Modeling > New parameter > Fields, that lists measures or columns so that a reader can choose from a slicer which of them a visual shows.
Key performance indicator (KPI). A measure chosen because it tracks progress toward an objective, shown with the comparison that gives it meaning, such as a budget, the same period last year, or a target.
Page navigator. A group of buttons, one for each page of a Power BI report, that Power BI keeps in step with the pages as they are added, removed, renamed, or reordered.
Report-page tooltip. A small report page that Power BI shows when the reader points at a data point, filtered to that data point. It replaces the default tooltip with chosen visuals, but it is not interactive and screen readers cannot read it.
Visual calculation. A DAX calculation defined on a single Power BI visual, which works on the visual’s data matrix, including any fields hidden from the display, and is stored with the visual rather than in the model. Functions such as RUNNINGSUM, MOVINGAVERAGE, and PREVIOUS make running totals, moving averages, and comparisons with the previous row short formulas.
What-if parameter. A numeric range parameter, created with Modeling > New parameter > Numeric range, that adds a table of allowed values, a measure returning the value the reader selects, and optionally a slider, so that measures using it recalculate as the reader changes an assumption.
15.13 Multiple Choice Questions
1. Which of the following is a key performance indicator in the sense of this chapter?
- The operating expense of fiscal 2026
- Every measure stored in the Key Measures table
- A line chart that shows more than one series
- A cost center’s spending against its budget
2. In the study by Lipe and Salterio (2000), superiors evaluated two business units whose scorecards held some measures common to both units and some unique to each. Which measures affected their evaluations?
- Only the measures unique to each unit
- Only the measures common to both units
- Only the nonfinancial measures of each unit
- All of the measures, weighted equally
3. A reader right-clicks the bar of one promotion and opens a page that shows only that promotion’s terms and its discounts by month. Which feature is the reader using?
- Drill-through
- Drill-down
- A report-page tooltip
- A bookmark
4. Why should a report never place information the reader must have only in a report-page tooltip?
- Tooltip pages cannot show measures
- Tooltips appear only in the Power BI service
- Screen readers cannot read the tooltip’s content
- Tooltip pages are removed when the report is published
5. The Steps table of Tutorial 15.1 has no relationship to any other table. How does the waterfall chart show a different value for each step?
- Power BI relates Steps to the invoice lines on the Order column
- The measure tests the step in context with SELECTEDVALUE
- Each step is a separate measure placed on the Y-axis
- The waterfall adds up the Order column of each step
6. BudgetLine records a month but no day. How does Microsoft’s guidance relate such a fact table to the date table?
- Relate the month names in a many-to-many relationship
- Copy each month’s budget to every day of the month
- Leave it unrelated and filter it with its own slicer
- Store each month’s first day and relate that date
7. Computed as actual less budget, a cost center’s operating expense variance is +26.9 percent. What does the variance say?
- The cost center spent less than its budget
- The cost center’s revenue exceeded its budget
- The cost center spent more than its budget
- The budget was raised during the year
8. In fiscal 2026, the Sales cost center spent far less than its operating expense budget. What explains most of the difference?
- The commission budget assumed the budget’s sales volume
- The salaries of the sales staff were reduced during the year
- The Sales depreciation was recorded in the Warehouse instead
- The salaries paid in the months with three pay dates
9. Depreciation was budgeted entirely in Administration and recorded partly in the Warehouse. Which statement about this classification effect is true?
- It explains most of the company’s total variance
- It adds up to zero across the cost centers
- It is a timing difference that reverses the next year
- It shows that the Warehouse overspent its budget
10. A twelve-month moving average is written as a visual calculation on a chart whose axis is filtered to start in January 2025. What does it return for January 2025?
- The same value as a measure that uses DATESINPERIOD
- A blank, because twelve months are not available
- An error, because the window reaches before the start of the axis
- The average of the months on the chart, January alone
11. Which calculation belongs in a measure in the model rather than in a visual calculation?
- A KPI that readers export and compare across pages
- A running total that appears on one chart of one page
- The difference from the previous row of one table
- A percent of parent within one matrix visual
12. In Tutorial 15.3, Direct Hours filters LaborType to direct time inside CALCULATE, yet it returned every manufacturing hour until KEEPFILTERS was added to Manufacturing Hours. Why?
- The relationship from LaborTimeEntry to Employee was inactive
- LaborType was hidden from the Data pane in Model view
- The filter inside Manufacturing Hours replaced the outer one
- DIVIDE ignored the filter on LaborType in the ratio
13. Why does this chapter build page navigation with a page navigator rather than with bookmarks?
- Bookmarks cannot be used in Power BI Desktop
- A navigator works without Ctrl in Power BI Desktop
- The navigator updates itself as pages change
- Bookmarks cannot capture filters or slicers
14. What does Modeling > New parameter > Numeric range create?
- A calculated column on the fact table
- A table of values and a measure of the selected value
- A bookmark for each value in the range
- A relationship from the parameter table to the date table
15. Before showing a manager a forecast from the Analytics pane, what should you do first?
- Test it on data ending before a known quarter
- Widen its confidence interval to 99 percent
- Delete the start-up month from the source data
- Rebuild it as a visual calculation on the chart
15.14 Applied Exercises
Work on these exercises in a copy of Charles River Reports.pbix, saved with File > Save as after you finish this chapter’s tutorials, such as Ch15 Exercises.pbix. Build each exercise on its own report page, or in its own query tab in DAX query view, named after it (such as Ex 15.1), and put the measures it asks for in a display folder of the Key Measures table with the same name. Do not change the queries, relationships, measures, or pages the tutorials created. When an exercise needs a Table the tutorials did not load, import it under the query name the exercise gives.
15.14.1 Financial Accounting Exercises
Exercise 15.1: From the Income Statement to the Entry
Table group: Accounting Core
Scenario. On the Income Statement page of Tutorial 14.3, the controller notices a line of other income or expense that appears in fiscal 2025 and 2026 and in no other year, and asks what it is. The answer is one drill-through away.
Requirements.
Add a page named
Ledger Detailwith AccountSubType from Account in its drill-through well. Add a table visual with PostingDate, VoucherNumber, SourceDocumentType, AccountNumber, AccountName, and the P&L Amount measure.On the Income Statement page, right-click the Other Income or Expense amount in the fiscal 2026 column and drill through, and then do the same in the fiscal 2025 column. Record the entries you find, their dates, and their amounts.
In DAX query view, write a query that lists every posting of the 2026 entry with its account number, account name, debit, and credit. Use RELATED to bring the account columns onto the postings.
Explain from the accounts in the entry how the amount was calculated, and why the same calculation gives a different result for the 2025 entry.
Explain why the drill-through page also needed the year from the matrix’s column, and what the page would have shown if the year had not been passed to it.
Deliverable. The Ledger Detail page, the query, and a short note answering requirements (2), (4), and (5).
Exercise 15.2: Month and Year to Date With Visual Calculations
Table group: Accounting Core
Scenario. The controller wants a table of fiscal 2026 net income by month, with the change from the previous month and the year to date, and asks whether visual calculations can produce it without new measures.
Requirements.
Add a table visual with YearMonth and Net Income, filtered to 2026. Add two visual calculations: the year to date with RUNNINGSUM, and the change from the previous month with PREVIOUS, left blank in the first month, which has no previous month on the table.
Add a measure, Net Income YTD, that uses TOTALYTD, and place it in the same table. Confirm that it equals the visual calculation in every month, and that both reach the net income of Tutorial 14.3 in December.
Filter the table to the months July to December. Compare the two year-to-date columns, and explain the difference.
Identify the two months with the lowest net income, and explain at least one of them using an earlier chapter’s finding.
Recommend which of the two year-to-date columns the monthly package should show, and why.
Deliverable. The table, the measure, and a note answering requirements (3) to (5).
15.14.2 Managerial Accounting Exercises
Exercise 15.3: One Chart, Three Measures
Table group: Payroll and Time, with Manufacturing
Scenario. The production manager wants the plant page to show, in one chart, either hours per standard hour, the overtime share, or the labor cost per standard hour, chosen from a slicer.
Requirements.
Write a measure, Labor Cost per Standard Hour, that divides the extended labor cost of manufacturing time by Standard Hours to Cut-off. Use KEEPFILTERS as Manufacturing Hours does.
Choose Modeling > New parameter > Fields, name the parameter
Plant Measure, and add Hours per Standard Hour, Overtime Share, and Labor Cost per Standard Hour.Add a clustered column chart with Year on the X-axis and the Plant Measure parameter on the Y-axis, filtered to 2024 to 2026, and the slicer that Power BI adds, set to Single select so that the chart shows one measure at a time. Record the three measures for each year.
Explain why the labor cost per standard hour rose faster than the hours per standard hour.
Try to use the field parameter as the field of a drill-through page. Explain what Power BI allows instead, and whether that alternative applies to a parameter that lists measures.
Deliverable. The chart and its slicer, and a short note answering requirements (3) to (5).
Exercise 15.4: What Would the Design Trade Promotion Need?
Table group: Order-to-Cash, with Item and the promotions
Scenario. The sales manager is considering the Design Trade Customer Promotion again for 2027 and asks how much additional volume it would need, at different discounts, to pay for itself. The Part II case answered this once with Goal Seek; the report should let the manager try discounts directly.
Requirements.
Choose Modeling > New parameter > Numeric range, name it
Discount, set Data type to Whole number, with a minimum of 0, a maximum of 20, an increment of 1, and a default of 12, and add its slider to the page. The slider reads in whole percents, so divide its value by 100 wherever a measure uses it. In Power BI Desktop 2.158, a decimal range from 0 to 0.2 in steps of 0.01 stopped at 0.19, so check that the slider reaches both 0 and 20.Write measures, filtered to the Design Trade Customer Promotion’s 2026 lines, for the units, the price before discount per unit, and the standard cost per unit.
Write a measure for the break-even lift, the increase in volume at which the contribution with the discount equals the contribution without it, using Chapter 7’s model with the commission rate of the Part II case (1.903 percent). The lift is the contribution per unit without the discount divided by the contribution per unit with it, less one.
Record the break-even lift at discounts of 5, 8, 10, 12, and 15 percent, and compare the 12 percent result with the Part II case.
Using the Part II case’s evidence about volume in the promotion months, advise the sales manager on whether, and at what discount, to repeat the promotion.
Deliverable. The page with the slider and the measures, and a short recommendation.
15.14.3 Auditing Exercises
Exercise 15.5: Testing the Forecast Before Trusting It
Table group: Order-to-Cash
Scenario. A manager has seen the forecast in the Analytics pane and wants to use it for the 2027 plan. Before the internal auditor accepts it, the auditor tests it the way Chapter 7 tested its forecasts: on a quarter whose results are already known.
Requirements.
Add a calculated column MonthStart to the Date table,
DATE ( YEAR ( 'Date'[Date] ), MONTH ( 'Date'[Date] ), 1 ), formatted as a date. A forecast needs a continuous date axis, which the text column YearMonth cannot provide.Add a line chart with MonthStart on the X-axis and Revenue on the Y-axis, filtered to the months from January 2024 to September 2026. In the Analytics pane, add a forecast of three months with a 95 percent confidence interval. Use MonthStart itself on a continuous axis, with Revenue as the only series, and note the Power BI Desktop version and the forecast settings, including seasonality, so that you can apply the same ones in requirement (5).
Record the forecast for October, November, and December 2026 and each month’s interval, and add the three monthly forecasts to a quarter total. The monthly intervals cannot simply be added into an interval for the quarter.
Compare the forecast with the actual revenue of fiscal 2026’s fourth quarter and with the three benchmarks of Chapter 7: the trend, the mean, and the same quarter of the previous year. Use one definition of error for every method. The quarter’s error is the forecast total over the actual total, less one, and the monthly error is the average, over the three months, of the absolute difference between the forecast and the actual divided by the actual.
Change the start of the chart to February 2024, leaving out the start-up month, and repeat requirement (3). Report how much the forecast changed. The February run fits the same months as Chapter 7’s benchmarks, so it is the fairer comparison with them.
Write a short audit note on whether the forecast is fit for the 2027 plan and what the manager should disclose with it.
Deliverable. The chart, a table of the comparisons, and the audit note.
Exercise 15.6: Which Work Center Did the Time Belong To?
Table group: Payroll and Time, with Manufacturing
Scenario. The plant page assigns each direct labor line to the work center of the operation it was recorded against. The time clock records a work center too. Before the production manager acts on the work-center chart, the internal auditor compares the two.
Requirements.
Import T52_WorkOrderOperation again as
OperationPaths, keeping WorkOrderOperationID, WorkCenterID, and ActualEndDate, with ActualEndDate typed as Date, and T66_TimeClockEntry asClockPaths, keeping TimeClockEntryID and WorkCenterID. Clear Enable load on both.Import T60_LaborTimeEntry again as
LaborPaths, keeping LaborTimeEntryID, TimeClockEntryID, WorkOrderOperationID, WorkDate, LaborType, RegularHours, and OvertimeHours, with WorkDate typed as Date. Merge it with OperationPaths with a left outer join, which keeps the lines that have no operation, expand WorkCenterID and ActualEndDate, and rename WorkCenterID toOperationWorkCenterID. Merge it with ClockPaths the same way, expand WorkCenterID, and rename itClockWorkCenterID. Then merge each of the two keys with the WorkCenter query to bring its work-center name, as OperationWorkCenter and ClockWorkCenter. After Close & Apply, relate LaborPaths to the Date table on WorkDate, so that a year can filter it.Add custom columns that test whether the two work centers agree and whether the work date falls after the operation’s actual end date, each left blank (null) when a line has nothing to compare, such as a line without an operation.
For direct manufacturing time, count the lines on which the two paths disagree in each year, and build a matrix of 2026 hours with OperationWorkCenter on the rows and ClockWorkCenter on the columns.
Compare the share of lines recorded after their operation ended among the lines that disagree and among all direct lines of 2026, say how many direct lines could not be tested, and relate the result to Chapter 12’s finding about direct time recorded after operations ended.
Show where the time clock places the indirect manufacturing hours of 2026, which the operation path leaves in (Blank), and conclude which path should feed which question on the plant page.
Deliverable. The queries, the matrix, and an audit note answering requirements (4) to (6).
15.15 Further Reading
Cardinaels, E., & van Veen-Dirks, P. M. G. (2010). Financial versus non-financial information: The impact of information organization and presentation in a Balanced Scorecard. Accounting, Organizations and Society, 35(6), 565–578. https://doi.org/10.1016/j.aos.2010.05.003 Two experiments in which participants, as senior executives, evaluated two business-unit managers from scorecards. Organizing the measures into the scorecard’s categories raised the weight evaluators gave to financial measures when the units differed on them, and in a second experiment, with plus, minus, and equal markers for performance against target on both scorecards, the organized one led evaluators to weight more heavily any category in which the units differed. The study shows that presentation changes judgment, which is why this chapter chooses its markers and states their threshold; it did not test Power BI’s icons or any particular threshold.
Few, S. (2013). Information dashboard design: Displaying data for at-a-glance monitoring (2nd ed.). Analytics Press. A practical guide to designing single-screen displays for monitoring, with chapters on choosing measures, giving each its context, and the graphs that suit them, including the bullet graph. Few uses the word dashboard for any such display; read the advice as advice about report pages.
Kokina, J., Pachamanova, D., & Corbett, A. (2017). The role of data visualization and analytics in performance management: Guiding entrepreneurial growth decisions. Journal of Accounting Education, 38, 50–62. https://doi.org/10.1016/j.jaccedu.2016.12.005 A teaching case in which you act as an accountant designing a performance management system for a growing online retailer, building visualizations from its customer and order data and matching its business questions to analytical techniques. It practices the move of this chapter, from data to measures that serve a decision, on a different company and tool.
Lipe, M. G., & Salterio, S. E. (2000). The balanced scorecard: Judgmental effects of common and unique performance measures. The Accounting Review, 75(3), 283–298. https://doi.org/10.2308/accr.2000.75.3.283 An experiment showing that participants acting as superiors, evaluating two business units, relied only on the measures the units had in common, ignoring the measures unique to each, which the balanced scorecard includes to capture each unit’s own strategy. It is a warning for any package that compares departments: define the shared measures the same way, and make sure the unique ones are not passed over.
Microsoft. (2025c). Many-to-many relationship guidance. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/guidance/relationships-many-to-many Microsoft’s guidance on facts recorded at a coarser grain than the dimensions, such as a monthly budget beside a daily ledger. It explains why the first day of each period is stored, and how measures can avoid showing a monthly figure as if it belonged to a single day.
Microsoft. (2026g). Visual calculations overview. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-visual-calculations-overview The reference for the functions, templates, and parameters of visual calculations, with the list of what they cannot do. Read its section on the Axis and Reset parameters before writing a visual calculation on a matrix with more than one level, and its limitations before relying on one in a package that readers export.
15.16 References
Cardinaels, E., & van Veen-Dirks, P. M. G. (2010). Financial versus non-financial information: The impact of information organization and presentation in a Balanced Scorecard. Accounting, Organizations and Society, 35(6), 565–578. https://doi.org/10.1016/j.aos.2010.05.003
Few, S. (2013). Information dashboard design: Displaying data for at-a-glance monitoring (2nd ed.). Analytics Press.
Lipe, M. G., & Salterio, S. E. (2000). The balanced scorecard: Judgmental effects of common and unique performance measures. The Accounting Review, 75(3), 283–298. https://doi.org/10.2308/accr.2000.75.3.283
Microsoft. (2014, May 8). Introducing new forecasting capabilities in Power View for Office 365 [Blog post]. Microsoft Power BI Blog. https://powerbi.microsoft.com/en-us/blog/introducing-new-forecasting-capabilities-in-power-view-for-office-365/
Microsoft. (2025a). Apply conditional table formatting in Power BI. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/create-reports/desktop-conditional-table-formatting
Microsoft. (2025b). Create report bookmarks in Power BI. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/create-reports/desktop-bookmarks
Microsoft. (2025c). Many-to-many relationship guidance. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/guidance/relationships-many-to-many
Microsoft. (2025d). Use parameters to visualize variables. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-what-if
Microsoft. (2025e). Use the Analytics pane in Power BI. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-analytics-pane
Microsoft. (2025f). Waterfall charts in Power BI. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/visuals/power-bi-visualization-waterfall-charts
Microsoft. (2026a). Add and edit visual calculations. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-visual-calculations-create
Microsoft. (2026b). Create page and bookmark navigators. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/create-reports/button-navigators
Microsoft. (2026c). Create report tooltips in Power BI. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/create-reports/desktop-tooltips
Microsoft. (2026d). Drillthrough in Power BI reports: Navigate to detailed insights. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/create-reports/desktop-drillthrough
Microsoft. (2026e). Export data from a Power BI visualization. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/visuals/power-bi-visualization-export-data
Microsoft. (2026f). Use field parameters in Power BI reports. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/create-reports/power-bi-field-parameters
Microsoft. (2026g). Visual calculations overview. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-visual-calculations-overview