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
Entering Code
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.
Copilot
Might not work in the Skillable labs, due to licensing settings with the Fabric trial capacity.
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 theCOLLATE 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.
Once you have created the visual query, Note that you can view the T-SQL code as well as save it as a view.
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: Editing the realtime dashboard is a little different than described in the instructions.
The lab instructions say "Now you have a live visualization", but you don't, because we haven't set the live refresh. :-)
On the Manage menu, select Refresh settings, select Live refresh. Select Settings to change the refresh time. Select Apply.
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.
Error: The type text tool in Skillable messes up the DAX formulas by putting an enter after the equals sign, not a ctrl+enter. Use the copy tool, not the type text tool. Alternatively, use the text snippets file inside the VM, or type the expressions by hand.
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
UI drift: To open a notebook from the Lakehouse pane, click on the "Analyze data with" link at the top right.
I hope you like seeing 'Working on it" and a little green circle… :-)
Delivery Hint: Start the lab early. You need to wait 5+ minutes after running the notebook that creates the tables. See github issue.
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
Update Power BI in the Skillable virtual machine.
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.
Note that changes to permissions take a while to actually happen. I've seen changes take as little as a few minutes, I've also seen them take over an hour. The Fabric UI says to allow up to 2 hours for changes to take effect. :-(
Govern analytics data in Microsoft Fabric
(19b-govern-analytics-data.md) - DP-600 lab 17
I don't know why the lab instructs you to open the SQL Endpoint before creating the Semantic Model. Perhaps it is to force a refresh of the list of tables?
I also don't know what breadcrumb trail they are talking about. UI drift, perhaps? There is a lot of it in this lab (even in the 3 months since it was last updated the Settings pages have changed).
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
Delivery Hint: Use this as an IL lab to pretty much teach the module. :-)
Design and implement a dimensional model
(26-design-dimensional-models.md) - DP-600 lab 5
Nice.
Transform data using dataflows in Microsoft Fabric
(26b-transform-data-dataflows.md) - DP-600 lab 6
Note that query folding is not available with a text data source.
https://learn.microsoft.com/en-us/power-query/step-folding-indicators
Transform data with notebooks in Microsoft Fabric
(26c-transform-data-notebooks.md) - DP-600 lab 7
Delivery Hint: Use this as an IL lab to pretty much teach the module. :-)
Note that Spark SQL and T-SQL are different. In particular TOP vs LIMIT.
Transform data with T-SQL in a Fabric warehouse
(26d-transform-data-tsql.md) - DP-600 lab 8
Note that Spark SQL and T-SQL are different. In particular TOP vs LIMIT.
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
Update Power BI in the Skillable virtual machine.