Planning Analytics / TM1 Migration Readiness

When preparing to migrate a TM1 / IBM Planning Analytics model from an on-premises infrastructure to cloud, upgrade from an older Planning Analytics version to a newer one, or perform an audit of existing processes and chores, it is useful to understand how Turbo Integrator (TI) Processes and Chore definitions are represented in the underlying model files.

TI Processes (.pro) and Chore (.cho) files are TM1 object definition files stored in the data directory for v11 and earlier implementations of TM1. Within these files, many properties are represented by numeric control codes. Understanding these codes makes it possible to perform offline discovery against a copy of the model folder, even when the TM1 database is not running and cannot be accessed through Planning Analytics Workspace, the REST API, or TM1py.

This offline approach is especially useful during migration planning. Processes that use ODBC data sources, file-based data sources, cube views, dimension subsets, SAP/ODBO sources, Security Access, Unicode ODBC settings, or hard-coded paths can be identified quickly and grouped for further review.

For Planning Analytics as a Service and TM1 Database 12 migrations, ODBC processes may require changes to connector names, exposed data-source names, credentials, certificates, firewall/egress rules, or connector endpoints. File-based processes may need to be reviewed against the target environment’s file content area, File Manager, upload process, API approach, or approved integration pattern.

The same approach is also valuable for audit and governance. For example, processes with Security Access enabled can be identified and reviewed separately, since they are allowed to modify TM1 security data. Chore files can also be scanned to understand which processes are scheduled, whether chores are active, how frequently they run and whether they use single or multiple commit mode.

This article does not aim to provide a step-by-step guide to bulk editing model files. Instead, it explains how the control codes can be used for offline interrogation, migration impact analysis, audit, source-control comparison, and controlled remediation planning.

How to read the TI Process files

Most “records” are stored as <code>,<value> pairs.

Some records are multiline count blocks. For example, a script section for Prolog, Metadata, Data or Epilog can look like:

				
					572,10
				
			


<10 Prolog lines follow>

When lines are added to a script block, the count after 572, 573, 574, or 575 is updated accordingly when the process is saved. Manual updates are possible but ill advised.

The same principle applies to data source variable blocks such as 577 through 582.

Code 565 is rather unique as it has encrypted data and stores the data-source password along with other internal information. The encrypted value of Code 565 changes on saving the process and should not be altered manually.

TI Process Control Codes

The below control codes relate to those found in a “.pro” file. There are some standard control codes for every process. Depending on what your process does, you may see a different set of these control codes e.g. those with a data source, those using the old mappings etc.

Observed / Known TI Process Control Codes

Code

Purpose / Friendly Name

Notes

601

FileVersionNumber

.pro file format/version record. Commonly observed as 100

602

Name

Process name.

562

DataSourceType

Data source type. Examples include None, Text (CharacterDelimited, PositionDelimited), ODBC, Cube View, Dimension Subset, ODBO/SAP-type sources depending on version.

586

DataSourceNameForServer

Server-side data source name/path.

585

DataSourceNameForClient

Client-side data source name/path.

564

DataSourceUserName

Data source username.

565

DataSourcePassword

Encrypted/hash-like password payload. Do not manually edit; often excluded from source-control diffs.

559

ODBCInterfaceUsesUnicode

ODBC Unicode flag.

928

TargetActiveSandbox

Target active sandbox setting.

593

DataSourceODBOProvider

ODBO provider e.g. TM1OLAP

594

DataSourceODBOLocation

ODBO location/server.

595

DataSourceODBOCatalog

ODBO catalog.

597

DataSourceODBOSAPClientID

ODBO SAP client ID.

598

DataSourceODBOSAPClientLanguage

ODBO SAP client language.

583

DataSourceOleDbMdp

OLE DB Multidimensional Data Provider

596

DataSourceODBOConnectionString

ODBO connection string.

800

DataSourceODBOHierarchyName

ODBO hierarchy name.

801

DataSourceODBOCubeName

ODBO cube name.

802

DataSourceODBOHierarchyFilterLevels

ODBO hierarchy filter levels

803

DataSourceODBOHierarchyFilterLevelMembers

ODBO hierarchy filter level members

566

DataSourceQuery

