Learn (Preview)
Learn is at the bottom of the left rail, above Source control and Settings. It has short lessons, practice labs and the best-practice rules the app checks. Everything runs on this PC with data generated here. A lesson or lab never reads or writes OneLake, never starts a Fabric job and never publishes anything to Fabric.
The tabs#
| Tab | What it shows |
|---|---|
| Home | The lesson to continue (the one you opened last, or the first one) and the practice labs |
| Paths | Lessons grouped by subject: Data Fundamentals, SQL Development, Python & Data Engineering, Microsoft Fabric, Databricks, Snowflake and Enterprise Architecture |
| Labs | The practice labs: a task, a lab with generated data, and checks that say when it's done |
| Best practices | Every notebook and SQL rule, each with About to its explanation, example and when it's safe to leave |
A lesson marked Draft is still being written and may change.
A lesson or lab#
Opening one shows its lesson on the left and Checks on the right.
- Start the lab makes the lab's data on this PC: generated tables, the same every time, with known problems planted for some labs to find. Nothing is downloaded.
- Write SQL in the box. Run (or Ctrl+Enter) shows the first 200 rows. Every run is undone afterwards, so the lab's data stays as it was whatever you run.
- Check my answer runs the exercise's checks and says what each one found: the same result as the reference, no best-practice findings, faster than the starting query, and so on.
- Show a hint gives one hint at a time, from a nudge to nearly the answer.
A run or a check stops after 30 seconds, and a lab can use up to 1 GB of memory, so a runaway query can't hold up the app or the PC.
Speed checks are measured on this PC only. A Fabric Warehouse or SQL analytics endpoint plans and runs the same query differently.
Reset lab deletes the lab's folder on this PC, your answers included, and makes it again. It asks first. Leave goes back to Learn and keeps your answers.
Guidance#
Learning guidance, at the top right of Learn and in Settings > Appearance > Layout > Learning guidance, sets how much the app suggests lessons. You can change it at any time; an organization policy can set it, and then it can't be changed here.
| Mode | What it adds |
|---|---|
| Focus (the default) | Nothing: a best-practice finding shows its rule and About link |
| Guided | Lesson: </strong> beside a notebook or SQL finding whose rule a published lesson covers. It opens that lesson. Draft lessons are linked only from Learn</td> </tr> <tr> <td>Learning</td> <td>Guided, and <strong>Suggested next</strong> on Learn Home: the next lesson you haven't started, in path order</td> </tr> </tbody></table> <p>The checks themselves run the same in every mode; guidance only adds links. Guidance shows only while <strong>Show preview features</strong> is on.</p> <h2 id="what-is-stored">What is stored<a class="heading-anchor" href="#what-is-stored" aria-label="Link to What is stored">#</a></h2><p>A started lab is a folder under this PC's KratosForge data: <code>learn/<id>/</code> holds the lab's DuckDB database, <code>lab.json</code> (which data was generated, and the lesson's version) and <code>answers/</code>, your SQL for each exercise. Nothing is sent anywhere. The lab's database is opened with file and network access turned off.</p> <p>Lessons ship with the app. <a href="/docs/learn/writing-lessons/">Writing a Learn lesson</a> is for people who write or review them.</p> <h2 id="engine-methods">Engine methods<a class="heading-anchor" href="#engine-methods" aria-label="Link to Engine methods">#</a></h2><table> <thead> <tr> <th>Method</th> <th>What it does</th> <th>Changes</th> </tr> </thead> <tbody><tr> <td><code>learn_catalog()</code></td> <td>Every path and lesson, and whether its lab is started on this PC</td> <td>Nothing</td> </tr> <tr> <td><code>learn_module(module_id)</code></td> <td>One lesson: its text, exercises (never the solution) and its lab's state</td> <td>Nothing</td> </tr> <tr> <td><code>learn_lab_start(module_id)</code></td> <td>Makes the lab if it isn't there</td> <td>The lab's folder</td> </tr> <tr> <td><code>learn_lab_save(module_id, exercise_id, text)</code></td> <td>Saves your SQL for an exercise</td> <td>The answer file</td> </tr> <tr> <td><code>learn_lab_run(module_id, sql)</code></td> <td>The first 200 rows of your SQL, run and undone</td> <td>Nothing</td> </tr> <tr> <td><code>learn_lab_check(module_id, exercise_id, answer?)</code></td> <td>The exercise's checks on your SQL</td> <td>Nothing</td> </tr> <tr> <td><code>learn_lab_hint(module_id, exercise_id, level)</code></td> <td>One hint</td> <td>Nothing</td> </tr> <tr> <td><code>learn_lab_reset(module_id)</code></td> <td>Deletes the lab and makes it again</td> <td>The lab's folder</td> </tr> </tbody></table> |
Need a hand?
Find a fix in troubleshooting, or share a reproducible issue with the community.
Get support ↗Improve this guide on GitHub ↗