diff --git a/common/CSharpScripts/Beginner/script-count-things.md b/common/CSharpScripts/Advanced/script-count-things.md
similarity index 100%
rename from common/CSharpScripts/Beginner/script-count-things.md
rename to common/CSharpScripts/Advanced/script-count-things.md
diff --git a/common/CSharpScripts/Beginner/script-find-replace-selected-measures.md b/common/CSharpScripts/Advanced/script-find-replace-selected-measures.md
similarity index 100%
rename from common/CSharpScripts/Beginner/script-find-replace-selected-measures.md
rename to common/CSharpScripts/Advanced/script-find-replace-selected-measures.md
diff --git a/common/CSharpScripts/Advanced/script-output-things.md b/common/CSharpScripts/Advanced/script-output-things.md
new file mode 100644
index 00000000..0133d99e
--- /dev/null
+++ b/common/CSharpScripts/Advanced/script-output-things.md
@@ -0,0 +1,64 @@
+---
+uid: script-output-things
+title: Output Object Details in a Grid
+author: Daniel Otykier
+updated: 2024-12-13
+applies_to:
+ versions:
+ - version: 2.x
+ - version: 3.x
+---
+# Output Object Details in a Grid
+
+## Script Purpose
+Another way to get an overview of objects in the model, and how they are configured, is to output them in a grid using the C# [`DataTable`](https://learn.microsoft.com/en-us/dotnet/api/system.data.datatable?view=net-8.0) class. This is a very flexible technique, as you can add only the information you are interested in, as columns of the `DataTable`. Moreover, when passing a `DataTable` to the `Output()` method, Tabular Editor will automatically display it in a grid view, which is very convenient for inspecting the data.
+
+## Script
+
+### Show measure complexity details
+```csharp
+// This script displays a grid with details about each measure in the model.
+using System.Data;
+
+var result = new DataTable();
+result.Columns.Add("Name");
+result.Columns.Add("Table");
+result.Columns.Add("Expression token count", typeof(int));
+result.Columns.Add("Expression line count", typeof(int));
+result.Columns.Add("Description line count", typeof(int));
+result.Columns.Add("Format String");
+
+foreach(var m in Model.AllMeasures)
+{
+ var row = new object[]
+ {
+ m.DaxObjectName, // Name
+ m.Table.Name, // Table
+ m.Tokenize().Count, // Token count
+ m.Expression.Split(new []{'\n'}, StringSplitOptions.RemoveEmptyEntries).Length,
+ m.Description.Split(new []{'\n'}, StringSplitOptions.RemoveEmptyEntries).Length,
+ m.FormatStringExpression ?? m.FormatString
+ };
+ result.Rows.Add(row);
+}
+
+Output(result);
+```
+### Explanation
+This snippet first configures a `DataTable` object with the columns we want to display in the grid. We explicitly specify the `typeof(int)` for some of the columns, to ensure that sorting works correctly. We then iterate over all measures in the model, and for each measure, we create a new row in the `DataTable` with the desired information. Finally, we pass the `DataTable` to the `Output()` method, which will display the grid.
+
+The columns displayed are:
+
+- **Name**: The name of the measure.
+- **Table**: The name of the table the measure belongs to.
+- **Expression token count**: The number of tokens in the measure expression. This is a rough measure of DAX complexity.
+- **Expression line count**: The number of lines in the measure expression, not counting empty lines.
+- **Description line count**: The number of lines in the measure description, not counting empty lines.
+- **Format String**: The measure's format string expresssion or format string, if any.
+
+## Example Output
+
+
\ No newline at end of file
diff --git a/common/CSharpScripts/csharp-script-library-advanced.md b/common/CSharpScripts/csharp-script-library-advanced.md
index 07b73dbb..c30180a0 100644
--- a/common/CSharpScripts/csharp-script-library-advanced.md
+++ b/common/CSharpScripts/csharp-script-library-advanced.md
@@ -17,8 +17,11 @@ These are more advanced scripts with sophisticated functionalities requiring a m
|
Script Name
| Purpose | Use-case |
| --- | --- | --- |
-| [Create Date Table](Advanced/script-create-date-table.md) | Creates a formatted Date table based on selected Date columns in the model. | When you need to create a new date table based on a template. |
-| [Create M Parameter (Auto-Replace)](Advanced/script-create-and-replace-M-parameter.md) | Creates a new M Parameter and automatically adds it to M Partitions. | When you want to replace strings in multiple partitions (i.e. connection strings) with a dynamic M Parameter. |
-| [Format Power Query](Advanced/script-format-power-query.md) | Formats the Power Query of a selected M Partition by using the powerqueryformatter.com API. | When you have complex Power Query and need to make it more readable for reading or making changes. |
-| [Implement Incremental Refresh](Advanced/script-implement-incremental-refresh.md) | Configures Incremental Refresh automatically using parameters from a UI dialogue box. | When you need to implement incremental refresh but aren't comfortable with the configuration in the table settings. |
-| [Remove Measures with Errors](Advanced/script-remove-measures-with-error.md) | Creates a new M Parameter and automatically adds it to M Partitions. | When you want to replace strings in multiple partitions (i.e. connection strings) with a dynamic M Parameter. |
\ No newline at end of file
+| [Count Model Objects](xref:script-count-things) | Counts all the different objects by type in a model. | When you need an overview of the model contents or want to count objects by type. |
+| [Output Object Details in a Grid](xref:script-output-things) | Outputs object details in a grid view. | When you need to output object details in a grid view for inspection. |
+| [Create Date Table](xref:script-create-date-table) | Creates a formatted Date table based on selected Date columns in the model. | When you need to create a new date table based on a template. |
+| [Create M Parameter (Auto-Replace)](xref:script-create-and-replace-parameter) | Creates a new M Parameter and automatically adds it to M Partitions. | When you want to replace strings in multiple partitions (i.e. connection strings) with a dynamic M Parameter. |
+| [Format Power Query](xref:script-format-power-query) | Formats the Power Query of a selected M Partition by using the powerqueryformatter.com API. | When you have complex Power Query and need to make it more readable for reading or making changes. |
+| [Implement Incremental Refresh](xref:script-implement-incremental-refresh) | Configures Incremental Refresh automatically using parameters from a UI dialogue box. | When you need to implement incremental refresh but aren't comfortable with the configuration in the table settings. |
+| [Remove Measures with Errors](xref:script-remove-measures-with-error) | Creates a new M Parameter and automatically adds it to M Partitions. | When you want to replace strings in multiple partitions (i.e. connection strings) with a dynamic M Parameter. |
+| [Find & Replace in Selected Measures](xref:script-find-replace) | Searches for a substring in the DAX of selected measures, replacing with another substring. | When you need to quickly find/replace values in multiple DAX measures (i.e. `CALCULATE` filter or broken object references). |
\ No newline at end of file
diff --git a/common/CSharpScripts/csharp-script-library-beginner.md b/common/CSharpScripts/csharp-script-library-beginner.md
index 55ae95e8..d8d03454 100644
--- a/common/CSharpScripts/csharp-script-library-beginner.md
+++ b/common/CSharpScripts/csharp-script-library-beginner.md
@@ -17,16 +17,13 @@ These are more basic scripts that are easy to understand or modify. They have a
|
Script Name
| Purpose | Use-case |
| --- | --- | --- |
-| [Count Table Rows](Beginner/script-count-rows.md) | Evaluates a COUNTROWS ( 'Table' ) of a selected table. | When you want to check how many rows are in a table, or if it's been loaded. |
-| [Count Model Objects](Beginner/script-count-things.md) | Counts all the different objects by type in a model. | When you need an overview of the model contents or want to count objects by type. |
-| [Create Sum Measures from Columns](Beginner/script-create-sum-measures-from-columns.md) | Create SUM ( 'Table'[Column] ) measures from any selected column. | When you have many columns in a new table / model and must make many measures at once. |
-| [Create M Parameter](Beginner/script-create-m-parameter.md) | Create a new M Parameter in 'Shared Expressions' | When you want to create a parameter to use in other Power Query queries (M Partitions / Shared Expressions). |
-| [Edit Hidden Partitions](Beginner/script-edit-hidden-partitions.md) | Reveals the properties of hidden partitions in Calc. Groups & Calc. Tables | When you need to see or edit the TOM properties of these hidden partitions. |
-| [Find & Replace in Selected Measures](Beginner/script-find-replace-selected-measures.md) | Searches for a substring in the DAX of selected measures, replacing with another substring. | When you need to quickly find/replace values in multiple DAX measures (i.e. `CALCULATE` filter or broken object references). |
-| [Create Measure Table](Beginner/script-create-measure-table.md) | Create a measure table | When you want to create an empty table to use as an organizing measure table|
-| [Create Table Groups](Beginner/script-create-table-groups.md) | Organize the model into Table Groups | When you want to have an automatic organization of your tables using the table group feature of Tabular Editor 3 |
-| [Format Numeric Measures](Beginner/script-format-numeric-measures.md) | Formats the chosen measures | When you want to quickly apply a format string to the currently selected measures |
-| [Show Data Source Dependencies](Beginner/script-show-data-source-dependencies.md) | Shows dependencies for data sources | For explicit (legacy) data sources it can be hard to know exactly where they are used. This script shows you which partition reference the chosen data source |
-| [Create Field Parameters](Beginner/script-create-field-parameter.md) | Quickly create a field parameter table | Choose the objects that should be in the field parameter and the script will take care of the rest |
-
-
+| [Count Table Rows](xref:script-count-rows) | Evaluates a COUNTROWS ( 'Table' ) of a selected table. | When you want to check how many rows are in a table, or if it's been loaded. |
+| [Create Sum Measures from Columns](xref:script-create-sum-measures-from-columns) | Create SUM ( 'Table'[Column] ) measures from any selected column. | When you have many columns in a new table / model and must make many measures at once. |
+| [Create Measure Table](xref:script-create-measure-table) | Create a measure table | When you want to create an empty table to use as an organizing measure table|
+| [Create Table Groups](xref:script-create-table-groups) | Organize the model into Table Groups | When you want to have an automatic organization of your tables using the table group feature of Tabular Editor 3 |
+| [Create M Parameter](xref:script-create-m-parameter) | Create a new M Parameter in 'Shared Expressions' | When you want to create a parameter to use in other Power Query queries (M Partitions / Shared Expressions). |
+| [Edit Hidden Partitions](xref:script-edit-hidden-partitions) | Reveals the properties of hidden partitions in Calc. Groups & Calc. Tables | When you need to see or edit the TOM properties of these hidden partitions. |
+| [Format Numeric Measures](xref:script-format-numeric-measures) | Formats the chosen measures | When you want to quickly apply a format string to the currently selected measures |
+| [Show Data Source Dependencies](xref:script-show-data-source-dependencies) | Shows dependencies for data sources | For explicit (legacy) data sources it can be hard to know exactly where they are used. This script shows you which partition reference the chosen data source |
+| [Create Field Parameters](xref:create-field-parameter) | Quickly create a field parameter table | Choose the objects that should be in the field parameter and the script will take care of the rest |
+| [Display Unique Column Values](xref:script-display-unique-column-values) | Display unique values in a column | When you want to see the unique values in the currently selected column |
\ No newline at end of file
diff --git a/common/toc.md b/common/toc.md
index 1219ff7c..b82de238 100644
--- a/common/toc.md
+++ b/common/toc.md
@@ -19,18 +19,20 @@
### @script-library-beginner
#### @script-count-rows
-#### @script-edit-hidden-partitions
-#### @script-create-m-parameter
#### @script-create-sum-measures-from-columns
#### @script-create-measure-table
-#### @script-format-numeric-measures
#### @script-create-table-groups
+#### @script-create-m-parameter
+#### @script-edit-hidden-partitions
+#### @script-format-numeric-measures
+#### @script-show-data-source-dependencies
#### @create-field-parameter
#### @script-display-unique-column-values
### @script-library-advanced
#### @script-count-things
+#### @script-output-things
#### @script-create-date-table
#### @script-create-and-replace-parameter
#### @script-format-power-query
diff --git a/images/script-output-things-example.png b/images/script-output-things-example.png
new file mode 100644
index 00000000..cbb7e1f1
Binary files /dev/null and b/images/script-output-things-example.png differ