Skip to content

Commit

Permalink
Add field parameter script
Browse files Browse the repository at this point in the history
  • Loading branch information
mlonsk committed Jan 26, 2024
1 parent c621347 commit 0f15482
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 0 deletions.
68 changes: 68 additions & 0 deletions common/CSharpScripts/Beginner/script-create-field-parameter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
---
uid: create-field-parameter
title: Create Field Parameter
author: Daniel Otykier
updated: 2024-01-27
applies_to:
versions:
- version: 2.x
- version: 3.x
---
# Create Field Parameters in

## Script Purpose
If you want to create field parameters in a Power BI model using Tabular Editor or in a Direct Lake model.

> [!TIP]
> Want to see the script in action, check out this [Guy in a Cube video](https://www.youtube.com/watch?v=Cg6zRhwF-Ro) where Patrick LeBlanc explains how to use it step by step.

## Script

### Select Columns or Measures to create a field parameter table
```csharp
// Before running the script, select the measures or columns that you
// would like to use as field parameters (hold down CTRL to select multiple
// objects). Also, you may change the name of the field parameter table
// below. NOTE: If used against Power BI Desktop, you must enable unsupported
// features under File > Preferences (TE2) or Tools > Preferences (TE3).
var name = "Parameter";

if(Selected.Columns.Count == 0 && Selected.Measures.Count == 0) throw new Exception("No columns or measures selected!");

// Construct the DAX for the calculated table based on the current selection:
var objects = Selected.Columns.Any() ? Selected.Columns.Cast<ITabularTableObject>() : Selected.Measures;
var dax = "{\n " + string.Join(",\n ", objects.Select((c,i) => string.Format("(\"{0}\", NAMEOF('{1}'[{0}]), {2})", c.Name, c.Table.Name, i))) + "\n}";

// Add the calculated table to the model:
var table = Model.AddCalculatedTable(name, dax);

// In TE2 columns are not created automatically from a DAX expression, so
// we will have to add them manually:
var te2 = table.Columns.Count == 0;
var nameColumn = te2 ? table.AddCalculatedTableColumn(name, "[Value1]") : table.Columns["Value1"] as CalculatedTableColumn;
var fieldColumn = te2 ? table.AddCalculatedTableColumn(name + " Fields", "[Value2]") : table.Columns["Value2"] as CalculatedTableColumn;
var orderColumn = te2 ? table.AddCalculatedTableColumn(name + " Order", "[Value3]") : table.Columns["Value3"] as CalculatedTableColumn;

if(!te2) {
// Rename the columns that were added automatically in TE3:
nameColumn.IsNameInferred = false;
nameColumn.Name = name;
fieldColumn.IsNameInferred = false;
fieldColumn.Name = name + " Fields";
orderColumn.IsNameInferred = false;
orderColumn.Name = name + " Order";
}
// Set remaining properties for field parameters to work
// See: https://twitter.com/markbdi/status/1526558841172893696
nameColumn.SortByColumn = orderColumn;
nameColumn.GroupByColumns.Add(fieldColumn);
fieldColumn.SortByColumn = orderColumn;
fieldColumn.SetExtendedProperty("ParameterMetadata", "{\"version\":3,\"kind\":2}", ExtendedPropertyType.Json);
fieldColumn.IsHidden = true;
orderColumn.IsHidden = true;
```
### Explanation
Before running the script the user has to select the measures or columns in the TOM Explorer they wish to have in their field parameter table.
The selected objects are then inserted into a calculated table which is then configured as a field parameter table automatically.

1 change: 1 addition & 0 deletions common/CSharpScripts/csharp-script-library-beginner.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,6 @@ These are more basic scripts that are easy to understand or modify. They have a
| [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 |


1 change: 1 addition & 0 deletions common/toc.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#### @script-create-measure-table
#### @script-format-numeric-measures
#### @script-create-table-groups
#### @create-field-parameter


### @script-library-advanced
Expand Down

0 comments on commit 0f15482

Please sign in to comment.