Class ScriptHost
- Inheritance
 - 
      
      ScriptHost
 
- Inherited Members
 
- Namespace
 - TabularEditor.Shared.Scripting
 
- Assembly
 - TabularEditor3.Shared.dll
 
This is the host class in which a C# script is executed
public class ScriptHost
  - Extension Methods
 
Properties
Model
The currently loaded Model.
public static Model Model { get; set; }
  Property Value
| Type | Description | 
|---|---|
| Model | 
Examples
var modelHandler = new TabularModelHandler("localhost", "AdventureWorks"); // Connects to the 'AdventureWorks' database from the 'localhost' AS instance Model = modelHandler.Model; // Specify that the script should use the model loaded above var myMeasure = SelectMeasure(); // Prompt the user to select a measure from the model.
Remarks
When no model is loaded in Tabular Editor, this property will be null causing calls to global methods such as EvaluateDax(string), SelectMeasure(Measure, string), etc. to fail. If you want to run a script without loading a model in Tabular Editor, or if you want the script to apply its changes to a different model than the one currently loaded, you may explicitly assign a model to this property as shown below:
Selected
An object that represents the current selection in the TOM Explorer.
public static Selection Selected { get; }
  Property Value
| Type | Description | 
|---|---|
| Selection | 
WaitFormVisible
Toggle the "Please wait" spinner on/off. Useful if you want to display custom dialogs / UI to the end user.
public static bool WaitFormVisible { get; set; }
  Property Value
| Type | Description | 
|---|---|
| bool | 
Remarks
Built-in script UI such as the Info(string, int) and SelectMeasure(IEnumerable<Measure>, Measure, string) functionality will automatically hide the "Please wait" spinner.
Methods
CallDaxFormatter(bool?, bool?)
Format all DAX expressions on objects currently flagged for formatting.
public static void CallDaxFormatter(bool? shortFormat = null, bool? skipSpaceAfterFunctionName = null)
  Parameters
| Type | Name | Description | 
|---|---|---|
| bool? | shortFormat | |
| bool? | skipSpaceAfterFunctionName | 
CollectVertiPaqAnalyzerStats()
Collects VertiPaq Analyzer statistics for the currently loaded model.
public static void CollectVertiPaqAnalyzerStats()
  ConvertDax(string, bool)
Changes the character used for decimals and list separators in a DAX expression.
public static string ConvertDax(string dax, bool useSemicolons = true)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | dax | The original DAX expression  | 
      
| bool | useSemicolons | Set to true when converting from Non-US-style DAX to US-style DAX, or false for vice versa.  | 
      
Returns
| Type | Description | 
|---|---|
| string | 
CustomAction(IEnumerable<ITabularNamedObject>, int)
Run a macro on a selection of objects. Alias for Macro(IEnumerable<ITabularNamedObject>, int)
public static void CustomAction(IEnumerable<ITabularNamedObject> selection, int macroId)
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<ITabularNamedObject> | selection | The object selection on which the macro should run.  | 
      
| int | macroId | Id of the macro  | 
      
CustomAction(IEnumerable<ITabularNamedObject>, string)
Run a macro on a selection of objects. Alias for Macro(IEnumerable<ITabularNamedObject>, string)
public static void CustomAction(IEnumerable<ITabularNamedObject> selection, string macroName)
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<ITabularNamedObject> | selection | The object selection on which the macro should run.  | 
      
| string | macroName | Name of the macro. Use fully path of macro in case of ambiguity.  | 
      
CustomAction(int)
Run a macro. Alias for Macro(int)
public static void CustomAction(int macroId)
  Parameters
| Type | Name | Description | 
|---|---|---|
| int | macroId | Id of the macro  | 
      
CustomAction(string)
Run a macro. Alias for Macro(string).
public static void CustomAction(string macroName)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | macroName | Name of the macro. Use fully path of macro in case of ambiguity.  | 
      
CustomAction(ITabularNamedObject, int)
Run a macro on an object. Alias for Macro(ITabularNamedObject, int)
public static void CustomAction(ITabularNamedObject selection, int macroId)
  Parameters
| Type | Name | Description | 
|---|---|---|
| ITabularNamedObject | selection | The object on which the macro should be run.  | 
      
| int | macroId | Id of the macro  | 
      
CustomAction(ITabularNamedObject, string)
Run a macro on an object. Alias for Macro(ITabularNamedObject, string)
public static void CustomAction(ITabularNamedObject selection, string macroName)
  Parameters
