The Microsoft Fabric labs in Github are used by multiple courses, including DP-600 and DP-700. I've put my notes on the labs in this blog post rather than in the posts on those courses.
Lab Hints
Use the T symbol to send text into Notepad, then copy and paste from there into the various tools. Seriously. If you don't do this, autocorrect will mess your lab up.
General Notes
Links
https://github.com/MicrosoftLearning/mslearn-fabric
Note that DP-600 and DP-700 use different names for the labs. The names below are the names used in the Github source.
Gotchas
The New SQL Query button does not put the focus in the editor.
Case-sensitivity
New warehouses and all SQL analytics endpoints are configured based on the workspace's Data Warehouse default collation setting, which by default is the case-sensitive collation Latin1_General_100_BIN2_UTF8.
https://learn.microsoft.com/en-us/fabric/data-warehouse/collation
Lakehouses are always case-sensitive (boooooo!). You can use the COLLATE option in T-SQL queries for case-insensitive comparisons.
SQL Coding Style
The coding style in the labs is generally good (especially the "SELECT 1" in the SQL EXISTS subquery!) though I would like to see more use of the AS keyword.
However, using a "v" prefix in a SQL view (for example "vSalesByRegion") is poor practice. This naming convention is technically called Systems Hungarian and scornfully called "tibbling".
Python Coding Style
The lab authors almost always use backslashes to span Python code across multiple lines. The Python community generally recommends using parens.
https://stackoverflow.com/questions/53162/how-can-i-do-a-line-break-line-continuation-in-python-split-up-a-long-line-of
Imports
It seems to be a rule for the lab authors that every notebook cell has to import its own libraries. The worst of this is lab 6 where there are over 20 instances of from delta.tables import *. You do not have to do this - once a library is imported in one cell in a Spark session, it is available to all the code running in that session.
Labs
Create a Microsoft Fabric Lakehouse
(01-lakehouse.md) - DP-600 lab 2, DP-601 lab 1, DP-700 lab 1
A very straightforward lab. You might spend longer on the capcha than on the lab itself. :-)
Analyze data with Apache Spark in Fabric
(02-analyze-spark.md) - DP-601 lab 2, DP-700 lab 2
Delivery hint: IL.
df.show(10) prints the first 10 rows to the console.
df.head(10) returns the first 10 rows as an array or list (it is an action).
df.limit(10) returns the first 10 rows as a new dataframe (it is a transformation). We usually use something like display(df.limit(10)).
Note that in Spark SQL you use backticks around identifiers containing nonstandard characters, not square brackets as in T-SQL.
"SELECT * FROM `lab 4 lh`.salesorders LIMIT 1000"
instead of
"SELECT * FROM [lab 4 lh].salesorders LIMIT 1000"
Use Delta Tables in Apache Spark
(03-delta-lake.md) - DP-601 lab 3, DP-700 lab 3
Delivery hint: Suggest IL.
Lab Hint: Open the SQL Endpoint of the Lakehouse in a separate browser tab and use it to query the tables and views.
If the workspace name dp_workspace is already taken then use a different one, and edit the notebook cell with the new name (in the "Analyze Delta table data with SQL queries" section).
Click Saved∨ to rename the notebook.
Create a medallion architecture in a Microsoft Fabric lakehouse
(03b-medallion-lakehouse.md) - DP-700 lab 6
Personal comment: Click here to get the lab to enter code. Repeat ad nauseum. Wooo.
Personal comment: The naming conventions in this code make my head hurt. Prefix, postfix, underscores, no underscores, lowercase, camelCase, PascalCase, arrgghh make up your mind!
Ingest data with a pipeline in Microsoft Fabric
(04-ingest-pipeline.md) - DP-601 lab 4, DP-700 lab 5
Hint: Make sure you add a Copy Data activity; not a Copy Job activity.
Additional Lab Steps: ("Configuring the Source" section) Add a new Http data source.
Make sure you enter a new unique connection name. Don't just accept the default (the URL) otherwise you will get a "Connection name already exists" or "Name is too long" error.
Rant: Why do I have to save pipelines manually when notebooks autosave?
Create and use Dataflows (Gen2) in Microsoft Fabric
(05-dataflows-gen2.md) - DP-601 lab 5, DP-700 lab 4
Make sure you enter a new unique connection name. Don't just accept the default (the URL) otherwise you will get a "Connection name already exists" or "Name is too long" error.
You will need to remove the default destination (bottom right-hand corner of the screen) before you can add a custom one.
Analyze data in a data warehouse
(06-data-warehouse.md) - DP-600 lab 3, DP-602 lab 1, DP-700 lab 12
Straightforward.
Delivery Hint: SSMS is installed. Use it to connect to the endpoint.
Delivery Hint: I can demo the last part in my work Fabric environment.
Load data into a warehouse using T-SQL
(06a-data-warehouse-load.md) - DP-602 lab 2, DP-700 lab 13
Straightforward.
Query a data warehouse in Microsoft Fabric
(06b-data-warehouse-query.md) - DP-602 lab 3
Straightforward, with a couple of gotchas.
The Sample Warehouse (NYC taxi data) is case-sensitive.
The columns in the Date dimension table are all varchar! I tried an ORDER BY Month and did not get the results I was expecting. This has to be a mistake, surely? The whole point of Month and MonthName columns is to get sorting and displaying correct.
Update: Since I wrote that comment, the sample data has been modified slightly. The Month column is still a varchar, but it contains "01" instead of "1". Better, I guess, but still not great.
One of the queries included WHERE D.Month = 1, which requires a CONVERT_IMPLICIT in the execution plan. I tried WHERE D.Month = '01' and the query executed in 1/3 the time! I suggested this to the lab authors and the change has been made.
Monitor a data warehouse in Microsoft Fabric
(06c-monitor-data-warehouse.md) - DP-602 lab 4, DP-700 lab 14
A very simple lab. Run a few queries, look at the output.
Note the "Results:1" dropdown in the results pane when the results consists of more than one recordset.
Secure data in a data warehouse
(06d-secure-data-warehouse.md) - DP-602 lab 5, DP-700 lab 15
This lab sets up security features, but doesn't use any of them. Given Microsoft Fabric's reliance on Microsoft Entra identities, the ALH doesn't have the capability to create/use different users in this lab.
However, see the lab "Secure data access in Microsoft Fabric" below.
Delivery hint: I have db.Customers, the data masking demo, set up in @cbmct.kiwi fabric, using Craig (admin) and Lamont (viewer). Same for dbo.Sales, the RLS demo, using Auckland and Wellington.
Get started with Real-Time Intelligence in Microsoft Fabric
(07-real-time-Intelligence.md) - DP-600 lab 4, DP-700 lab 7
UI Drift: The Real-Time Hub has changed since the lab instructions were written, as has the Stocks sample application. Lab update TBA.
Get started with data science in Microsoft Fabric
(08-data-science-get-started.md)
Explore data for data science with notebooks in Microsoft Fabric
(08a-data-science-explore-data.md)
Preprocess data with Data Wrangler in Microsoft Fabric
(08b-data-science-preprocess-data-wrangler.md)
Train and track machine learning models with MLflow in Microsoft Fabric
(08c-data-science-train.md)
Generate batch predictions using a deployed model in Microsoft Fabric
(08d-data-science-batch.md)
Ingest real-time data with Eventstream in Microsoft Fabric
(09-real-time-analytics-eventstream.md) - DP-700 lab 8
A quick lab that nicely illustrates a lot of concepts.
Ingest data with Spark and Microsoft Fabric notebooks
(10-ingest-notebooks.md)
(10-ingest-notebooks.md)
Use Activator in Fabric
(11-data-activator.md) - DP-700 Lab 11
I saw hardly any Redmond messages. Maybe choose more locations, or miss out the location filter entirely?
Work with data in a Microsoft Fabric eventhouse
(12-query-data-in-kql-database.md) - DP-700 lab 9
Delivery hint: IL.
Another "click here to run code" lab, but with useful code and examples. Worth doing.
Get started with Real-Time Dashboards in Microsoft Fabric
(13-real-time-dashboards.md) - DP-700 Lab 10
Another quick lab that nicely illustrates a lot of concepts. It builds nicely on 09-real-time-analytics-eventstream.
Create and explore a semantic model
(14-create-a-star-schema-model.md)
(14-create-a-star-schema-model.md)
Create DAX calculations in Power BI Desktop
(14-create-dax-calculations.md) - DP-600 lab 9
A nice lab.
This lab does not use Microsoft Fabric, or any other cloud resource, just Power BI Desktop.
Note tab-completion.
Design scalable semantic models
(15-design-scalable-semantic-models.md)
Another nice lab. Some parts might need to be IL.
This lab does not use Microsoft Fabric, or any other cloud resource, just Power BI Desktop.
Design a semantic model for scale
(15-design-semantic-model-scale.md) - DP-600 lab 10
Create reusable Power BI assets
(16-create-reusable-power-bi-assets.md)
Note that if you modify a template, no changes are made to existing reports. There is no "linking" between a report and a template like there is for styles in Microsoft Word templates. Creating an item from a template is a one-time load. As is using Import Theme.
Optimize semantic model performance
(16-optimize-semantic-model-performance.md) - DP-600 lab 11
Use tools to optimize Power BI performance
(16-use-tools-to-optimize-power-bi-performance.md)
(16-use-tools-to-optimize-power-bi-performance.md)
Enforce semantic model security
(17-enforce-model-security.md) - DP-600 lab 12
Note that the colours of the visualisations persist (light blue for Australia, dark blue for Canada, and so on).
As above, the ALH doesn't have the capability to create/use different users in this lab.
Monitor Fabric activity in the monitoring hub
(18-monitor-hub.md) - DP-700 lab 17
Secure data access in Microsoft Fabric
(19-secure-data-access.md) - DP-600 lab 16, DP-700 lab 18
A nice lab.
In the Apply item access control section, it takes a few minutes for the "You can no longer browse workspaces on the left navigation pane to find the warehouse." to apply. For that couple of minutes I could use the Workspaces item to see the workspace, but I could only see the Warehouse in the list of resources. Refreshing the web browser after a few minutes removed the workspace entirely from user-2's view, leaving OneLake Catalog the only way to see the warehouse.
Govern analytics data in Microsoft Fabric
(19b-govern-analytics-data.md) - DP-600 lab 17
Work with SQL Database in Microsoft Fabric
(20-work-with-database.md)
Work with API for GraphQL in Microsoft Fabric
(20a-work-with-graphql.md)
Implement deployment pipelines in Microsoft Fabric
(21-implement-cicd.md) - DP-700 lab 16
Manage the semantic model lifecycle
(21b-manage-semantic-model-lifecycle.md) - DP-600 lab 13
Work smarter with Copilot in Microsoft Fabric Dataflow Ge
(22a-copilot-fabric-dataflow-gen2.md)
Analyze data with Apache Spark and Copilot in Microsoft Fabric notebooks
(22b-copilot-fabric-notebooks.md)
Use Copilot in Microsoft Fabric data warehouse
(22c-copilot-fabric-data-warehouse.md)
Chat with your data using Microsoft Fabric data agents
(22d-copilot-fabric-data-agents.md)
Create an ontology with Fabric IQ
(23-build-ontology-manually.md)
Build an ontology from a semantic model in Fabric IQ
(24-build-ontology-semantic-model.md) - DP-600 lab 15
Discover and connect to data in OneLake
(25-discover-onelake.md) - DP-600 lab 1
Design and implement a dimensional model
(26-design-dimensional-models.md) - DP-600 lab 5
Transform data using dataflows in Microsoft Fabric
(26b-transform-data-dataflows.md) - DP-600 lab 6
Transform data with notebooks in Microsoft Fabric
(26c-transform-data-notebooks.md) - DP-600 lab 7
Transform data with T-SQL in a Fabric warehouse
(26d-transform-data-tsql.md) - DP-600 lab 8
Visualize ontology data with Microsoft Fabric IQ
(27-visualize-ontology.md)
Build a Fabric data agent with an ontology
(28-build-data-agent-ontology.md)
Prepare a semantic model for AI
(30-prepare-model-ai.md) - DP-600 lab 14