From 58d7b2ca84600703ea98f7067dbd349e9005b562 Mon Sep 17 00:00:00 2001
From: Gustavo Saiani <gus@metabase.com>
Date: Wed, 31 Jul 2024 15:04:19 -0300
Subject: [PATCH] Update links to Learn section of metabase.com (#46336)

---
 docs/databases/users-roles-privileges.md       |  4 ++--
 .../collections.md                             |  2 +-
 docs/people-and-groups/google-and-ldap.md      |  2 +-
 docs/permissions/data-sandboxes.md             |  4 ++--
 docs/permissions/introduction.md               |  2 +-
 docs/questions/native-editor/sql-parameters.md |  2 +-
 .../query-builder/expressions/case.md          |  6 +++---
 .../query-builder/expressions/coalesce.md      |  6 +++---
 .../query-builder/expressions/concat.md        |  8 ++++----
 .../expressions/converttimezone.md             |  2 +-
 .../query-builder/expressions/countif.md       | 18 +++++++++---------
 .../query-builder/expressions/datetimeadd.md   |  2 +-
 .../query-builder/expressions/datetimediff.md  |  4 ++--
 .../expressions/datetimesubtract.md            |  2 +-
 .../query-builder/expressions/isempty.md       |  2 +-
 .../query-builder/expressions/isnull.md        |  2 +-
 .../questions/query-builder/expressions/now.md |  6 +++---
 .../query-builder/expressions/offset.md        |  2 +-
 .../query-builder/expressions/regexextract.md  |  2 +-
 .../query-builder/expressions/substring.md     |  4 ++--
 .../query-builder/expressions/sumif.md         | 18 +++++++++---------
 docs/troubleshooting-guide/cant-see-tables.md  |  2 +-
 docs/troubleshooting-guide/db-performance.md   |  2 +-
 docs/troubleshooting-guide/error-message.md    |  4 ++--
 docs/troubleshooting-guide/models.md           | 18 +++++++++---------
 .../my-dashboard-is-slow.md                    |  2 +-
 docs/troubleshooting-guide/sandboxing.md       |  4 ++--
 docs/troubleshooting-guide/sql.md              |  6 +++---
 docs/troubleshooting-guide/visualization.md    |  6 +++---
 29 files changed, 72 insertions(+), 72 deletions(-)

diff --git a/docs/databases/users-roles-privileges.md b/docs/databases/users-roles-privileges.md
index ce3e78f8954..8396b07db07 100644
--- a/docs/databases/users-roles-privileges.md
+++ b/docs/databases/users-roles-privileges.md
@@ -12,7 +12,7 @@ We recommend creating a `metabase` database user with the following database rol
 
 Bundling your privileges into roles based on use cases makes it easier to manage privileges in the future (especially in [multi-tenant situations](#multi-tenant-permissions)). For example, you could:
 
-- Use the same `analytics` role for other BI tools in your [data stack](https://www.metabase.com/learn/databases/data-landscape#data-analysis-layer) that need read-only access to the analytics tables in your database.
+- Use the same `analytics` role for other BI tools in your [data stack](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-landscape#data-analysis-layer) that need read-only access to the analytics tables in your database.
 - Revoke the write access for `metabase_model_persistence` without affecting the write access for `metabase_actions`.
 
 ## Minimum database privileges
@@ -160,7 +160,7 @@ GRANT metabase_uploads TO metabase;
 
 ## Multi-tenant permissions
 
-If you're setting up multi-tenant permissions for customers who need SQL access, you can [create one database connection per customer](https://www.metabase.com/learn/permissions/multi-tenant-permissions#granting-customers-native-sql-access-to-their-schema). That means each customer will connect to the database using their own database user.
+If you're setting up multi-tenant permissions for customers who need SQL access, you can [create one database connection per customer](https://www.metabase.com/learn/metabase-basics/administration/permissions/multi-tenant-permissions#granting-customers-native-sql-access-to-their-schema). That means each customer will connect to the database using their own database user.
 
 Let's say you have customers named Tangerine and Lemon:
 
diff --git a/docs/exploration-and-organization/collections.md b/docs/exploration-and-organization/collections.md
index 8e44a67ecf3..6d18656869f 100644
--- a/docs/exploration-and-organization/collections.md
+++ b/docs/exploration-and-organization/collections.md
@@ -90,7 +90,7 @@ You can upload data to collections. See [Uploading data](./uploads.md)]
 ## Further reading
 
 - [Keeping your analytics organized](https://www.metabase.com/learn/administration/same-page)
-- [Multiple environments](https://www.metabase.com/learn/administration/multi-env#one-collection-per-environment)
+- [Multiple environments](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/multi-env#one-collection-per-environment)
 
 [dashboards]: ../dashboards/introduction.md
 [models]: ../data-modeling/models.md
diff --git a/docs/people-and-groups/google-and-ldap.md b/docs/people-and-groups/google-and-ldap.md
index 2d46a91c2ff..7d269a1743a 100644
--- a/docs/people-and-groups/google-and-ldap.md
+++ b/docs/people-and-groups/google-and-ldap.md
@@ -99,7 +99,7 @@ This default command will work for most LDAP servers, since `inetOrgPerson` is a
 
 ### LDAP group mapping
 
-Manually assigning people to [groups](./managing.md#groups) in Metabase after they've logged in via SSO can get tedious. Instead, you can take advantage of the groups that already exist in your LDAP directory by enabling [group mappings](https://www.metabase.com/learn/permissions/ldap-auth-access-control#group-management).
+Manually assigning people to [groups](./managing.md#groups) in Metabase after they've logged in via SSO can get tedious. Instead, you can take advantage of the groups that already exist in your LDAP directory by enabling [group mappings](https://www.metabase.com/learn/metabase-basics/administration/permissions/ldap-auth-access-control#group-management).
 
 Scroll to **Group Schema** on the same LDAP settings page, and click the toggle to enable group mapping. Selecting **Edit Mapping** will bring up a modal where you can create and edit mappings, specifying which LDAP group corresponds to which Metabase group.
 
diff --git a/docs/permissions/data-sandboxes.md b/docs/permissions/data-sandboxes.md
index 6f68b33afdb..2b9d99a871f 100644
--- a/docs/permissions/data-sandboxes.md
+++ b/docs/permissions/data-sandboxes.md
@@ -60,7 +60,7 @@ You can also use a custom sandbox to:
 
 - [Display an edited column instead of hiding the column](#displaying-edited-columns-in-an-custom-sandbox).
 - [Pass a user attribute to a SQL parameter](#restricting-rows-in-an-custom-sandbox-with-user-attributes).
-- [Pass a user attribute to a Markdown parameter](https://www.metabase.com/learn/dashboards/markdown#custom-url-with-a-sandboxing-attribute).
+- [Pass a user attribute to a Markdown parameter](https://www.metabase.com/learn/metabase-basics/querying-and-dashboards/dashboards/markdown#custom-url-with-a-sandboxing-attribute).
 
 ## Limitations
 
@@ -106,7 +106,7 @@ Examples of user attributes in play:
 
 - [Restricting rows in basic sandboxes](./data-sandbox-examples.md#basic-sandbox-setup---filtering-rows-based-on-user-attributes)
 - [Restricting rows in custom sandboxes](./data-sandbox-examples.md#custom-example-2-filtering-rows-and-columns)
-- [Displaying custom text in Markdown dashboard cards](https://www.metabase.com/learn/dashboards/markdown#custom-url-with-a-sandboxing-attribute)
+- [Displaying custom text in Markdown dashboard cards](https://www.metabase.com/learn/metabase-basics/querying-and-dashboards/dashboards/markdown#custom-url-with-a-sandboxing-attribute)
 
 ## Creating a basic sandbox
 
diff --git a/docs/permissions/introduction.md b/docs/permissions/introduction.md
index 48b6a7c9b26..31de129b75b 100644
--- a/docs/permissions/introduction.md
+++ b/docs/permissions/introduction.md
@@ -73,7 +73,7 @@ Whenever you change permissions for a group, make sure you:
 [data-sandboxing]: ./data-sandboxes.md
 [permissions]: https://www.metabase.com/learn/permissions/
 [sandbox-columns]: https://www.metabase.com/learn/permissions/data-sandboxing-column-permissions
-[sandbox-rows]: https://www.metabase.com/learn/permissions/data-sandboxing-row-permissionsk
+[sandbox-rows]: https://www.metabase.com/learn/permissions/data-sandboxing-row-permissions
 [slack-integration]: ../configuring-metabase/slack.md
 [sql-snippet-folders]: ../questions/native-editor/sql-snippets.md
 [table-permissions]: data.md#table-permissions
diff --git a/docs/questions/native-editor/sql-parameters.md b/docs/questions/native-editor/sql-parameters.md
index 6003bada8d4..47a699eec8e 100644
--- a/docs/questions/native-editor/sql-parameters.md
+++ b/docs/questions/native-editor/sql-parameters.md
@@ -428,4 +428,4 @@ More on [Dashboard filters][dashboard-filters].
 [sql-variables]: https://www.metabase.com/learn/sql-questions/sql-variables.html
 [troubleshooting-filters]: ../../troubleshooting-guide/filters.md
 [troubleshooting-sql]: ../../troubleshooting-guide/sql.md
-[basic-input]: https://www.metabase.com/learn/sql-questions/sql-variables.html#basic-input-variable-text
+[basic-input]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/working-with-sql/sql-variables#basic-input-variable-text
diff --git a/docs/questions/query-builder/expressions/case.md b/docs/questions/query-builder/expressions/case.md
index 9649505471e..3174ca93707 100644
--- a/docs/questions/query-builder/expressions/case.md
+++ b/docs/questions/query-builder/expressions/case.md
@@ -329,17 +329,17 @@ case([Has Wings] = TRUE  AND [Has Face] = TRUE,  "Bird",
 - [Custom expressions tutorial][custom-expressions-learn]
 
 [aggregate-functions]: ../expressions-list.md#aggregations
-[business-logic]: https://www.metabase.com/learn/analytics/avoiding-data-jargon#create-specific-language-and-shared-definitions
+[business-logic]: https://www.metabase.com/learn/grow-your-data-skills/analytics/avoiding-data-jargon#create-specific-language-and-shared-definitions
 [countif]: ../expressions-list.md#countif
 [custom-expressions-doc]: ../expressions.md
 [custom-expressions-list]: ../expressions-list.md
 [custom-expressions-learn]: https://www.metabase.com/learn/questions/custom-expressions
 [data-sandboxing-docs]: ../../../permissions/data-sandboxes.md
-[data-types]: https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types
+[data-types]: https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types
 [filter-learn]: https://www.metabase.com/learn/questions/searching-tables
 [notebook-editor-def]: https://www.metabase.com/glossary/notebook_editor
 [numpy]: https://numpy.org/doc/
 [pandas]: https://pandas.pydata.org/pandas-docs/stable/
 [spreadsheets-to-bi]: /blog/spreadsheets-to-bi
-[sql-reference-guide]: https://www.metabase.com/learn/debugging-sql/sql-syntax.html#common-sql-reference-guides
+[sql-reference-guide]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#common-sql-reference-guides
 [sumif]: ./sumif.md
diff --git a/docs/questions/query-builder/expressions/coalesce.md b/docs/questions/query-builder/expressions/coalesce.md
index c7cd19eb1bc..769d9bf1c08 100644
--- a/docs/questions/query-builder/expressions/coalesce.md
+++ b/docs/questions/query-builder/expressions/coalesce.md
@@ -175,10 +175,10 @@ coalesce([Notes], [Comments] "No notes or comments.")
 [cast-data-type]: ../../../data-modeling/metadata-editing.md#casting-to-a-specific-data-type
 [custom-expressions-doc]: ../expressions.md
 [custom-expressions-learn]: https://www.metabase.com/learn/questions/custom-expressions
-[data-types]: https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types
-[missing-dates]: https://www.metabase.com/learn/debugging-sql/sql-logic-missing-data#how-to-fill-in-data-for-missing-report-dates
+[data-types]: https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types
+[missing-dates]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic-missing-data#how-to-fill-in-data-for-missing-report-dates
 [notebook-editor-def]: https://www.metabase.com/glossary/notebook_editor
 [numpy]: https://numpy.org/doc/
 [pandas]: https://pandas.pydata.org/pandas-docs/stable/
 [spreadsheets-to-bi]: /blog/spreadsheets-to-bi
-[sql-reference-guide]: https://www.metabase.com/learn/debugging-sql/sql-syntax.html#common-sql-reference-guides
+[sql-reference-guide]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#common-sql-reference-guides
diff --git a/docs/questions/query-builder/expressions/concat.md b/docs/questions/query-builder/expressions/concat.md
index 3e8e98d0ad8..b8d9979e064 100644
--- a/docs/questions/query-builder/expressions/concat.md
+++ b/docs/questions/query-builder/expressions/concat.md
@@ -11,7 +11,7 @@ title: Concat
 | `concat(value1, value2, ...)` | `concat("Vienna, ", "Austria")`|
 | Combines two or more strings. | "Vienna, Austria"              |
 
-## Combining text from different columns 
+## Combining text from different columns
 
 | City     | Country | Location         |
 |----------|---------|------------------|
@@ -27,7 +27,7 @@ CONCAT([City], ", ", [Country])
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `concat`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `concat`  |
 | ----------------------- | -------------------- |
 | String                  | ✅                   |
 | Number                  | ❌                   |
@@ -45,7 +45,7 @@ This section covers functions and formulas that work the same way as the Metabas
 
 ### SQL
 
-In most cases (unless you're using a NoSQL database), questions created from the [notebook editor](https://www.metabase.com/glossary/notebook_editor) are converted into SQL queries that run against your database or data warehouse. 
+In most cases (unless you're using a NoSQL database), questions created from the [notebook editor](https://www.metabase.com/glossary/notebook_editor) are converted into SQL queries that run against your database or data warehouse.
 
 If our [sample data](#combining-text-from-different-columns) is stored in a relational database:
 
@@ -93,4 +93,4 @@ concat([City], ", ", [Country])
 ## Further reading
 
 - [Custom expressions documentation](../expressions.md)
-- [Custom expressions tutorial](https://www.metabase.com/learn/questions/custom-expressions)
\ No newline at end of file
+- [Custom expressions tutorial](https://www.metabase.com/learn/questions/custom-expressions)
diff --git a/docs/questions/query-builder/expressions/converttimezone.md b/docs/questions/query-builder/expressions/converttimezone.md
index 73e11839b5a..3f98bf842a2 100644
--- a/docs/questions/query-builder/expressions/converttimezone.md
+++ b/docs/questions/query-builder/expressions/converttimezone.md
@@ -86,7 +86,7 @@ For more gory details, see [Limitations](#limitations).
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `convertTimezone` |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `convertTimezone` |
 | ------------------------------------------------------------------------------------------------ | ---------------------------- |
 | String                                                                                           | ❌                           |
 | Number                                                                                           | ❌                           |
diff --git a/docs/questions/query-builder/expressions/countif.md b/docs/questions/query-builder/expressions/countif.md
index 55a865132b9..fc0e3d50fac 100644
--- a/docs/questions/query-builder/expressions/countif.md
+++ b/docs/questions/query-builder/expressions/countif.md
@@ -31,7 +31,7 @@ We'll use the following sample data to show you `CountIf` with [required](#requi
 | ID  | Plan        | Active Subscription |
 |-----|-------------| --------------------|
 | 1   | Basic       | true                |
-| 2   | Basic       | true                | 
+| 2   | Basic       | true                |
 | 3   | Basic       | false               |
 | 4   | Business    | false               |
 | 5   | Premium     | true                |
@@ -80,7 +80,7 @@ Using the sample data:
 | ID  | Plan        | Active Subscription |
 |-----|-------------| --------------------|
 | 1   | Basic       | true                |
-| 2   | Basic       | true                | 
+| 2   | Basic       | true                |
 | 3   | Basic       | false               |
 | 4   | Business    | false               |
 | 5   | Premium     | true                |
@@ -103,7 +103,7 @@ To view your conditional counts by plan, set the **Group by** column to "Plan".
 
 | Plan      | Total Inactive Subscriptions |
 |-----------|------------------------------|
-| Basic     | 1                            | 
+| Basic     | 1                            |
 | Business  | 1                            |
 | Premium   | 0                            |
 
@@ -111,7 +111,7 @@ To view your conditional counts by plan, set the **Group by** column to "Plan".
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `CountIf`      |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `CountIf`      |
 | ------------------------------------------------------------------------------------------------ | ------------------------- |
 | String                                                                                           | ❌                        |
 | Number                                                                                           | ❌                        |
@@ -150,7 +150,7 @@ CountIf([Plan] = "Basic")
 
 The `case` version lets you count a different column when the condition isn't met. For example, if you've got data from different sources:
 
-| ID: Source A  | Plan: Source A | ID: Source B  | Plan: Source B       | 
+| ID: Source A  | Plan: Source A | ID: Source B  | Plan: Source B       |
 |---------------|----------------|---------------| ---------------------|
 | 1             | Basic          |               |                      |
 |               |                | B             | basic                |
@@ -164,7 +164,7 @@ To count the total number of Basic plans across both sources, you could create a
 - Count the rows in "ID: Source B" where "Plan: Source B = "basic"
 
 ```
-Count(case([Plan: Source A] = "Basic", [ID: Source A], 
+Count(case([Plan: Source A] = "Basic", [ID: Source A],
             case([Plan: Source B] = "basic", [ID: Source B])))
 ```
 
@@ -177,7 +177,7 @@ If our sample data is a time series:
 | ID  | Plan        | Active Subscription | Created Date     |
 |-----|-------------| --------------------|------------------|
 | 1   | Basic       | true                | October 1, 2020  |
-| 2   | Basic       | true                | October 1, 2020  | 
+| 2   | Basic       | true                | October 1, 2020  |
 | 3   | Basic       | false               | October 1, 2020  |
 | 4   | Business    | false               | November 1, 2020 |
 | 5   | Premium     | true                | November 1, 2020 |
@@ -217,11 +217,11 @@ CountIf([Plan] = "Basic")
 If you want to get [conditional counts broken out by group](#conditional-counts-by-group), the SQL query:
 
 ```sql
-SELECT 
+SELECT
     plan,
     COUNT(CASE WHEN active_subscription = false THEN id END) AS total_inactive_subscriptions
 FROM accounts
-GROUP BY 
+GROUP BY
     plan
 ```
 
diff --git a/docs/questions/query-builder/expressions/datetimeadd.md b/docs/questions/query-builder/expressions/datetimeadd.md
index cacc59981a1..7ed4ed9227f 100644
--- a/docs/questions/query-builder/expressions/datetimeadd.md
+++ b/docs/questions/query-builder/expressions/datetimeadd.md
@@ -75,7 +75,7 @@ case(between(now, [Opened On], [Finish By]), "Yes", "No")
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `datetimeAdd` |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `datetimeAdd` |
 | ------------------------------------------------------------------------------------------------ | ------------------------ |
 | String                                                                                           | ❌                       |
 | Number                                                                                           | ❌                       |
diff --git a/docs/questions/query-builder/expressions/datetimediff.md b/docs/questions/query-builder/expressions/datetimediff.md
index 6fb357dec34..2c7364544c0 100644
--- a/docs/questions/query-builder/expressions/datetimediff.md
+++ b/docs/questions/query-builder/expressions/datetimediff.md
@@ -60,7 +60,7 @@ datetimeDiff([Aging Start], now, "day")
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `datetimeDiff` |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `datetimeDiff` |
 | ------------------------------------------------------------------------------------------------ | ------------------------- |
 | String                                                                                           | ❌                        |
 | Number                                                                                           | ❌                        |
@@ -103,7 +103,7 @@ is equivalent to the Metabase `datetimeDiff` expression:
 datetimeDiff([Aging Start], [Aging End], "month")
 ```
 
-Some databases, such as Snowflake and BigQuery, support functions like `DATEDIFF` or `DATE_DIFF`. For more info, check out our list of [common SQL reference guides](https://www.metabase.com/learn/debugging-sql/sql-syntax#common-sql-reference-guides).
+Some databases, such as Snowflake and BigQuery, support functions like `DATEDIFF` or `DATE_DIFF`. For more info, check out our list of [common SQL reference guides](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#common-sql-reference-guides).
 
 ### Spreadsheets
 
diff --git a/docs/questions/query-builder/expressions/datetimesubtract.md b/docs/questions/query-builder/expressions/datetimesubtract.md
index c6aacbc8199..a2054a76a68 100644
--- a/docs/questions/query-builder/expressions/datetimesubtract.md
+++ b/docs/questions/query-builder/expressions/datetimesubtract.md
@@ -72,7 +72,7 @@ case(between(now, [Depart At], [Arrive By]), "Yes", "No")
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `datetimeSubtract`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `datetimeSubtract`  |
 | ----------------------- | -------------------- |
 | String                  | ❌                   |
 | Number                  | ❌                   |
diff --git a/docs/questions/query-builder/expressions/isempty.md b/docs/questions/query-builder/expressions/isempty.md
index edfebf5eb15..110bc30c85a 100644
--- a/docs/questions/query-builder/expressions/isempty.md
+++ b/docs/questions/query-builder/expressions/isempty.md
@@ -135,7 +135,7 @@ case(isempty([Feedback]), "No feedback.", [Feedback])
 
 [custom-expressions-doc]: ../expressions.md
 [custom-expressions-learn]: https://www.metabase.com/learn/questions/custom-expressions
-[data-types]: https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types
+[data-types]: https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types
 [notebook-editor-def]: https://www.metabase.com/glossary/query_builder
 [numpy]: https://numpy.org/doc/
 [pandas]: https://pandas.pydata.org/pandas-docs/stable/
diff --git a/docs/questions/query-builder/expressions/isnull.md b/docs/questions/query-builder/expressions/isnull.md
index 9c26d37175d..28a174b2fd5 100644
--- a/docs/questions/query-builder/expressions/isnull.md
+++ b/docs/questions/query-builder/expressions/isnull.md
@@ -141,7 +141,7 @@ case(isnull([Feedback]), "Unknown feedback.", [Feedback])
 
 [custom-expressions-doc]: ../expressions.md
 [custom-expressions-learn]: https://www.metabase.com/learn/questions/custom-expressions
-[data-types]: https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types
+[data-types]: https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types
 [notebook-editor-def]: https://www.metabase.com/glossary/query_builder
 [numpy]: https://numpy.org/doc/
 [pandas]: https://pandas.pydata.org/pandas-docs/stable/
diff --git a/docs/questions/query-builder/expressions/now.md b/docs/questions/query-builder/expressions/now.md
index d53908b893d..e4337912619 100644
--- a/docs/questions/query-builder/expressions/now.md
+++ b/docs/questions/query-builder/expressions/now.md
@@ -19,7 +19,7 @@ Let's say you have some project data, and you want to add a status column for ea
 To mark a task in progress, you'd use the expression:
 
 ```
-now >= [Start] AND now < [Deadline] 
+now >= [Start] AND now < [Deadline]
 ```
 
 To check if you need to ask for an extension:
@@ -44,7 +44,7 @@ case(now >= [Start] AND now < [Deadline], "In progress",
 
 ## Data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Returned by `now`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Returned by `now`  |
 | ----------------------- | -------------------- |
 | String                  | ❌                   |
 | Number                  | ❌                   |
@@ -52,7 +52,7 @@ case(now >= [Start] AND now < [Deadline], "In progress",
 | Boolean                 | ❌                   |
 | JSON                    | ❌                   |
 
-`now` returns a `timestamp with time zone` if time zones are supported by your database, otherwise `now` returns a `timestamp without time zone`. 
+`now` returns a `timestamp with time zone` if time zones are supported by your database, otherwise `now` returns a `timestamp without time zone`.
 
 For more info about the way these data types behave in Metabase, see [Timezones](../../../configuring-metabase/timezones.md#data-types).
 
diff --git a/docs/questions/query-builder/expressions/offset.md b/docs/questions/query-builder/expressions/offset.md
index e65837174a9..d934d076bf8 100644
--- a/docs/questions/query-builder/expressions/offset.md
+++ b/docs/questions/query-builder/expressions/offset.md
@@ -24,7 +24,7 @@ Because `Offset` refers to other rows, the order of the breakouts matters (the b
 
 The `Offset` function returns whatever value is in the offset row.
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Returned by `Offset` |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Returned by `Offset` |
 | ------------------------------------------------------------------------------------------------ | -------------------- |
 | String                                                                                           | ✅                    |
 | Number                                                                                           | ✅                    |
diff --git a/docs/questions/query-builder/expressions/regexextract.md b/docs/questions/query-builder/expressions/regexextract.md
index 242ff3d3603..c09d937917f 100644
--- a/docs/questions/query-builder/expressions/regexextract.md
+++ b/docs/questions/query-builder/expressions/regexextract.md
@@ -43,7 +43,7 @@ Now, you can use **Campaign Name** in places where you need clean labels, such a
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `regexextract`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `regexextract`  |
 | ----------------------- | -------------------- |
 | String                  | ✅                   |
 | Number                  | ❌                   |
diff --git a/docs/questions/query-builder/expressions/substring.md b/docs/questions/query-builder/expressions/substring.md
index a5a6923c530..83dadd2c34b 100644
--- a/docs/questions/query-builder/expressions/substring.md
+++ b/docs/questions/query-builder/expressions/substring.md
@@ -4,7 +4,7 @@ title: Substring
 
 # Substring
 
-`substring` extracts part of some text. This function is useful for cleaning up text (or any value with a [string data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types)) that has a consistent format.
+`substring` extracts part of some text. This function is useful for cleaning up text (or any value with a [string data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types)) that has a consistent format.
 
 For example, `substring` should work well on strings like SKU numbers, ISO codes, and standardized email addresses.
 
@@ -56,7 +56,7 @@ substring([Mission ID], (1 + length([Mission ID]) - 3), 3)
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `substring`  |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `substring`  |
 | ----------------------- | -------------------- |
 | String                  | ✅                   |
 | Number                  | ❌                   |
diff --git a/docs/questions/query-builder/expressions/sumif.md b/docs/questions/query-builder/expressions/sumif.md
index 8378145ce75..c94873d2d55 100644
--- a/docs/questions/query-builder/expressions/sumif.md
+++ b/docs/questions/query-builder/expressions/sumif.md
@@ -32,7 +32,7 @@ We'll use the following sample data to show you `SumIf` with [required](#require
 | Payment  | Plan        | Date Received     |
 |----------|-------------| ------------------|
 | 100      | Basic       | October 1, 2020   |
-| 100      | Basic       | October 1, 2020   | 
+| 100      | Basic       | October 1, 2020   |
 | 200      | Business    | October 1, 2020   |
 | 200      | Business    | November 1, 2020  |
 | 400      | Premium     | November 1, 2020  |
@@ -79,7 +79,7 @@ To get a conditional subtotal for a category or group, such as the total payment
 | Payment  | Plan        | Date Received     |
 |----------|-------------| ------------------|
 | 100      | Basic       | October 1, 2020   |
-| 100      | Basic       | October 1, 2020   | 
+| 100      | Basic       | October 1, 2020   |
 | 200      | Business    | October 1, 2020   |
 | 200      | Business    | November 1, 2020  |
 | 400      | Premium     | November 1, 2020  |
@@ -90,7 +90,7 @@ To sum payments for the Business and Premium plans:
 SumIf([Payment], [Plan] = "Business" OR [Plan] = "Premium")
 ```
 
-Or, sum payments for all plans that aren't "Basic": 
+Or, sum payments for all plans that aren't "Basic":
 
 ```
 SumIf([Payment], [Plan] != "Basic")
@@ -102,14 +102,14 @@ To view those payments by month, set the **Group by** column to "Date Received:
 
 | Date Received: Month | Total Payments for Business and Premium Plans |
 |----------------------|-----------------------------------------------|
-| October              | 200                                           | 
+| October              | 200                                           |
 | November             | 600                                           |
 
 > Tip: when sharing your work with other people, it's helpful to use the `OR` filter, even though the `!=` filter is shorter. The inclusive `OR` filter makes it easier to understand which categories (e.g., plans) are included in the sum.
 
 ## Accepted data types
 
-| [Data type](https://www.metabase.com/learn/databases/data-types-overview#examples-of-data-types) | Works with `SumIf`        |
+| [Data type](https://www.metabase.com/learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types) | Works with `SumIf`        |
 | ------------------------------------------------------------------------------------------------ | ------------------------- |
 | String                                                                                           | ❌                        |
 | Number                                                                                           | ✅                        |
@@ -163,7 +163,7 @@ For example, to get the running total of payments for the Business and Premium p
 
 | Date Received: Month | Total Payments for Business and Premium Plans |
 |----------------------|-----------------------------------------------|
-| October              | 200                                           | 
+| October              | 200                                           |
 | November             | 800                                           |
 
 Create an aggregation from **Summarize** > **Custom expression**:
@@ -181,7 +181,7 @@ When you run a question using the [query builder](https://www.metabase.com/gloss
 If our [payment sample data](#sumif) is stored in a PostgreSQL database, the SQL query:
 
 ```sql
-SELECT 
+SELECT
     SUM(CASE WHEN plan = "Basic" THEN payment ELSE 0 END) AS total_payments_basic
 FROM invoices
 ```
@@ -195,11 +195,11 @@ SumIf([Payment], [Plan] = "Basic")
 To add [multiple conditions with a grouping column](#conditional-subtotals-by-group), use the SQL query:
 
 ```sql
-SELECT 
+SELECT
     DATE_TRUNC("month", date_received)                       AS date_received_month,
     SUM(CASE WHEN plan = "Business" THEN payment ELSE 0 END) AS total_payments_business_or_premium
 FROM invoices
-GROUP BY 
+GROUP BY
     DATE_TRUNC("month", date_received)
 ```
 
diff --git a/docs/troubleshooting-guide/cant-see-tables.md b/docs/troubleshooting-guide/cant-see-tables.md
index beb8f287c53..03c1a0224ae 100644
--- a/docs/troubleshooting-guide/cant-see-tables.md
+++ b/docs/troubleshooting-guide/cant-see-tables.md
@@ -50,7 +50,7 @@ To make sure that your table is actually queryable by Metabase:
 
 If there's a problem with your table name or database permissions, you'll get an error message like:
 
-- [Table not found](https://www.metabase.com/learn/debugging-sql/sql-syntax#column-or-table-name-is-not-found-or-not-recognized)
+- [Table not found](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#column-or-table-name-is-not-found-or-not-recognized)
 - [Permission denied](./data-permissions.md#getting-a-permission-denied-error-message)
 
 For less common errors, try searching or asking the [Metabase community](https://discourse.metabase.com/).
diff --git a/docs/troubleshooting-guide/db-performance.md b/docs/troubleshooting-guide/db-performance.md
index b2f31877c51..ab97b5700b9 100644
--- a/docs/troubleshooting-guide/db-performance.md
+++ b/docs/troubleshooting-guide/db-performance.md
@@ -20,7 +20,7 @@ To fix problems with your Metabase [application database](../installation-and-op
    - More people are using Metabase to access your database,
    - People are accessing your database more often, or
    - A script or application (other than Metabase) is accessing the database frequently.
-3. If specific tables are being queried a lot, try [Optimizing your table schemas](https://www.metabase.com/learn/administration/making-dashboards-faster#organize-data-to-anticipate-common-questions).
+3. If specific tables are being queried a lot, try [Optimizing your table schemas](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#organize-data-to-anticipate-common-questions).
 4. Run a question from Metabase, then [run the same query](../questions/query-builder/introduction.md#viewing-the-sql-that-powers-your-question) directly against your database.
    - If the queries take about the same time, your data or usage might be outgrowing your database. You can give your database more resources, or consider [upgrading your hardware](https://www.metabase.com/learn/analytics/which-data-warehouse).
    - If the query in Metabase takes longer than a direct query against your database, you might need to adjust the deployment of your Metabase app. Check out some options in [Metabase at scale](https://www.metabase.com/learn/administration/metabase-at-scale).
diff --git a/docs/troubleshooting-guide/error-message.md b/docs/troubleshooting-guide/error-message.md
index bb6ce65f2b1..0be3d29a860 100644
--- a/docs/troubleshooting-guide/error-message.md
+++ b/docs/troubleshooting-guide/error-message.md
@@ -10,8 +10,8 @@ An error message can help you find the right troubleshooting guide. The exact wo
 
 See if your error details contain any of:
 
-- [Table or column "not found" or "not recognized"](https://www.metabase.com/learn/debugging-sql/sql-syntax.html#column-or-table-name-is-not-found-or-not-recognized).
-- [Function does not exist](https://www.metabase.com/learn/debugging-sql/sql-syntax.html#sql-function-does-not-exist).
+- [Table or column "not found" or "not recognized"](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#column-or-table-name-is-not-found-or-not-recognized).
+- [Function does not exist](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-syntax#sql-function-does-not-exist).
 - [Permission denied](./data-permissions.md#getting-a-permission-denied-error-message).
 
 For example, this SQL error tells you that the function `DATEFROMPARTS` does not work on a BigQuery database:
diff --git a/docs/troubleshooting-guide/models.md b/docs/troubleshooting-guide/models.md
index d3121dde048..a921670501b 100644
--- a/docs/troubleshooting-guide/models.md
+++ b/docs/troubleshooting-guide/models.md
@@ -59,20 +59,20 @@ If you can’t solve your problem using the troubleshooting guides:
 - Search or ask the [Metabase community][discourse].
 - Search for [known model issues][known-issues-models] using the label `Querying/Models`. For more information, go to [How to find a known bug or limitation][known-issues].
 
-[analytics-database-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#consider-a-database-optimized-for-analytics
-[denormalize-data-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#denormalize-data
+[analytics-database-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#consider-a-database-optimized-for-analytics
+[denormalize-data-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#denormalize-data
 [discourse]: https://discourse.metabase.com/
-[flatten-json-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#pull-data-out-of-json-and-slot-its-keys-into-columns
-[indexes-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#index-frequently-queried-columns
+[flatten-json-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#pull-data-out-of-json-and-slot-its-keys-into-columns
+[indexes-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#index-frequently-queried-columns
 [known-issues]: ./known-issues.md
 [known-issues-models]: https://github.com/metabase/metabase/labels/Querying%2FModels
-[limit-data-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#ask-for-less-data
-[materialize-views-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#materialize-views-create-new-tables-to-store-query-results
+[limit-data-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#ask-for-less-data
+[materialize-views-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#materialize-views-create-new-tables-to-store-query-results
 [model-button-image]: https://www.metabase.com/learn/images/models/model-icon.png
 [model-docs]: ../data-modeling/models.md
 [nested-query-settings-docs]: ../configuring-metabase/settings.md#enable-nested-queries
-[replicate-database-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#replicate-your-database
-[sql-explain-learn]: https://www.metabase.com/learn/sql-questions/sql-best-practices.html#explain
-[summary-tables-learn]: https://www.metabase.com/learn/administration/making-dashboards-faster.html#aggregate-data-ahead-of-time-with-summary-tables
+[replicate-database-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#replicate-your-database
+[sql-explain-learn]: https://www.metabase.com/learn/grow-your-data-skills/learn-sql/working-with-sql/sql-best-practices#explain
+[summary-tables-learn]: https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#aggregate-data-ahead-of-time-with-summary-tables
 [troubleshooting-sandboxing]: ./sandboxing.md
 [model-persistence]: https://www.metabase.com/docs/latest/data-modeling/model-persistence
diff --git a/docs/troubleshooting-guide/my-dashboard-is-slow.md b/docs/troubleshooting-guide/my-dashboard-is-slow.md
index 305dbadc15a..d9158b4094d 100644
--- a/docs/troubleshooting-guide/my-dashboard-is-slow.md
+++ b/docs/troubleshooting-guide/my-dashboard-is-slow.md
@@ -34,7 +34,7 @@ Aside from running faster, a small and focused dashboard is also easier for peop
 
 If you have a dashboard that many people check around the same time (e.g., at the start of the work day), you may end up with queued queries or saturated database connections. Caching allows you to prepare for peak traffic by running those slow queries once, ahead of time, so that the results are ready to go.
 
-Caching takes less effort because it doesn't involve any changes to your schemas or databases. If you're ready to invest more resources into the root cause of dashboard performance issues, check out this list of common [schema and database optimizations](https://metabase.com/learn/administration/making-dashboards-faster#organize-data-to-anticipate-common-questions).
+Caching takes less effort because it doesn't involve any changes to your schemas or databases. If you're ready to invest more resources into the root cause of dashboard performance issues, check out this list of common [schema and database optimizations](https://metabase.com/learn/metabase-basics/administration/administration-and-operation/making-dashboards-faster#organize-data-to-anticipate-common-questions).
 
 ## Embedded dashboard is slow compared to original dashboard
 
diff --git a/docs/troubleshooting-guide/sandboxing.md b/docs/troubleshooting-guide/sandboxing.md
index 2b7b8289651..0691e86f3c4 100644
--- a/docs/troubleshooting-guide/sandboxing.md
+++ b/docs/troubleshooting-guide/sandboxing.md
@@ -170,12 +170,12 @@ The administrator can [create a new group][groups] to capture precisely who's al
 [data-permissions]: https://www.metabase.com/learn/permissions/data-permissions
 [groups]: ../people-and-groups/managing.md#groups
 [jwt-auth]: ../people-and-groups/authenticating-with-jwt.md
-[locked-parameters]: https://www.metabase.com/learn/customer-facing-analytics/embedding-charts-and-dashboards#hide-or-lock-parameters-to-restrict-what-data-is-shown
+[locked-parameters]: https://www.metabase.com/learn/metabase-basics/embedding/charts-and-dashboards#hide-or-lock-parameters-to-restrict-what-data-is-shown
 [permissions]: https://www.metabase.com/learn/permissions/data-permissions
 [public-sharing]: ../questions/sharing/public-links.md
 [row-permissions]: https://www.metabase.com/learn/permissions/data-sandboxing-row-permissions
 [sandboxing-your-data]: ../permissions/data-sandboxes.md
-[static-embedding]: https://www.metabase.com/learn/customer-facing-analytics/embedding-charts-and-dashboards#enable-embedding-in-other-applications
+[static-embedding]: https://www.metabase.com/learn/metabase-basics/embedding/charts-and-dashboards#enable-embedding-in-other-applications
 [sandbox-limitations]: ../permissions/data-sandboxes.md#limitations
 [troubleshooting-permissions]: ./permissions.md
 [unsupported-databases]: ../permissions/data-sandboxes.md#limitations
diff --git a/docs/troubleshooting-guide/sql.md b/docs/troubleshooting-guide/sql.md
index e6d512bb9b0..c2c002bd185 100644
--- a/docs/troubleshooting-guide/sql.md
+++ b/docs/troubleshooting-guide/sql.md
@@ -6,8 +6,8 @@ title: Troubleshooting SQL questions
 
 ## Incorrect results
 
-- [Aggregations (counts, sums, etc.) are wrong](https://www.metabase.com/learn/debugging-sql/sql-logic#aggregated-results-counts-sums-etc-are-wrong).
-- [Results have duplicated rows](https://www.metabase.com/learn/debugging-sql/sql-logic-duplicated-data).
+- [Aggregations (counts, sums, etc.) are wrong](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic#aggregated-results-counts-sums-etc-are-wrong).
+- [Results have duplicated rows](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic-duplicated-data).
 - [Results are missing rows](https://www.metabase.com/learn/debugging-sql/sql-logic-missing-data).
 - [Dates and times are wrong](./timezones.md).
 - [Data isn't up to date](./sync-fingerprint-scan.md).
@@ -18,7 +18,7 @@ title: Troubleshooting SQL questions
 - [SQL query contains table aliases](../questions/native-editor/sql-parameters.md#field-filters-dont-work-with-table-aliases).
 - [SQL syntax error: missing `FROM` clause](../questions/native-editor/sql-parameters.md#field-filters-must-be-connected-to-fields-included-in-the-query).
 - [No option to display a filter widget](../questions/native-editor/sql-parameters.md#field-filter-compatible-types).
-- [I don't know the SQL variable type](https://www.metabase.com/learn/sql-questions/sql-variables#the-different-types-of-variables-available-for-native-sql-queries).
+- [I don't know the SQL variable type](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/working-with-sql/sql-variables#the-different-types-of-variables-available-for-native-sql-queries).
 
 ## SQL syntax errors
 
diff --git a/docs/troubleshooting-guide/visualization.md b/docs/troubleshooting-guide/visualization.md
index dcc91b41ec6..beb89f74a16 100644
--- a/docs/troubleshooting-guide/visualization.md
+++ b/docs/troubleshooting-guide/visualization.md
@@ -23,13 +23,13 @@ The visualization settings on a card are independent of the settings on the orig
 
 Go to your SQL question and [change the visualization type](../questions/sharing/visualizing-results.md) to a table. Then, check if any of the following situations apply to the raw query results:
 
-- [Aggregations (counts, sums, etc.) are wrong](https://www.metabase.com/learn/debugging-sql/sql-logic#aggregated-results-counts-sums-etc-are-wrong).
-- [Results have duplicated rows](https://www.metabase.com/learn/debugging-sql/sql-logic-duplicated-data).
+- [Aggregations (counts, sums, etc.) are wrong](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic#aggregated-results-counts-sums-etc-are-wrong).
+- [Results have duplicated rows](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic-duplicated-data).
 - [Results are missing rows](https://www.metabase.com/learn/debugging-sql/sql-logic-missing-data).
 
 **Explanation**
 
-If your question or dashboard card is powered by a handwritten [SQL query](../questions/native-editor/writing-sql.md) rather than the [query builder](../questions/query-builder/introduction.md), your visualization is going to be more sensitive to changes in the underlying data (for example, renamed fields, or the sudden appearance of a wild null value). To learn more, read about [Common reasons for unexpected query results](https://www.metabase.com/learn/debugging-sql/sql-logic#common-reasons-for-unexpected-query-results).
+If your question or dashboard card is powered by a handwritten [SQL query](../questions/native-editor/writing-sql.md) rather than the [query builder](../questions/query-builder/introduction.md), your visualization is going to be more sensitive to changes in the underlying data (for example, renamed fields, or the sudden appearance of a wild null value). To learn more, read about [Common reasons for unexpected query results](https://www.metabase.com/learn/grow-your-data-skills/learn-sql/debugging-sql/sql-logic#common-reasons-for-unexpected-query-results).
 
 If you're having problems with things like SQL syntax errors or [SQL variables](https://www.metabase.com/glossary/variable#example-variable-in-metabase), see [Troubleshooting SQL questions](./sql.md) for more help.
 
-- 
GitLab