| Type | Name | Description | 
|---|---|---|
| ITabularNamedObject | selection | The object on which the macro should be run.  | 
      
| string | macroName | Name of the macro. Use fully path of macro in case of ambiguity.  | 
      
Error(string)
Displays an error message in a popup dialog. When the script is running in the CLI, an error message is written to the console.
public static void Error(string message)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | message | 
EvaluateDax(string)
Evaluates the specified DAX expression against the connected database and returns a data table or scalar value containing the result.
public static object EvaluateDax(string dax)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | dax | The DAX expression to be evaluated  | 
      
Returns
| Type | Description | 
|---|---|
| object | A DataTable if the DAX expression returns a table value, otherwise a primitive type representing the scalar value of the evaluation.  | 
      
ExecuteCommand(string, bool)
Executes the specified TMSL or XMLA command.
public static void ExecuteCommand(string tmslOrXmla, bool isXmla = false)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | tmslOrXmla | A TMSL or XMLA string.  | 
      
| bool | isXmla | Set to true if   | 
      
ExecuteDax(string)
Executes the specified DAX query.
public static DataSet ExecuteDax(string dax)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | dax | A DAX query which contains one or more EVALUATE statements.  | 
      
Returns
| Type | Description | 
|---|---|
| DataSet | A DataSet object which contains the resulting datasets from the query.  | 
      
ExecuteReader(string)
Executes the specified DAX query.
public static IDataReader ExecuteReader(string dax)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | dax | A DAX query which contains one or more EVALUATE statements.  | 
      
Returns
| Type | Description | 
|---|---|
| IDataReader | An IDataReader-object that allows you to iterate the results of the query.  | 
      
ExportProperties(IEnumerable<ITabularNamedObject>, string)
Export properties of the specified set of objects to a TSV (tab-separated) string. Use ImportProperties(string) to import properties from a TSV string.
public static string ExportProperties(IEnumerable<ITabularNamedObject> objects, string properties = "Name,Description,SourceColumn,Expression,FormatString,DataType")
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<ITabularNamedObject> | objects | Set of objects whose properties should be serialized  | 
      
| string | properties | (Optional) Comma-separated list of properties to export. If omitted, a default set of properties are exported.  | 
      
Returns
| Type | Description | 
|---|---|
| string | 
FormatDax(IEnumerable<IDaxDependantObject>, bool?, bool?)
Format all DAX expressions on the specified objects.
public static void FormatDax(IEnumerable<IDaxDependantObject> objects, bool? shortFormat = null, bool? skipSpaceAfterFunctionName = null)
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<IDaxDependantObject> | objects | |
| bool? | shortFormat | |
| bool? | skipSpaceAfterFunctionName | 
FormatDax(string, bool?, bool)
Format the specified DAX expression
public static string FormatDax(string dax, bool? shortFormat = null, bool skipSpaceAfterFunctionName = false)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | dax | |
| bool? | shortFormat | |
| bool | skipSpaceAfterFunctionName | 
Returns
| Type | Description | 
|---|---|
| string | 
FormatDax(IDaxDependantObject)
Flags the specified object for formatting after script execution or the next time CallDaxFormatter(bool?, bool?) is called.
public static void FormatDax(IDaxDependantObject obj)
  Parameters
| Type | Name | Description | 
|---|---|---|
| IDaxDependantObject | obj | 
GetObjectPath(TabularObject)
Returns a string representation that uniquely identifies the specified object within the model.
public static string GetObjectPath(TabularObject obj)
  Parameters
| Type | Name | Description | 
|---|---|---|
| TabularObject | obj | 
Returns
| Type | Description | 
|---|---|
| string | 
ImportProperties(string)
Applies properties to objects based on a string representation (tab separated format) of property values to assign, such as obtained by ExportProperties(IEnumerable<ITabularNamedObject>, string).
public static void ImportProperties(string tsvData)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | tsvData | The tab separated property values to assign  | 
      
Info(string)
Displays an informational message in a popup dialog. When the script is running in the CLI, an information message is written to the console.
public static void Info(string message)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | message | 
LineBreakFirstChar(string, bool)
Ensures that a DAX expression starts with a line break.
public static string LineBreakFirstChar(string dax, bool onlyIfMultiline = true)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | dax | The DAX expression  | 
      
| bool | onlyIfMultiline | Set to true if the line break character should only be inserted when the DAX expression itself spans multiple lines.  | 
      
