Appendix C — Power BI in the Browser
Power BI Desktop runs only on Windows. The Power BI service, at app.powerbi.com, does much of the same work in a supported browser, on a Mac, a Chromebook, or a Windows computer without Desktop: it builds a semantic model from CharlesRiver.xlsx with Power Query, relates the model’s tables, holds its measures and tests them with DAX queries, and builds the report’s pages (Microsoft, 2026b). This appendix gives you a starting point for that path. Its three tutorials rebuild Chapter 13’s model and its Sales and Discounts page in the browser and add a first measure, and its last section lists what else changes, so that you can follow the rest of Part IV on your own.
The tasks of these tutorials can be done in both, but the browser’s commands, permissions, and some of its features differ from Desktop’s. What changes most is where a command lives, a few defaults, and how your work is saved, and the tutorials stop at each of those places. The steps follow the service as it was in one school account in October 2026, and Microsoft changes it without notice, so where a label differs from the text, look for the command by its name and check the result the step describes. The companion start files of the Power BI chapters are Power BI projects, which only Desktop can open, so in the browser you build your own model from the workbook in Guided Tutorial C.1 and carry it through the chapters.
C.1 What the Browser Needs
You sign in to the service with your school account; a personal email address does not work. What you can do then depends on your license and on settings your institution controls. A free license lets you build semantic models and reports in My workspace, your personal area of the service, for your own use (Microsoft, 2026c). A Pro license, which some institutions give their students, adds sharing and shared workspaces, where you can work with others, and a model’s version history (Microsoft, 2025d). Guided Tutorial C.1 uploads the workbook to your OneDrive for work or school, so your account needs one. Editing a model in the browser also depends on a setting of your institution’s Power BI administrator, Users can edit semantic models in the Power BI service (Microsoft, 2026e). If the service does not let you create or edit a model, ask your instructor, and use Desktop in a campus computer lab or a Windows virtual machine instead.
Table C.1 compares the two ways of working. Most of the differences are in where a command lives, not in what it does.
| Task | Power BI Desktop | Power BI service in a browser |
|---|---|---|
| Read the workbook | From a folder on your computer | From a copy uploaded to your OneDrive for work or school |
| Shape the data | The Power Query Editor | Power Query Online, whose date columns can arrive as numbers |
| Relate tables, write measures | Model view and the ribbon | The model editor, in Editing mode |
| Look at a table’s rows | Table view | A DAX query, or a table visual |
| Test with DAX queries | DAX query view, tabs saved in the file | DAX query view, tabs discarded on close |
| Build report pages | Report view | The report editor, in a browser tab of its own |
| Save | The .pbix file | The model as you work, Power Query Online with its Save button, and the report with its own |
| Test a role | View as | Test as role, in the workspace |
| Use the companion start files | Yes | No |
C.2 Guided Tutorial C.1: Building the Chapter 13 Model in the Browser
Context and objective. In this tutorial, you will do the work of Tutorial 13.1 in the Power BI service. You will upload CharlesRiver.xlsx, shape four of its Tables with Power Query Online, create the semantic model, relate its tables in the model editor, and reconcile it on a Validation page. Read Tutorial 13.1 first: it explains why each step matters, and this tutorial gives the browser’s commands and stops where the browser behaves differently.
Prerequisites. You need a browser, your school account, and CharlesRiver.xlsx on your computer, as the section above explains.
Step-by-step instructions.
Step 1. Upload the workbook. Power Query Online reads the workbook from your OneDrive for work or school, so it starts by uploading a copy there (Microsoft, 2025c).
- Sign in at app.powerbi.com with your school account.
- Select Create in the navigation pane on the left, and then the Get Data tile.
- Choose Excel workbook.
- Under Connection settings, select Upload file, click Browse…, and choose CharlesRiver.xlsx.
- When the box reads Upload successful, click Next.
When this appendix was tested, selecting Upload file set Authentication kind to Organizational account and signed in with the school account by itself. If Connection credentials reads Anonymous or offers Sign in, choose Organizational account and sign in with your school account before you click Next. The copy you uploaded is the one the model reads from now on; if your OneDrive already holds a file of the same name, the copy gets a number, such as CharlesRiver 1.xlsx. Figure C.1 shows the two pages of Get data.
Step 2. Choose the Tables.
- On the Choose data page, which takes the place of Desktop’s Navigator, select the check boxes of four Tables: T4_Customer, T16_SalesInvoice, T17_SalesInvoiceLine, and T44_Item. Scroll to find each one: the list is in text order (T1, T10, T11, and so on), not in the order of the numbers.
- Click Transform data.
Choose data offers Transform data only; there is no button that loads the Tables without opening Power Query. Power Query Online opens with one query for each Table, in the layout of Desktop’s Power Query Editor: the Queries pane on the left, the preview in the middle, and Query settings, with Applied steps, on the right.
Step 3. Rename the queries, correct two types, and keep the columns the report needs.
- Rename the queries
Customer,SalesInvoice,SalesInvoiceLine, andItemby double-clicking each name in the Queries pane. - Select SalesInvoiceLine. If the icon on the Discount header shows a whole number, click it, choose Decimal number, and click Replace current in the Change column type dialog.
- Set PromotionID to Whole number in the same way; it has no type yet, so no dialog opens.
- In each query, choose Home > Choose columns, clear (Select all), select the columns that Tutorial 13.1 lists in its Step 3, and click OK.
Power Query Online also types each column from its first 200 rows, so Discount, whose first rows are all zero, comes in as a whole number, the trap Tutorial 13.1 explains (Microsoft, 2026a). The step that keeps the columns is named Choose columns here, where Desktop names it Removed Other Columns.
Step 4. Keep the items Charles River sells, and set the date type.
- In the Item query, click the arrow on the ListPrice header, clear (null), and click OK.
- In the SalesInvoice query, look at the icon on the InvoiceDate header and at the column’s values.
- If the icon shows a whole number and the values are five-digit numbers, click the icon, and choose Date.
The workbook stores InvoiceDate as an Excel date, a count of days that Excel displays as a date. Desktop reads it as a date, but Power Query Online read the bare number when this appendix was tested, and the custom columns of Step 5 cannot take a year or a quarter from a number. After the change, the column shows dates again, and the query ends with a step named Changed column type 1. Figure C.2 shows the column before the change.
Step 5. Add the custom columns.
- Select the query named in the first row of Table 13.2, and choose Add column > Custom column.
- Type the name in New column name, choose the type in Data type, type the formula in Custom column formula, and click OK: Whole number for FiscalYear and FiscalQuarter, Text for Period, Month, and ProductType, and Decimal number for ListAmount and DiscountAmount.
- Repeat the two actions for each of the other rows of the table.
The formulas are Tutorial 13.1’s, and Power Query Online runs them unchanged. Because the dialog sets the type as it adds the column, there is no separate step to type the new columns, and each query ends with steps named Added custom, Added custom 1, and so on.
Step 6. Profile the invoice lines over the entire data set.
- Select the SalesInvoiceLine query.
- On the View tab, open the arrow of Data view, and select Enable column profile.
- Open the arrow again, and select Show column quality details and Show column value distribution, which stay unavailable until the profile is on.
- Click Column profiling based on top 1,000 rows in the status bar, and choose Column profiling based on entire data set.
- Record the share of PromotionID that is empty and the number of distinct values of Discount, on both bases.
The two profiles differ exactly as they do in Tutorial 13.1 (Microsoft, 2025e). The entire data set took a few seconds to profile when this appendix was tested, and it can take longer on a slow connection.
Step 7. Create the semantic model.
- At the bottom right of Power Query, click the arrow beside Create a report, and choose Create a semantic model only.
- In Create new semantic model, keep My workspace selected, type
Charles River Reportsin Semantic model name, and click Create.
The service loads the four Tables and opens the model editor, which shows the tables in a diagram, a Properties pane, and a Data pane, with Model view, DAX query view, and TMDL View (Preview) at the bottom. A model you have just created opens in Editing mode. If you return to it later and its commands are unavailable, open the menu at the top right that reads Viewing, and choose Editing. Guided Tutorial B.2, in the appendix on publishing and security, needs the model in a shared workspace in which you are an Admin. If you plan to do that tutorial and have such a workspace, preferably an exercise workspace that your institution approves, choose it here instead of My workspace, and save the report there in Step 11.
Step 8. Turn off two defaults.
- In the model editor, choose File > Options.
- Under Current File > Data Load, clear Autodetect new relationships after data is loaded and Auto date/time, and click OK (or Save, if your dialog names the button so).
- Choose Manage relationships on the ribbon, and check that it reads “There are no relationships defined yet.”
Tutorial 13.1 turns these settings off before loading. The browser offers them only once the model exists, so Step 8 checks that the defaults created no relationships; if some are listed, select each one and click Delete.
Step 9. Relate the tables.
- In Manage relationships, click New relationship.
- Choose SalesInvoiceLine in From table, and click the SalesInvoiceID column in the preview below it.
- Choose SalesInvoice in To table, and click its SalesInvoiceID column.
- Check that Cardinality reads Many to one (*:1), Cross-filter direction reads Single, and Make this relationship active is selected, and click Save.
- Create two more relationships in the same way: ItemID from SalesInvoiceLine to Item, and CustomerID from SalesInvoice to Customer. Then click Close.
Manage relationships lists the three relationships as active, and the diagram shows them, each with 1 at the table that holds the key and an asterisk at the table that refers to it, as in Figure 13.4. The keys the relationships use, such as ItemID, lose their summation sign: the service sets them not to summarize.
Step 10. Set how the year and the amounts are shown.
- Select FiscalYear in the SalesInvoice table, in the diagram or the Data pane.
- In the Properties pane, under Advanced, set Summarize by to None.
- Do the same for FiscalQuarter.
- Select LineTotal, ListAmount, and DiscountAmount together, holding Ctrl, or one at a time, and under Formatting turn on Thousands separator and check that Decimal places reads 2.
Properties takes the place of Desktop’s Column tools tab: Summarize by with None is Desktop’s Summarization with Don’t summarize. Turning on the separator sets the format to Decimal number with two decimal places, for all three columns at once when they are selected together. Figure C.3 shows the model at this point.
Step 11. Build the Validation page.
- Choose New report on the model editor’s ribbon. The report editor opens in a new browser tab.
- Double-click the tab Page 1, and rename it
Validation. - Select Table in the Visualizations pane, and select the check boxes of FiscalYear, SalesInvoiceLineID, LineTotal, ListAmount, and DiscountAmount in the Data pane.
- In the Columns well, click the arrow beside SalesInvoiceLineID, and choose Count.
- Check that the three amounts read as sums and that the table has one row for each fiscal year.
- Click an empty part of the page, add a second Table, and select ItemGroup and LineTotal.
- Click the Save this report button at the top right, type
Charles River Reportsas the name, keep the workspace of the model, and click Save.
Choosing Count yourself, as Tutorial 13.1 does, keeps the line count from depending on the visual’s default, which can differ from Desktop’s. Every invoice line has its own SalesInvoiceLineID, so the count is the number of invoice lines. Saving puts the report beside the semantic model of the same name and reopens it in Reading view.
Checkpoint. Before you build on the model, confirm the following:
- The model holds four tables joined by three one-to-many relationships whose filters flow toward the invoice lines.
- InvoiceDate is a date, and FiscalYear, Period, and Month read like Tutorial 13.1’s.
- The fiscal 2026 row of the Validation page matches the invoice line count and line total of Chapter 6, and the item group table has no (Blank) row.
A model built in the browser that passes these checks takes the place of Tutorial 13.1’s in the rest of Part IV. Its matching totals are good evidence that it holds the same rows, although equal totals alone could hide changes that offset, as Tutorial 4.1, Step 10 showed.
C.3 Reports in the Browser
A report built in the service opens in Editing view, the report editor, in a browser tab of its own. Once it is saved, it opens in Reading view, the view its readers use, and Edit returns it to the report editor (Microsoft, 2025b). The editor has the panes of Desktop’s Report view: Filters; Visualizations, with Build visual, Format visual, and Analytics; and Data. Its commands sit on a short menu bar and a row of buttons rather than a ribbon. A report is saved in the workspace, beside the semantic model it reads, and several reports can read the same model.
Visuals, wells, slicers, and format settings work as in Desktop, with four differences that Tutorial 13.2’s page runs into. The Card visual can be missing from the list of visuals until you restore the default visuals. A key column that a relationship uses is set not to summarize, so placing it in a visual makes it a category, not a count, until you move it to the value well and choose Count (Distinct). A card’s display units are set card by card. And a line chart whose axis is a text column, such as Month, can arrive sorted by its values rather than by its categories.
C.4 Guided Tutorial C.2: Building the Sales and Discounts Page in the Browser
Context and objective. In this tutorial, you will build Tutorial 13.2’s Sales and Discounts page in the report editor of the service and check it against the Validation page. Tutorial 13.2 explains what each visual shows; this tutorial follows its steps and stops at the four places where the browser differs: the missing card, the invoice count, the display units, and the order of the months.
Prerequisites. You need the Charles River Reports report and semantic model from Guided Tutorial C.1.
Step-by-step instructions.
Step 1. Open the report for editing, and add the page.
- Select My workspace, or the workspace you chose in Guided Tutorial C.1, in the navigation pane, and open the Charles River Reports report, the item whose type is Report.
- Choose Edit on the menu bar to switch from Reading view to Editing view.
- Click the plus sign beside the page tabs, double-click the new tab, and rename it
Sales and Discounts. - Drag the tab to the left of Validation.
Step 2. Add the year slicer.
- Select Slicer in the Visualizations pane, and select FiscalYear in the SalesInvoice table of the Data pane.
- Select Format visual, and under Visual > Slicer settings > Options, set Style to Tile.
- Under Selection, turn on Single select, and click 2026 in the slicer.
A slicer on a number column starts with the style Between, a range with two handles; Tile turns it into the buttons of Tutorial 13.2.
Step 3. Bring back the card visual, if it is missing. The list of visuals in the service can lack the card, which Tutorial 13.2 uses for its four totals.
- Look for Card by name among the visual types of the Visualizations pane. When this appendix was tested, it sat between Gauge and KPI.
- If it is not there, click the … below the visual types, choose Restore default visuals, and click OK.
Restoring the default visuals adds the card to the list, and also an older card and a multi-row card further down. Use the card whose wells are Value, Categories, and Tooltips, the card of Tutorial 13.2. In the test it was the one between Gauge and KPI, but choose it by its name and its wells, because the order of the icons can change.
Step 4. Add the cards.
- Select Card, and select LineTotal, ListAmount, and DiscountAmount in the SalesInvoiceLine table. They go to Value.
- Drag SalesInvoiceID from the SalesInvoiceLine table into Value, below DiscountAmount.
- Click the arrow beside it in the well, and choose Count (Distinct).
- For each of the four fields, click its arrow, choose Rename for this visual, and type
Revenue,At list price,Discounts, andInvoices.
Selecting SalesInvoiceID’s check box instead of dragging it puts it in Categories, because a key that a relationship uses is set not to summarize, and the card then splits into one small card per invoice. Dragged into Value and counted, it gives the number of invoices, from the lines, as Tutorial 13.2 explains.
Step 5. Show the full amounts. The cards show their values abbreviated, in thousands (K) or millions (M), until each card’s display units are set.
- Select Format visual, and expand Visual > Callout.
- Under Apply settings to, set Cards to Revenue.
- Under Value, set Display units to None.
- Repeat the two actions for At list price, Discounts, and Invoices.
When this appendix was tested, Display units appeared under Value only when Apply settings to named one card, not All, which is why the step sets it four times. If your pane offers it for all the cards at once, set it once. The four cards now show fiscal 2026 in full, as the Validation page shows its amounts.
Step 6. Chart the discounts by month, in month order.
- Select Line chart, and select Month and DiscountAmount. Month goes to X-axis and DiscountAmount to Y-axis.
- Read the labels under the axis. If the months are not in order, click the chart’s More options (…) and choose Sort by > Month.
- Open More options again, and choose Sort by > Sort ascending.
- In Format visual > General > Title, replace the text with
Promotional discounts by month.
The chart can arrive sorted by DiscountAmount, largest first, which turns the autumn promotions into a falling line. Sorted by Month, ascending, the line stays near zero through August and rises sharply in September and October, as in Tutorial 13.2. Figure C.4 shows the page at this point, with the commands of Steps 3, 5, and 6.
Step 7. Add the bar chart, the matrix, and the drop-down slicers.
- Add the Clustered bar chart of DiscountAmount by ItemGroup, with its title, as in Tutorial 13.2, Step 4.
- Add the Matrix of LineTotal by ItemGroup and ProductType, with Period on Columns, as in Tutorial 13.2, Step 5.
- Add two Slicer visuals, for CustomerSegment and Region, and set each one’s Style to Dropdown.
These visuals, their wells, and their format settings are the same as in Desktop.
Step 8. Describe the charts for screen readers.
- Select the line chart, and in Format visual > General > Alt text, type a description of what it shows, such as
Promotional discounts by month, fiscal 2026: near zero until a sharp rise in September and October. - Do the same for the bar chart.
Step 9. Explore the page, and save it.
- Click the Furniture bar, and read the cards and the line; click the bar again to clear the selection.
- Click the Save this report button.
The report keeps the name you gave it in Guided Tutorial C.1, so the button saves it without asking.
Checkpoint. Confirm that your page does the following:
- With 2026 selected, the revenue, list amount, and discount cards match the Validation page, and the invoice card shows fewer invoices than the page shows invoice lines.
- The months of the line chart are in order, and the discount line rises sharply in September and October.
- Furniture leads the bar chart, and both charts have alt text.
The report editor of the service built the page of Tutorial 13.2, and Tutorial 13.3’s charts are added to the report the same way.
C.5 Measures in the Browser
The model editor opens a semantic model in Viewing mode, which shows the model without changing it, or in Editing mode, which changes it (Microsoft, 2026b). A model you have just created opens in Editing mode. In Editing mode, every change is saved as you make it, and there is no undo. With a Pro license and permission to edit the model, its version history keeps up to five versions, each with the model’s data, and Microsoft supports restoring a version up to 14 days old (Microsoft, 2025d). The service also captures a version each time you open the model in Editing mode, and the sixth version replaces the oldest, so save the one you need yourself, with a description, just before the change. A version holds the semantic model, not its reports, whose pages are saved with the report editor’s own Save. Before a large change, such as the restructuring of Tutorial 14.1, save a version first.
Measures are written as in Desktop. New measure opens a formula bar above the model’s diagram and adds the measure to the table selected in the Data pane, and the Properties pane holds what Desktop’s Measure tools tab does: the name, the format, the display folder, and whether the measure is hidden. A small table typed by hand, such as the Key Measures table of Tutorial 14.2, is created with Enter data in Power Query Online, which Transform data opens, and its Save button applies the new table to the model. Closing Power Query Online or clicking Cancel discards its changes instead (Microsoft, 2026b). The same Enter data creates the other tables the chapters type by hand: Steps in Tutorial 15.1, Tests and Dispositions in Chapter 16, and Security in the appendix on publishing and security.
DAX query view runs queries as Desktop’s does, from the tab below the model’s diagram. Its query tabs survive as long as you keep the model open, but they are discarded when you close it, so keep the tests you write in the chapters, such as the Tests tab of Tutorial 14.2, in a text file with the results they gave, and paste them back when you need them (Microsoft, 2025a).
C.6 Guided Tutorial C.3: Adding a Measures Table and a First Measure
Context and objective. In this tutorial, you will give the model of Guided Tutorial C.1 a table of its own for measures, write a first measure in the model editor, and test it with a DAX query. Chapter 14 teaches measures and DAX; this tutorial shows only where the browser keeps the commands, so that you can follow Tutorial 14.2 and the chapters after it.
Prerequisites. You need the Charles River Reports semantic model and report from Guided Tutorials C.1 and C.2, and a text editor for the test. With a Pro license, first choose File > Save to version history in the model editor, so that you can return to the model as it is now.
Step-by-step instructions.
Step 1. Open the model for editing.
- In My workspace, or the workspace you chose in Guided Tutorial C.1, open the Charles River Reports semantic model, the item whose type is Semantic model.
- If the menu at the top right reads Viewing, open it and choose Editing.
Step 2. Create the Key Measures table with Enter data. Tutorial 14.2 keeps its measures in a table named Key Measures, typed with Enter data; in the browser, Enter data is in Power Query Online.
- Choose Transform data on the model editor’s ribbon.
- In Power Query Online, choose Home > Enter data.
- In the Create table dialog, leave the grid as it is, type
Key Measuresin Name, and click OK. - Click Save at the bottom right to apply the change to the model.
The dialog is Desktop’s Enter data, with the same grid and the same one empty column, Column1. After a few seconds, Power Query closes and Key Measures appears in the Data pane. The other tables the chapters type by hand, such as the Steps table of Tutorial 15.1, are created the same way. When this appendix was tested, the settings icon of such a table’s Source step reopened Create table, but the test saved no change through it, so after you change a table that way, check that the change reached the model.
Step 3. Write the measure.
- Select Key Measures in the Data pane, and choose New measure on the ribbon.
- In the formula bar that opens above the diagram, replace the text with
Revenue = SUM ( SalesInvoiceLine[LineTotal] ), and press Enter. - In the Properties pane, under Formatting, turn on Thousands separator.
New measure adds the measure to the table selected in the Data pane, so selecting Key Measures first puts Revenue there. Properties holds what Desktop’s Measure tools tab does, including Display folder and Is hidden.
Step 4. Hide Column1.
- Select Column1 in the Key Measures table.
- In the Properties pane, turn on Is hidden.
With its only column hidden, Key Measures moves to the top of the Data pane, as it does in Desktop, where a table that holds only measures is easy to find.
Step 5. Test the measure in DAX query view, and keep the test.
- Select DAX query view at the bottom of the model editor.
- Replace the sample query with the query below, and click Run.
- Copy the query into a text file named
Tests.dax, and save the file with your work.
EVALUATE
SUMMARIZECOLUMNS (
SalesInvoice[FiscalYear],
"Revenue", ROUND ( [Revenue], 2 )
)
ORDER BY SalesInvoice[FiscalYear]
The Results grid shows one row for each fiscal year, and the status below it reports the number of columns and rows. The banner above the editor says that DAX queries are discarded on close, which is why the test goes in Tests.dax. Figure C.5 shows the query and its result.
Checkpoint. Confirm the following before you go on to Chapter 14:
- Key Measures is at the top of the Data pane, with Revenue inside it and Column1 hidden.
- The query’s revenue for each fiscal year equals the Validation page’s line total for that year.
- Tests.dax holds the query.
A measure written in the browser is the same measure as one written in Desktop, and the model now has the place Tutorial 14.2 keeps its measures in.
C.7 Following Part IV in the Browser
With the three tutorials done, you can follow the rest of Part IV in the browser, in the same Charles River Reports model and report. Guided Tutorials C.1 and C.2 take the place of Tutorials 13.1 and 13.2, so read those two for their explanations and try Tutorial 13.2’s Steps 7 and 8 on your page. Then do Tutorial 13.3 in your report, because Tutorial 14.1 changes the Review page it builds. Where a later tutorial starts from a companion file, start instead from your own model and report as they stood at the end of the tutorial before it. A companion file is a start file for Desktop, which the service cannot open, so if you join the course midway in the browser, build the earlier tutorials first.
Your model already holds part of what Chapter 14 builds. Tutorial 14.2 creates the Key Measures table and the Revenue measure, which Guided Tutorial C.3 made, and the List Amount, Discounts, and Invoice Lines measures, which Exercise C.1 adds. Keep the ones you have, check that their formulas match Tutorial 14.2’s, and add only the measures that are missing. Tutorial 14.1 stops loading SalesInvoice, so the queries in Tests.dax that group by its FiscalYear or Period stop running. Keep them, with the results they gave, as the record of the model before the change. Their new versions use the Date table’s Year, YearQuarter, and YearMonth in place of FiscalYear, Period, and Month, as Table 14.2 lists, and Tutorial 14.2’s Test 1 takes the place of the test of Guided Tutorial C.3.
Chapter 16 starts a second semantic model, Audit Monitoring, which internal audit keeps apart from Charles River Reports. Create it as in Guided Tutorial C.1, but under Connection settings keep Link to file, click Browse OneDrive…, and pick the copy you uploaded, as the second item below describes, so that the workbook is not uploaded again. Keep its tests in a text file of their own. Five more differences recur:
- The workbook stores nearly all of its dates as Excel dates, which can arrive as numbers, as InvoiceDate did in Guided Tutorial C.1. Look at the type icon of each date column you load, not only at its values. Set a column of whole numbers to Date, or to Date/Time where its time matters, such as JournalEntry’s CreatedDate in Chapter 16, and leave a column already typed Date, such as Customer’s CustomerSince, as it is.
- Tables added later, such as the ledger of Tutorial 14.3, come in through Transform data. In Power Query Online, choose Home > Get data > Excel workbook, keep Link to file, click Browse OneDrive…, and pick the copy you uploaded, which is in My files > Apps > Microsoft Power Query > Uploaded Files. Click Next, select the new Tables in Choose data, click Create, and click Save to add them to the model. Recent data offers only the Tables the model already reads.
- A step that reads Table view’s row count reads a DAX query instead, such as
EVALUATE ROW ( "Rows", COUNTROWS ( 'Date' ) ), which returns one number however many rows the table has. - Guided Tutorial B.1 defines its roles with Manage roles in the model editor, which has no View as (Microsoft, 2026b). The browser does not offer Desktop’s Other user, which plays the fictional Charles River addresses of that tutorial. Test as role, in the semantic model’s security settings in the workspace, can show a role or a person of your organization, but it evaluates dynamic rules with your own identity (Microsoft, 2026d). So read the Who Am I card each time, and record the identity it shows. With the security table unchanged, the table does not map you, and you should see none of the protected rows. Read Tutorial B.1’s checks as the Sales, Warehouse, and Production managers, or watch your instructor demonstrate them, unless your instructor supplies an exercise with real sign-in names that has been tested. A blank result shows that the rules deny that identity. It does not show what any manager sees.
- Guided Tutorial B.2 needs the model and its report in a shared workspace in which you are an Admin, preferably an exercise workspace that your institution approves, which is why Guided Tutorial C.1, Step 7 lets you choose one. With the model there, skip Publish, read Steps 1 and 4, which change the security table in Desktop, and do the rest. Step 3’s test then shows no cost center on the Budget page, with your own name on the Who Am I card, because the table does not map you, and you remove only the role members it adds, as Step 4 describes. With the model in My workspace, read Steps 1 to 4 and do Step 5, as that tutorial’s prerequisites allow.
Table C.2 gives the browser’s names for the commands of the Power BI chapters that differ from Desktop’s.
| In Power BI Desktop | In the browser |
|---|---|
| Home > Get data > Excel workbook, then the Navigator | Create > Get Data > Excel workbook > Upload file, then Choose data |
| The Removed Other Columns step | The Choose columns step |
| View > Column quality, Column distribution | View > Data view > Enable column profile, then its options |
| Home > Close & Apply | Create a semantic model only, the first time; Save, later |
| File > Options and settings > Options | File > Options, in the model editor |
| Table view | DAX query view, or a table visual |
| Column tools > Summarization > Don’t summarize | Properties > Advanced > Summarize by > None |
| Column tools > Sort by column | Properties > Advanced > Sort by column |
| Table tools > Mark as date table | Right-click the table > Mark as date table |
| Home > Enter data | Transform data > Home > Enter data |
| Card > Callout values > Display units | Card > Callout > Value > Display units, card by card |
| Format > Edit interactions | The visual interactions button > Edit interactions |
| Insert > Buttons > Navigator > Page navigator | Buttons > Navigator > Page navigator |
| Design > Themes | View > Theme |
| Optimize > Performance analyzer | View > Performance analyzer |
| Modeling > View as | Test as role in the semantic model’s security settings, whose identity behavior differs from Desktop’s Other user, as explained above |
| File > Save | Saved as you work in the model editor, and Save in Power Query Online and in the report editor |
C.8 Key Terms
Excel date. A date stored in a workbook as a number, a count of days, which Excel displays as a date because of the cell’s format. In the 1900 date system of CharlesRiver.xlsx, 1 is January 1, 1900. A program that reads the workbook can receive the number instead of the date, as Power Query Online did in Guided Tutorial C.1, so a date column’s type is checked as well as its values.
Model editor. The part of the Power BI service that opens a semantic model in a browser to view it or, in Editing mode, to change it: its relationships, measures, calculated tables, properties, and roles. Changes made in Editing mode are saved as they are made, with no undo.
My workspace. A user’s personal area in the Power BI service, where even a free license can create semantic models and reports for the user’s own use. Sharing its content with others needs a paid license, such as Pro.
Power BI service. The website at app.powerbi.com where Power BI reports are published, shared, and read in a browser, and where dashboards are built. It also builds semantic models with Power Query Online and edits them in the model editor, so much of the work of Power BI Desktop can be done in a browser, with some commands in other places and a few features missing.
Power Query Online. The browser version of the Power Query Editor, used by the Power BI service and other Microsoft services to get and shape data. It offers the transformations of the editor in Excel and Power BI Desktop, though its connectors, its sign-in, and some of its commands and step names differ.
Tenant setting. A setting that an organization’s Power BI administrator controls for all its users or for some of them, such as whether users can edit semantic models in the browser. A feature turned off in the tenant settings is unavailable whatever the user’s license.
Version history. The last few saved versions of a semantic model edited in the Power BI service, each of which can be restored. It needs a Pro license and permission to edit the model, keeps up to five versions with their data, supports restoring a version only up to 14 days old, and is not a substitute for version control.
C.9 Multiple Choice Questions
1. Why does Guided Tutorial C.1 upload CharlesRiver.xlsx instead of reading it from a folder on your computer, as Tutorial 13.1 does?
- The service cannot read the Tables of a workbook, only the worksheets that hold them
- Uploading converts the workbook into CSV files, which the service loads faster than Excel
- Power Query Online reads the workbook from a copy in your OneDrive for work or school
- Uploading turns off the detection of column types from the first rows of each Table
2. In Power Query Online, the InvoiceDate column of SalesInvoice shows five-digit numbers. What explains it, and what should you do?
- Excel stores dates as day counts that Power Query Online reads as numbers, so set the type to Date
- The upload damaged the workbook’s dates, so upload the file again under another name
- The column holds document numbers that were placed under the wrong heading, so remove it with Choose columns
- Power Query Online shows every date as a number until the model is created, so leave it as it is
3. You want Tutorial 13.2’s cards, but the Visualizations pane of the report editor has no Card. What should you do?
- Build the four totals with a table visual, because the service has no card visual
- Switch the report from Editing view to Reading view, where the card appears
- Open the semantic model in Editing mode and add the card there
- Click the … below the visual types and choose Restore default visuals
4. You close a model in the browser, and the DAX query tab that held your tests is gone when you open the model again. What explains it?
- The query had an error, so the service removed its tab when the model was closed
- DAX query view in the browser discards its tabs on close, so the tests belong in a text file
- The model was open in Viewing mode, where query tabs are never saved with the model
- The report that reads the model was saved after the query was written, which cleared its tabs
5. With a card selected, you select the check box of SalesInvoiceID in the SalesInvoiceLine table, and the card splits into thousands of small cards. Why?
- The card visual shows one card for each row of any table that it reads, however many rows it has
- A key that a relationship uses is set not to summarize, so it went to Categories, not to Value
- SalesInvoiceID is a text column, which a card cannot count, so it splits the values instead
- The year slicer was not set to Single select, so the card repeats once for every fiscal year
6. A line chart of discounts by month falls steadily from left to right, and its axis reads 2026-10, 2026-09, 2026-11, and so on. What happened?
- The promotions really did decline across the year, and the chart shows that decline
- The Month column is text, which a line chart cannot put in time order by itself
- The chart lost its date table when the report was saved in the report editor
- The chart is sorted by its values, so sort it by Month, ascending, in More options
7. You add a table with Enter data in Power Query Online, opened from the model editor’s Transform data. What applies the new table to the model?
- Home > Close & Apply, as in Power BI Desktop
- Refresh on the model editor’s ribbon
- Save, at the bottom right of Power Query Online
- Create a semantic model only, from the arrow beside Create a report
8. Guided Tutorial C.1 sets the type of Discount by hand, as Tutorial 13.1 does. Why is that still needed in Power Query Online?
- With automatic type detection enabled, it types a column from its first 200 rows, where Discount is zero
- The browser rounds every decimal column to two places when it loads the Table, unless the column is typed first
- Power Query Online reads every number in a workbook as text until the column is given a type by hand
- The Key Measures table needs a decimal column for every rate that a measure will use later on
C.10 Applied Exercises
Work on the exercises in the Charles River Reports semantic model and report you built in the browser, after Guided Tutorial C.3 and before Tutorial 14.1, which removes the SalesInvoice fields they use. Build the visuals an exercise asks for on a report page named after it (such as Ex C.2), and keep each query you write in your Tests.dax file, under a comment line that names the exercise. Write each result in a comment below its query, so that the file still runs, with the date and time zone of the run, the workspace and model, the dataset release (v2027.1), and any filters. When you run a query again after a change, keep the first result and add the new one below it.
C.10.1 Financial Accounting Exercises
Exercise C.1: Control Totals by Quarter
Table group: Order-to-Cash
Scenario. Before anyone reads the report built in the browser, the controller wants its totals proved by quarter, in a query that does not depend on any page.
Requirements.
In the model editor, add three measures to Key Measures:
List AmountandDiscounts, which sum ListAmount and DiscountAmount, andInvoice Lines, which counts the rows of SalesInvoiceLine with COUNTROWS. Format the two amounts with a thousands separator and two decimal places.In DAX query view, write a query that returns, for each FiscalYear and Period of SalesInvoice, the invoice lines, revenue, list amount, and discounts, with the amounts rounded to the cent. Run it, and record the four rows of fiscal 2026.
Add up the four quarters of fiscal 2026, and compare the sums with the fiscal 2026 row of the Validation page. Record any difference, and explain it.
Say which quarter of fiscal 2026 carries the largest share of the year’s discounts, give the share, and name the promotions behind it. Use Chapter 6 and Exercise 13.3, or your instructor’s lookup of PromotionID and PromotionName, to name the promotions. You do not need to load another table for the required answer, and adding T7_PromotionProgram and checking its relationship is an optional extension.
Explain why a test kept as a query in Tests.dax remains evidence after someone changes the report’s pages, and why in the browser it must be kept outside DAX query view.
Deliverable. Tests.dax with the query and its fiscal 2026 rows, and short answers to requirements (3) to (5).
C.10.2 Managerial Accounting Exercises
Exercise C.2: Which Customers Got the Discounts, and When
Table group: Order-to-Cash
Scenario. The sales manager, who works on a Mac, wants to see which customer segments received the promotions’ discounts, and in which months, before planning next year’s calendar.
Requirements.
Use the Discounts measure of Exercise C.1, or create it in Key Measures if you have not done that exercise, with a thousands separator and two decimal places.
On a page
Ex C.2, add a year slicer as tiles set to fiscal 2026 and a matrix of Discounts with CustomerSegment on Rows and Month on Columns.Add a line chart of Discounts by Month with CustomerSegment in Legend, and check that its months are in order.
Name the segment whose discounts peak in November, and the promotion that explains it. Name the months in which the other segments’ discounts peak, and the promotion behind them. Use Chapter 6 and Exercise 13.3, or your instructor’s lookup of PromotionID and PromotionName, to name the promotions. You do not need to load another table for the required answer, and adding T7_PromotionProgram and checking its relationship is an optional extension.
Say which segment received no discounts at all, and in two sentences what the pattern means for a promotion calendar aimed at one segment.
Title the line chart
Promotional discounts by customer segment fiscal 2026, and add alt text that describes the comparison between the segments and says which segment received no discounts. Choose Save this report, reopen the pageEx C.2in Reading view, and confirm that fiscal 2026 is still selected, that the matrix has a row for each customer segment and a column for each month of the year, and that the chart runs from January to December 2026.
Deliverable. The saved page, a readable screenshot of it or its matrix copied into a table, in the place your instructor approves, and the answers to requirements (4) and (5).
C.10.3 Auditing Exercises
Exercise C.3: A Change, Recorded and Restored
Table group: Order-to-Cash
Scenario. Internal audit wants evidence that the model built in the browser can be returned to a known state after a mistake. The exercise needs a Pro license, because version history does, and a model that only you are editing. Do requirements (1) to (4) in one sitting. Without a Pro license, take the manual route. In place of requirement (1), copy the Revenue formula, the model’s name, and its workspace into Tests.dax, and do requirements (2) and (3). In place of requirement (4), retype the recorded formula, run the test a third time, and label the method manual repair. In requirement (5), say that you repaired the formula by hand, and still explain what version history records and what it does not.
Requirements.
In the model editor, choose File > Save to version history, with the description
Before Exercise C.3.Run the test of Guided Tutorial C.3 from Tests.dax, and record its fiscal 2026 revenue.
Change the Revenue measure to sum ListAmount instead of LineTotal, run the test again, and record what changed.
Choose File > Version history, restore the version of requirement (1), and run the test a third time.
Write a change log entry: what changed, when, the test results before and after, and how the model was restored. Explain what version history records and what it does not, compared with the Power BI project under version control of Chapter 16.
Deliverable. The three test results and the change log entry.
C.11 References
Microsoft. (2025a). DAX query view. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/transform-model/dax-query-view
Microsoft. (2025b). Tour the Power BI report editor. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/create-reports/service-the-report-editor-take-a-tour
Microsoft. (2025c). Upload a file in Power Query Online. Microsoft Learn. https://learn.microsoft.com/en-us/power-query/upload-file
Microsoft. (2025d). Use semantic model version history. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/transform-model/service-semantic-model-version-history
Microsoft. (2025e). Using the data profiling tools. Microsoft Learn. https://learn.microsoft.com/en-us/power-query/data-profiling-tools
Microsoft. (2026a). Data types in Power Query. Microsoft Learn. https://learn.microsoft.com/en-us/power-query/data-types
Microsoft. (2026b). Edit semantic models in the Power BI service. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/transform-model/service-edit-data-models
Microsoft. (2026c). Power BI features available to free users. Microsoft Learn. https://learn.microsoft.com/en-us/power-bi/fundamentals/end-user-features
Microsoft. (2026d). Row-level security (RLS) with Power BI. Microsoft Learn. https://learn.microsoft.com/en-us/fabric/security/service-admin-row-level-security
Microsoft. (2026e). Tenant settings for semantic models. Microsoft Learn. https://learn.microsoft.com/en-us/fabric/admin/service-admin-portal-data-model