SQL, MDX, or other query text depending on source type.

567

DataSourceASCIIDelimiter

Delimiter for ASCII/text data source.

588

DataSourceASCIIDecimalSeparator

Decimal separator for ASCII/text source.

589

DataSourceASCIIThousandSeparator

Thousand separator for ASCII/text source.

568

DataSourceASCIIQuoteCharacter

Quote character for ASCII/text source.

570

DataSourceCubeView

Cube view data source.

571

DataSourceDimensionSubset

Dimension subset data source.

569

DataSourceASCIIHeaderRecords

Number of header records for ASCII/text source.

592

OnMinorErrorDoItemSkip

Minor-error behaviour: skip item setting.

599

MinorErrorLogFileMax

Minor-error log maximum setting.

560

ParametersNames

Multiline parameter-name block.

561

ParametersTypes

Multiline parameter-type block. TM1Forum observations show 1 for numeric and 2 for string.

590

ParametersDefaultValues

Multiline parameter default values.

637

ParametersPromptStrings

Multiline prompt strings.

577

VariablesNames

Multiline variable-name block.

578

VariablesTypes

Multiline variable-type block. TM1Forum observations show 1 numeric and 2 string.

579

VariablesPositions

Multiline variable positions/order.

580

VariablesStartingBytes

Fixed-width starting byte positions.

581

VariablesEndingBytes

Fixed-width ending byte positions.

582

VariablesUIData

Variable Types: 32=String,33=Numeric, Type-Indicates Ignore,Other(827) etc.

931

DataSourceSAPShowSAPTechnicalNames

Show / use SAP technical names

603

VariablesUIDataEx

Extended variable UI / mapping metadata. Dimension mapping.

572

PrologProcedure

Multiline Prolog script block. Number of lines in Prolog.

573

MetaDataProcedure

Multiline Metadata script block. Number of lines in Metadata.

574

DataProcedure

Multiline Data script block. Number of lines in Data.

575

EpilogProcedure

Multiline Epilog script block. Number of lines in Epilog.

576

UIData

Maps tab / UI data, including generated action settings e.g. DataAction, CubeAction, CubeLogChanges,_ParameterConstraints

930

UIDataMore

Additional UI data.

638

Complete

Process-complete / syntactically complete flag. 0=Saved with errors/Incomplete, 1=Saved syntactically correct code.

804

DataSourceUseCallerProcessConnection

Use caller process connection setting.

1217

GrantSecurityAccess

Security Access: 0=No, 1=Yes

Process lines

Purpose

601,100

FileVersionNumber

602,”~S-SaveDataAll”

Name

562,”NULL”

DataSourceType

586,

DataSourceNameForServer

585,

DataSourceNameForClient

564,

DataSourceUserName

565,”bQas…T@Ol”

DataSourceEncryptedData

559,1

ODBCInterfaceUsesUnicode

928,0

TargetActiveSandbox

593,

DataSourceODBOProvider

594,

DataSourceODBOLocation

595,

DataSourceODBOCatalog

597,

DataSourceODBOSAPClientID

598,

DataSourceODBOSAPClientLanguage

596,

DataSourceODBOConnectionString

800,

DataSourceODBOHierarchyName

801,

DataSourceODBOCubeName

566,0

DataSourceQuery

567,”,”

DataSourceASCIIDelimiter

588,”.”

DataSourceASCIIDecimalSeparator

589,

DataSourceASCIIThousandSeparator

568,””””

DataSourceASCIIQuoteCharacter

570,

DataSourceCubeView

571,

DataSourceDimensionSubset

569,0

DataSourceASCIIHeaderRecords

592,0

OnMinorErrorDoItemSkip

599,1000

MinorErrorLogFileMax

560,0

ParametersNames

561,0

ParametersTypes

590,0

ParametersDefaultValues

637,0

ParametersPromptStrings

577,0

VariablesNames

578,0

VariablesTypes

579,0

VariablesPositions

580,0

VariablesStartingBytes

581,0

VariablesEndingBytes

582,0

VariablesUIData

931,1

DataSourceSAPShowSAPTechnicalNames

  

603,0

VariablesUIDataEx

572,5

PrologProcedure

 

Prolog line 1

#****Begin: Generated Statements***

