Product:
Planning Analytics 2.1.14
Microsoft Windows 2022 Server
Issue:
How call RUSHTI.EXE from TI process when using SSO with IntegratedSecurityMode=5 (CAM)?
https://github.com/cubewise-code/rushti
Solution:
Run the TM1 service (IBM TM1 Admin Server x64) and TM1 application service (IBM TM1 Server x64 – budget) with a windows account in your domain, that have rights inside your TM1 application (maybe ADMIN). The ExecuteCommand is run with the user who runs the TM1 service.
Go to Windows service, and for your TM1 service, change the log on from Local System to account (a service account that does not change password) in the domain.
To call RUSHTI from a TI process enter something like this:
sCMD = 'd:\rushti\rushti run --tm1-instance "Budget" --workflow "load data fast" --max-workers 8 --mode opt' ; ExecuteCommand(sCMD, 1);
https://github.com/cubewise-code/rushti/releases
To install RUSHTI.EXE you need to download the zip file, and unpack it to a folder on your server (d:\rushti)

Installation
- Download rushti-windows.zip (to start with, take this file https://github.com/cubewise-code/rushti/releases/download/v2.0.0/rushti-windows.zip )
- Extract to your desired location (keeps directory structure intact)
- Copy
config/config.ini.templatetoconfig.iniand configure your TM1 connections - (Optional) Copy
config/settings.ini.templatetosettings.inifor custom defaults - Run
rushti.exefrom command line
Note: This build uses PyInstaller’s onedir mode for fast cold starts.
Keep all files in the extracted directory together – the exe requires the bundled libraries.
You must have the files in the _internal folder, the files can not be replaced.
The config.ini contains the information to connect to your TM1 instance. Change for your environment, ports etc:
# The section name (e.g., [Budget]) is used as the instance identifier # in task files and command-line arguments. # For SSO set username to blank etc # Copy this file to config.ini and update with your actual TM1 server details. # the name of the tm1 application you should work with [Budget] # TM1 server hostname or IP address address=tm1servername.domain.com # REST API port (check your tm1s.cfg HTTPPortNumber setting) port=12387 namespace=AD gateway=http://caservername.domain.com:80/ibmcognos/bi/v1/disp user="" password="" # Set to True if password is base64 encoded decode_b64=False # Set to True if TM1 server uses HTTPS (check UseSSL in tm1s.cfg) ssl=True
Settings.ini is the file for defaults of the system to activate collection of data to database etc. It can look like this:
# RushTI Settings Configuration
# ==============================
#
# This file configures RushTI behavior settings, separate from TM1 connection
# settings in config.ini.
#
# Settings Precedence (highest to lowest):
# 1. CLI arguments (e.g., --max-workers 8)
# 2. JSON task file settings section
# 3. This settings.ini file
# 4. Built-in defaults
#
# To use this file:
# 1. Copy to settings.ini in the directory called config
# 2. Uncomment and modify the settings you need
# 3. Delete or leave commented any settings you want to use defaults for
# ------------------------------------------------------------------------------
# [defaults] - Common execution settings
# ------------------------------------------------------------------------------
[defaults]
# Maximum number of parallel workers
# Valid range: 1-100 (start with the same amount of CPU cores you have on the server)
# Default: 4
max_workers = 8
# Number of retries for failed process executions
# Valid range: 0-10
# Default: 0
# retries = 0
# Output file path for execution results summary CSV
# Set to a file path to create a summary CSV (e.g. rushti.csv)
# Leave empty or omit to skip creating the summary CSV
# Default: (empty - no CSV created)
result_file = rushti.csv
# Execution mode: 'norm' (normal) or 'opt' (optimized with dependencies)
# Default: norm
mode = opt
# ------------------------------------------------------------------------------
# [optimization] - Automatic task ordering optimization
# ------------------------------------------------------------------------------
[optimization]
# Enable automatic task optimization during execution.
# When enabled, ready tasks are sorted by estimated runtime (longest first)
# to maximize parallel efficiency. Dependencies are always preserved.
#
# Requires: [stats] enabled = true (needs historical data for estimates)
# Override: Use --no-optimize flag to disable for a specific run
#
# Default: false
# enabled = false
# ------------------------------------------------------------------------------
# [logging] - Enhanced logging settings / you must adjust this file to make it work
# ------------------------------------------------------------------------------
[logging]
# level = INFO
# file = /log/rushti.log
# ------------------------------------------------------------------------------
# [tm1_integration] - TM1 integration for reading taskfiles and logging results
# ------------------------------------------------------------------------------
[tm1_integration]
# Push execution results to TM1
# When enabled, the results CSV is uploaded to TM1 files after each run
# as: rushti_{workflow}_{run_id}.csv
#
# To set up TM1 integration:
# 1. Run: python rushti.py build --tm1-instance tm1srv01
# This creates the required dimensions and cube automatically.
# 2. Set push_results = true and configure default_tm1_instance below
#
# Default: false
push_results = true
# Automatically load results into TM1 cube after push
# When enabled (and push_results = true), calls }rushti.load.results TI process
# on the target TM1 instance after uploading the results CSV.
# The TI process must exist on the target instance.
#
# Default: false
# auto_load_results = false
# Default TM1 instance for reading taskfiles and writing results
# Used when --tm1-instance is specified without an instance, and for auto-upload
# Must be defined in config.ini, set the name for the section in config file.
default_tm1_instance = Budget
# Default cube name for task definitions and results
# The build command creates this cube with dimensions:
# - rushti_workflow: Workflow identifiers
# - rushti_task_id: Task sequence (1-5000 default elements)
# - rushti_run_id: "Input" for definitions, timestamps for results
# - rushti_measure: Task field measures
#
# Default: rushti
default_rushti_cube = rushti
# ------------------------------------------------------------------------------
# [stats] - SQLite stats database for execution history
# ------------------------------------------------------------------------------
[stats]
# Enable the stats database for storing execution history
# The stats database stores execution statistics for:
# - Optimization features (EWMA runtime estimation)
# - TM1 cube logging data source
# - Historical analysis via 'rushti db' commands
# Default: false
enabled = true
# Path to the SQLite database file
# Relative paths are resolved from the application directory
# Default: data/rushti_stats.db
db_path = data/rushti_stats.db
# Number of days to retain execution history
# Valid range: 1-365
# Default: 90
retention_days = 90

To create the RUSHTI cube, you run the command:
rushti build --tm1-instance "Budget"
If not using a CUBE for the tasks, you can use a TXT file. See link.
https://code.cubewise.com/open-source/tm1py/rushti/
To create an HTML file of the run information, enter command like below in the DOS prompt:
rushti tasks visualize --tm1-instance "Budget" --workflow "load data fast" --output dag.html
Open the dag.htlm file in your web browser (with javascript enabled).
In the RUSHTI cube, you can use the predecessors column to tell what process should be finish before this process start. In below example the process number 3 starts first when process 2 is finished.

in process filed, enter the name of the TI process to run.
In parameters field, when you have more parameters than one , they can be formatted like this:
{ "pVersion": "Prognos 1", "pYear": "2025" , "pMonth": "03" }
There is a colon (:) between the prompt and the value, and a comma (,) between the parameters, or the simpler format shown below will work (you need the space before ,):
pVersion=Budget , pYear=2026 , pMonth=01
If you have a path in your parameter, then you need to enter / (forward slash) instead of \. So it should look like this:
{ "pNewCube": "thecubename", "pFilePath": "D:/Tm1 Data/budget/Export/to_other/read/Budget_2026_01.csv" }
You need to create a element in dim Rushti_workflow for your tasks settings, this i called from the rush command. For it to know what task list it should execute on, in the cube. e.g. –workflow “load data fast”
More Information:
https://www.ibm.com/docs/en/planning-analytics/2.0.0?topic=pctf-executecommand
https://code.cubewise.com/blog/introducing-the-tm1py-universe/
Full documentation is available at cubewise-code.github.io/rushti/docs
https://code.cubewise.com/downloads/
https://code.cubewise.com/blog/run-processes-in-parallel-using-only-connection/