Returns
| Type | Description | 
|---|---|
| string | 
Remarks
In Power BI Desktop, DAX expressions are shown on a formula bar with the name of the object prepended. For this reason, it is often useful to have a line break as the first character of the actual DAX expression.
Macro(IEnumerable<ITabularNamedObject>, int)
Run a macro on a selection of objects.
public static void Macro(IEnumerable<ITabularNamedObject> selection, int macroId)
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<ITabularNamedObject> | selection | The object selection on which the macro should run.  | 
      
| int | macroId | Id of the macro  | 
      
Macro(IEnumerable<ITabularNamedObject>, string)
Run a macro on a selection of objects.
public static void Macro(IEnumerable<ITabularNamedObject> selection, string macroName)
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<ITabularNamedObject> | selection | The object selection on which the macro should run.  | 
      
| string | macroName | Name of the macro. Use fully path of macro in case of ambiguity.  | 
      
Macro(int)
Run a macro.
public static void Macro(int macroId)
  Parameters
| Type | Name | Description | 
|---|---|---|
| int | macroId | Id of the macro  | 
      
Macro(string)
Run a macro.
public static void Macro(string macroName)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | macroName | Name of the macro. Use fully path of macro in case of ambiguity.  | 
      
Macro(ITabularNamedObject, int)
Run a macro on an object.
public static void Macro(ITabularNamedObject selection, int macroId)
  Parameters
| Type | Name | Description | 
|---|---|---|
| ITabularNamedObject | selection | The object on which the macro should be run.  | 
      
| int | macroId | Id of the macro  | 
      
Macro(ITabularNamedObject, string)
Run a macro on an object.
public static void Macro(ITabularNamedObject selection, string macroName)
  Parameters
| Type | Name | Description | 
|---|---|---|
| ITabularNamedObject | selection | The object on which the macro should be run.  | 
      
| string | macroName | Name of the macro. Use fully path of macro in case of ambiguity.  | 
      
Output(object)
Displays detailed information about the specified object or collection of objects in a popup dialog. When executed through the UI, the user has an option to ignore additional popups. When the script is running in the CLI, the information is written to the console.
public static void Output(object value)
  Parameters
| Type | Name | Description | 
|---|---|---|
| object | value | An object or collection of objects  | 
      
ReadFile(string)
Read the specified file as text
public static string ReadFile(string filePath)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | filePath | 
Returns
| Type | Description | 
|---|---|
| string | 
ResolveObjectPath(string)
Resolves an object within the model based on a string such as the one obtained by GetObjectPath(TabularObject).
public static TabularObject ResolveObjectPath(string path)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | path | 
Returns
| Type | Description | 
|---|---|
| TabularObject | 
SaveFile(string, string, Encoding)
Saves the specified text to a file
public static void SaveFile(string filePath, string content, Encoding encoding = null)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | filePath | Path of the file - file will be created if it does not already exist, and overwritten otherwise  | 
      
| string | content | Content to write to the file  | 
      
| Encoding | encoding | (Optional) Encoding to use  | 
      