Prolog line 2

#****End: Generated Statements****

Prolog line 3

 

Prolog line 4

SaveDataAll;

Prolog line 5

573,3

MetaDataProcedure

 

Metadata line 1

#****Begin: Generated Statements***

Metadata line 2

#****End: Generated Statements****

Metadata line 3

574,3

DataProcedure

 

Data line 1

#****Begin: Generated Statements***

Data line 2

#****End: Generated Statements****

Data line 3

575,3

EpilogProcedure

 

Epilog line 1

#****Begin: Generated Statements***

Epilog line 2

#****End: Generated Statements****

Epilog line 3

576,CubeAction=1511DataAction=1503CubeLogChanges=0

UIData

930,0

UIDataMore

638,1

Complete

804,0

DataSourceUseCallerProcessConnection

1217,0

GrantSecurityAccess

900,

DataSourceSAPClientId

901,

DataSourceSAPLanguage

902,

DataSourceSAPAddConnParams

903,

DataSourceSAPInfoCubeName

906,

DataSourceSAPCharacteristicName

929,

DataSourceTopProcessName

907,

DataSourceSAPHierarchyName

908,

DataSourceSAPHierarchyVersion

904,0

DataSourceSAPInfoCubeCharacteristics

905,0

DataSourceSAPInfoCubeKeyFigures

909,0

DataSourceSAPCharacteristicAttributes

911,

DataSourceSAPUserFilter

912,

DataSourceSAPRoleFilter

913,

DataSourceSAPTableName

914,

DataSourceSAPExchangeType

915,

DataSourceSAPCurrencyFrom

916,

DataSourceSAPCurrencyTo

917,0

DataSourceSAPUsingRoleAuths

918,1

DataSourceSAPUsingTexts

919,0

DataSourceSAPInfocubeRestrictions

920,50000

SAPPacketSize

921,””

DataSourceSAPMaxDateFrom

922,””

DataSourceSAPMinDateTo

923,0

DataSourceSAPCharactHierProps

924,””

DataSourceSAPCharactAttrMaxDateFrom

925,””

DataSourceSAPCharactAttrMinDateTo

926,””

DataSourceSAPCharactTextsMaxDateFrom

927,””

DataSourceSAPCharactTextsMinDateTo

A cautionary note. Processes can have one data source defined in the process properties but this can be changed or extended inside the Prolog, Metadata, Data, or Epilog sections.

For example, file names, ODBC DSN/Username/Password, output paths, AsciiOutput, TextOutput, ODBCOpen, ExecuteCommand, or DatasourceNameForServer assignments may appear inside the script blocks and alter what is seen in the initial datasource.

Ensure that you review Processes matching your search criteria to fully understand what the final usage is and how you would need to address this for the migration.

When reviewing security-sensitive processes, include both direct process execution and Chore execution. A Process with Security Access enabled may be locked down directly but still be executable through a Chore if the Chore security allows it. This makes the Process-to-Chore relationship an important discovery during audit and migration reviews.

 

Legacy SAP Connector Control Codes

The codes below are included for completeness and are particularly useful during upgrade or cloud-readiness reviews because they can identify legacy SAP/ODBO dependencies that may need to be retired, replaced, or revalidated.

The table is not sorted but left in the order typically observed in a Process.

Code

Constant / practical purpose

Notes

931

DataSourceSAPShowSAPTechnicalNames

Show / use SAP technical names (Duplicated here for completeness)

900

DataSourceSapClientId

SAP client ID.

901

DataSourceSapLanguage

SAP language.

902

DataSourceSapAddConnParams

SAP additional connection parameters.

938

DataSourceSapConnectionType

SAP connection type.

937

DataSourceSapCurrencyFrom

SAP currency-from setting.

936

DataSourceSapSystemNumber

SAP system number.

935

DataSourceSapRouterString

SAP router string.

934

DataSourceSapCodepage

SAP code page.

932

DataSourceSapInfoCubeThreadCount

SAP InfoCube thread count.

933

DataSourceSapInfoCubeThreadingCharacteristics

SAP InfoCube threading characteristics.

903

DataSourceSapInfoCubeName

SAP InfoCube name.

906

DataSourceSapCharacteristicName

