The Definitive Guide to Turbo Integrator Troubleshooting
Turbo Integrator Overview
Turbo Integrator (TI) Processes are scripts that execute within the TM1 server to perform data manipulation. Most TI Processes use a data source which is processed line by line.
There are 7 major sections to a Process:
- Data source Settings
- Data source Variables
Data source Settings
Here you can change the file/query that is being imported. It’s important when sourcing data from a file to have the “Data source Name for Server” being the Path to the source file as known by the server. (From the Physical Machine that the server is running on).
Data source Variables
A variable will be added to this tab for every column/field in your data source. These are names for the relative information within each column and will be updated as the process is executed row by row.
These are variables which take a value from the user who is running the process by prompting him/her to fill them when the process is executed.
This is a place for the initial code for the process to run. Code entered here is executed once at the very beginning of the process before the data source file/query is opened/executed.
The code entered here is executed once per line in the data source. Each time the process moves to the next line it updates the Data source Variables with the data from the new line and respective column. Primarily for Meta Changes (Dimensions/Elements/Subsets/Cubes/Views)
The code entered here is executed once per line in the data source. Each time the process moves to the next line it updates the Data source Variables with the data from the new line and respective column. Primarily for Data Changes (Sending Data into a cube)
Turbo Integrator Syntax
Turbo Integrator Code is similar to C++ in that every line of code must be terminated with a semicolon.
The logical operators: for ‘and’ and ‘or’ are ‘&’ and ‘%’ respectively.
The Assignment operator is ‘=’.
Arithmetic operators +,-,*, / are all valid.
The Comparative operators are =,>,<,>=,<=,<> for Numeric data .
The Comparative operators are ‘@=’ or ‘@<>’ for Textual data.
IF( mystring @= ‘Hello World’);DOAFUNCTION(parameter1, parameter2, parameterN); ENDIF;
IF( mynumber >= 2);mynumber= mynumber-1; ENDIF;
More information on the operators used in TI processes can be found here.
Checking for Problems in Turbo Integrator
The best way to check a Process for errors is the Message Log. This is accessed by right clicking on the server (In Sever Explorer) and selecting “View Message Log…”.
A Process can finish execution in 5 ways:
- Completely Successfully
- With Errors
- Process Aborted
- With ProcessBreak, ProcessError, ProcessQuit (TI Functions)
- With Process Canceled (From TM1 Top or User)
By double clicking on the error line you can directly access the Process Log.
Turbo Integrator Error/Abort Cheat Sheet
We have a full cheat sheet of Turbo Integrator Error and Abort codes here.
Backing Out Changes (Where Possible)
Under specific circumstances, data changes made to a cube can be ‘Backed out’ via the TM1 Transaction Log. In order for this to be possible the cube must have logging enabled (“}cube_properties” control cube).
To back out data changes:
- Right Click on the Server within “Server Explorer”
- Select “View Transaction Log”
- Select the Date you wish to search from
- Select the Cube and/or User (who’s actions you wish to reverse)
- Execute the Search
- Highlight the items you wish to “back out”
- Under “View” click “Select”
- Under “View” click “Back out”
Additional commentary on the TM1 Transaction Log is available here.
Process in Process
In Turbo Integrator, processes can execute other processes, This is particularly useful for executing a group of processes from a Single Process with given parameters. This saves the user from having to enter in the parameters into each of the child processes.
EXECUTEPROCESS (‘ProcessName’,’NameOfVariable1’,Variable1Value ,… );
A more complete discussion of the ExecuteProcess command can be found here.
Using ASCIIOUTPUT/Logging to Debug
When troubleshooting complex Processes that use a lot of nested conditional statements, the “ASCIIOUTPUT” function helps to determine flow of the Program and further more reveal hidden issues. This outputs the data given as parameters 2-20 to the file specified as parameter 1.
ASCIIOUTPUT (filename,item1,item2,itemN); ASCIIOUTPUT (‘Debug my issue.txt’, VariableImWorriedAbout, OtherVariables…);
Within the Metadata Tab of a Process:
File = ‘debug.txt’;iRow=iRow+1; IF(SomeValue = 1); IF(SomeOtherValue = 2); ASCIIOUTPUT (File, SomeValue, SomeOtherValue, “Did Something”); ELSE; ASCIIOUTPUT (File, SomeValue, SomeOtherValue, “Did Something Else”); ENDIF; ELSE; ASCIIOUTPUT (File, SomeValue, SomeOtherValue, “Made it to Else”); ENDIF;
The file called ‘debug.txt’ can be found in the server’s Data directory which contains the output of the process.
Further discussion on AsciiOutput can be read here.