SelectColumn(IEnumerable<Column>, Column, string)
Displays a dialog that allows the user to select a column from the specified list of columns.
public static Column SelectColumn(IEnumerable<Column> columns, Column preselect = null, string label = "Select column:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<Column> | columns | A list of columns to be shown to the user  | 
      
| Column | preselect | (Optional) A column from the list of columns, which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Column | The selected column or null if the user cancels out of the dialog  | 
      
SelectColumn(Table, Column, string)
Displays a dialog that allows the user to select a column from the specified table.
public static Column SelectColumn(Table table, Column preselect = null, string label = "Select column:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| Table | table | The table from which the user should select a column  | 
      
| Column | preselect | (Optional) A column from the list of columns, which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Column | The selected column or null if the user cancels out of the dialog  | 
      
SelectMeasure(IEnumerable<Measure>, Measure, string)
Displays a dialog that allows the user to select a measure from the specified list of measures.
public static Measure SelectMeasure(IEnumerable<Measure> measures, Measure preselect = null, string label = "Select measure:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<Measure> | measures | A list of measures to be shown to the user  | 
      
| Measure | preselect | (Optional) A measure from the list of measures, which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Measure | The selected measure or null if the user cancels out of the dialog  | 
      
SelectMeasure(Measure, string)
Displays a dialog that allows the user to select a measure from the model.
public static Measure SelectMeasure(Measure preselect = null, string label = "Select measure:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| Measure | preselect | (Optional) A measure from the model, which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Measure | The selected measure or null if the user cancels out of the dialog  | 
      
SelectMeasure(Model, Measure, string)
Displays a dialog that allows the user to select a measure from the model.
public static Measure SelectMeasure(Model model, Measure preselect = null, string label = "Select measure:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| Model | model | The model from which a measure should be selected by the user  | 
      
| Measure | preselect | (Optional) A measure from the model, which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Measure | The selected measure or null if the user cancels out of the dialog  | 
      
SelectMeasure(Table, Measure, string)
Displays a dialog that allows the user to select a measure from the specified table.
public static Measure SelectMeasure(Table table, Measure preselect = null, string label = "Select measure:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| Table | table | A table containing the measures that will be shown to the user  | 
      
| Measure | preselect | (Optional) A measure from the table, which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Measure | The selected measure or null if the user cancels out of the dialog  | 
      
SelectObject<T>(IEnumerable<T>, T, string)
Displays a dialog that allows the user to select a model object from a list of objects.
public static T SelectObject<T>(IEnumerable<T> objects, T preselect = null, string label = "Select object:") where T : TabularNamedObject
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<T> | objects | A list of objects to be shown to the user  | 
      
| T | preselect | (Optional) An object from the list, which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| T | The selected object or null if the user cancels out of the dialog  | 
      
Type Parameters
| Name | Description | 
|---|---|
| T | The type of objects shown to the user  | 
      
SelectObjects<T>(IEnumerable<T>, IEnumerable<T>, string)
Displays a dialog that allows the user to select one or more model objects from a list of objects.
public static IList<T> SelectObjects<T>(IEnumerable<T> objects, IEnumerable<T> preselect = null, string label = "Select object(s):") where T : TabularNamedObject
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<T> | objects | A list of objects to be shown to the user  | 
      
| IEnumerable<T> | preselect | (Optional) A list of objects which are preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| IList<T> | The selected object(s) or null if the user cancels out of the dialog  | 
      
Type Parameters
| Name | Description | 
|---|---|
| T | The type of objects shown to the user  | 
      
SelectTable(IEnumerable<Table>, Table, string)
Displays a dialog that allows the user to select a table from the specified list of tables.
public static Table SelectTable(IEnumerable<Table> tables, Table preselect = null, string label = "Select table:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| IEnumerable<Table> | tables | A list of tables to be shown to the user  | 
      
| Table | preselect | (Optional) A table from the list of tables, which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Table | The selected table or null if the user cancels out of the dialog  | 
      
SelectTable(Model, Table, string)
Displays a dialog that allows the user to select a table from the model.
public static Table SelectTable(Model model, Table preselect = null, string label = "Select table:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| Model | model | The model from which a table should be selected by the user  | 
      
| Table | preselect | (Optional) A table which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Table | The selected table or null if the user cancels out of the dialog  | 
      
SelectTable(Table, string)
Displays a dialog that allows the user to select a table from the model.
public static Table SelectTable(Table preselect = null, string label = "Select table:")
  Parameters
| Type | Name | Description | 
|---|---|---|
| Table | preselect | (Optional) A table which is preselected when the dialog is shown  | 
      
| string | label | (Optional) A label to be shown within the dialog  | 
      
Returns
| Type | Description | 
|---|---|
| Table | The selected table or null if the user cancels out of the dialog  | 
      
SuspendWaitForm(Action)
Hides the "Please wait" spinner while performing the specified action. Useful if the action displays custom dialogs / UI to the end user.
public static void SuspendWaitForm(Action action)
  Parameters
| Type | Name | Description | 
|---|---|---|
| Action | action | 
Remarks
Built-in script UI such as the Info(string, int) and SelectMeasure(IEnumerable<Measure>, Measure, string) functionality will automatically hide the "Please wait" spinner.
SuspendWaitForm<T>(Func<T>)
Hides the "Please wait" spinner while performing the specified action. Useful if the action displays custom dialogs / UI to the end user.
public static T SuspendWaitForm<T>(Func<T> action)
  Parameters
| Type | Name | Description | 
|---|---|---|
| Func<T> | action | 
Returns
| Type | Description | 
|---|---|
| T | 
Type Parameters
| Name | Description | 
|---|---|
| T | 
Remarks
Built-in script UI such as the Info(string, int) and SelectMeasure(IEnumerable<Measure>, Measure, string) functionality will automatically hide the "Please wait" spinner.
Warning(string)
Displays a warning message in a popup dialog. When the script is running in the CLI, a warning message is written to the console.
public static void Warning(string message)
  Parameters
| Type | Name | Description | 
|---|---|---|
| string | message |