SAP characteristic name.

929

DataSourceTopProcessName

Top/source process name, often relevant for generated connector processes.

907

DataSourceSapHierarchyName

SAP hierarchy name.

908

DataSourceSapHierarchyVersion

SAP hierarchy version.

904

DataSourceSapInfoCubeCharacteristics

SAP InfoCube characteristics.

905

DataSourceSapInfoCubeKeyFigures

SAP key figures.

909

DataSourceSapCharacteristicAttributes

SAP characteristic attributes.

910

DataSourceSapCharacteristicHierarchies

SAP characteristic hierarchies

911

DataSourceSapUserFilter

SAP user filter.

912

DataSourceSapRoleFilter

SAP role filter.

913

DataSourceSapTableName

SAP table name.

914

DataSourceSapExchangeType

SAP exchange type.

915

DataSourceSapCurrencyFrom

SAP currency-from setting. Seems both 915 and 937 have similar naming.

916

DataSourceSapCurrencyTo

SAP currency-to setting.

917

DataSourceSapUsingRoleAuths

SAP use role authorizations flag.

918

DataSourceSapUsingTexts

SAP use texts flag.

919

DataSourceSapInfocubeRestrictions

SAP InfoCube restrictions.

920

SapPacketSize

SAP packet size.

921

DataSourceSapMaxDateFrom

SAP max date-from setting.

922

DataSourceSapMinDateTo

SAP min date-to setting.

923

DataSourceSapCharactHierProps

SAP characteristic hierarchy properties.

924

DataSourceSapCharactAttrMaxDateFrom

SAP characteristic-attribute max date-from.

925

DataSourceSapCharactAttrMinDateTo

SAP characteristic-attribute min date-to.

926

DataSourceSapCharactTextsMaxDateFrom

SAP characteristic-texts max date-from.

927

DataSourceSapCharactTextsMinDateTo

SAP characteristic-texts min date-to.

Practical Notes for Source Control and Automation

For .pro comparisons, exclude or normalize code 565 from comparisons and source code diffs as it can change without any meaningful logic change when the process is saved.

For .pro editing, avoid manual edits unless you understand related sections. Not every line is a control-code record. Maintaining the line counts and related metadata blocks is critical to avoid corrupted processes.

Script sections 572 to 575, parameters 560/561/590/637 and Variables 577 to 582/603 must remain internally consistent i.e. line counts must reflect the same number and have the relevant details for the section.

For migrations, use offline scanning to build the inventory and impact assessment, then apply changes through controlled methods such as the user interface, REST API, TM1py, deployment tooling, or carefully tested file-based updates where appropriate.

Chore Control Codes

A Chore file, .cho,  is a container for one or more TM1 processes, with properties such as Name, StartTime, Frequency, ExecutionMode, and Tasks (TI Processes to execute).

Chore scanning is particularly useful during cutover planning because it identifies active schedules, disabled schedules, process execution order, parameterized process calls, and commit mode.

Just like with Processes, values and parameters are assigned to control codes that dictate the Chore’s behaviour.

Observed / Known Chore Control Codes

Code

Purpose/ Friendly Name

Notes

534

Chore file format/version header

534,9 in older examples and 534,10 in newer examples. Appears at the top of the .cho file.

535

Chore name / display label

Example: 535,Daily Backup 9pm.

530

Chore start date/time

UTC/Z timestamp in YYYYMMDDHHMMSS format. Example: 20260522230100 = 2026-05-22 23:01:00 UTC. TM1Forum notes this is the scheduled start basis, not a continuously updated “next run” value.

531

Chore frequency / interval

DDDHHMMSS: days, hours, minutes, seconds. Example: 001000000 = every 1 day.

532

Number of processes/tasks in the chore

Multi-code section. Integer count of called processes. Codes 13, 6, 560 relate to each process in the chore.

13

Task/process-reference marker

Observed before a task’s process-name line, commonly as 13,16. This appears to be an internal object/task marker rather than a user-facing chore property.

6

Referenced process name within a chore task

Example: 6,”Server Backup” or 6,”Save Data”.

560

Parameter count / parameter-value block for the preceding task

Example: 560,0 means no parameters passed to that process task.

533

Active flag

1 = Active, 0 = Inactive.

1405

Multiplecommit / execution mode flag

1 = Multiple commit and 0 = Single commit.

Chore lines

Notes

534,10

.cho file format/version record. Commonly observed as 10

535,Daily Save

Chore name / label.

530,20260522230100

Start basis: 2026-05-22 23:01:00 UTC

531,001000000

Frequency: every 001 days, 00 hours, 00 minutes, 00 seconds.

532,1

Count of Processes or tasks in the chore. In this case just the one.

13,16

Internal task/process-reference marker.

6,”Server Backup”

The Process called by the task.

560,0

No parameters passed to Process being called.

533,1

0=Inactive/not scheduled, 1 is Active.

1405,0

0=Single-commit, 1=Multi-commit mode

Use-Cases for Offline Search

Use-case

Purpose

Offline cloud-readiness inventory

Classify processes as low-risk, file-dependent, ODBC-dependent, SAP/ODBO-dependent, security-sensitive, or schedule-sensitive.

Process-to-chore dependency mapping

Identify which processes are manually executed only, chore-driven only, or both.

Cutover planning

Identify active chores that should be disabled, rescheduled, or monitored during migration.

Chore security review

Identify cases where a sensitive process may be executable through a chore even if direct process access is restricted.

Security Access audit

Find 1217,1 processes and review who can run them, directly or indirectly.

Credential remediation

Identify processes with stored ODBC credentials and plan secure credentials reset or connector configuration.

Unicode consistency review

Identify ODBC processes where Unicode settings should be validated against source data and driver/connector behaviour.

Hard-coded path discovery

Find file dependencies in both data-source fields and script blocks.

Legacy connector decommissioning

Identify SAP/ODBO-related processes that may need replacement or retirement.

Source-control diff cleanup

Normalize noisy fields such as encrypted data-source values so that code reviews focus on meaningful changes.

Environment comparison

Compare development, test, and production for differences in data sources, Security Access, chore schedules, and process completeness.

Incomplete process detection

Use 638 to identify processes saved with errors or incomplete syntax.

Testing prioritisation

Prioritise migration testing for processes with external dependencies, security changes, chore execution, or file exports.

Parameter review

Identify processes and chores that depend on runtime parameters, especially where parameter values are stored in chores.

Sandbox review

Use the target sandbox setting to identify processes that may behave differently in sandboxed environments.

Conclusion

Understanding TM1 Process and Chore control codes provides a practical way to interrogate a TM1 model offline. This is especially useful when the database is not running, cannot yet be connected to, or needs to be assessed before migration, upgrade, audit, or cutover activity begins.

The value of this approach is not simply that individual values or directives can be found in .pro and .cho files. The greater value is that the files can be scanned at scale to build an inventory of external dependencies, security-sensitive processes, scheduled activity, file-path usage, ODBC usage, legacy connector usage, unicode settings, and environment-specific configuration.

This makes control-code analysis a useful companion to Planning Analytics Workspace, the REST API, TM1Py, and other administration tools. Online tools are better suited for supported updates against a running model, while offline file analysis is valuable for discovery, comparison, triage, and migration planning.

Direct editing of process and chore files should be avoided and if really necessary, treated with care. Some sections contain line counts, encrypted values, generated metadata, and version-specific internal properties. For that reason, the safest use of these control codes is to identify impact, prioritise remediation, support governance reviews, and guide controlled updates that are then validated in a non-production environment.

In short, control codes turn the model’s data folder into a searchable source of migration and audit intelligence. Used carefully, they can reduce manual review effort, highlight hidden dependencies, and improve confidence before moving or changing a Planning Analytics model.

 

If you are looking at a migration to cloud, reviewing or auditing your model(s) and need assistance, please contact us and we will be happy to engage and advise further.

 

Sources: www.tm1forum.com, www.ibm.com (various pages), code.cubewise.com, exploringtm1.com

 

Disclaimer: This document does not server to replace the TM1 Migration utility provided by IBM which analyses your models in much the same way to highlight potential issues ahead of a v12/v3.1.x migration.

The reader undertakes to make any changes to the code at their own risk and understands that this article is to be used as a guideline and does not advocate a global “search and replace” strategy.