TM1 Source Specification

Version 0.2.2

The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC2119 and updated by RFC8174 when, and only when, they appear in all capitals, as shown here.

Introduction

TM1 models are made up of any number of object definitions and data contained within them. The description of those objects, also known as the metadata, can be described by using ‘source code’ that subsequently can be maintained in a source control repository like GIT.

This document defines the various components that make up ‘the source’ for a TM1 model and their relationships as well as how the structure of such source repository can be used to imply such relationships.

Status

This document was published for TM1 Server version 11.5.0.

Source

A source defines a TM1 server object. A TM1 model can be defined by a collection of sources. The objects that can be defined by source include Chores, Cubes, Dimensions, Processes, etc. The precise definition of the source can be found in the source specification section.

Regular TM1 Object

A regular TM1 object is a kind of server object that can be described using a set of attributes, namely properties. The source of such object is a JSON object that contains the properties and the values of the properties. The JSON object is saved in a text file. The name of the file SHOULD be the name of the object. The extension of the file SHOULD be json.

Example 1: The source of a Cube in fileCube_A.json

{
  "Name": "Cube_A",
  "Dimensions":
  [
    { "@id": "Dimensions('Dimension_A')" },
    { "@id": "Dimensions('Dimension_B')" }
  ]
}

Collection Object

A collection object is a collection of TM1 objects of the same type. The source of a collection object is a JSON object that MUST be annotated with the object type, and MUST contain a value property that defines a TM1 object array. The JSON object is saved in a text file. The name of the file SHOULD have three parts, which are separated with the dot(.) character. The first part SHOULD be the name of the containing object, the second part SHOULD be the type name of the collection in lowercase, and last part SHOULD be a json extension.

Example 2: The source of a Hierarchies collection in file Dimension_A.hierarchies.json

{
  "@type": "Collection(Hierarchy)",
  "value":
  [
    {
      "Name": "Hierarchy_A",
      "Elements":
      [
        { "Name": "Element_A" },
        { "Name": "Element_B" }
      ]
    }
  ]
}

Binary Objects

The source of a binary file is the file itself. The Application files generated by the server are the sources of the Applications.

Git Integration

The TM1 server leverages Git to manage the source. TM1 administrators are expected to interact with Git to perform common management tasks, for example, create repositories, set access rights, delete branches, etc.

The TM1 server uses https, http, file, or git protocol to connect to Git.

Local installations only: When you use https, the Git server's certificates MUST be imported to the TM1 certificate database. A restart is required for the new certificates to take effect. No authentication is required for the file protocol, nor the git protocol. You do not need to import certificates for Planning Analytics on Cloud.

Example 5: Import and check certificates

TM1_INSTALL_PATH\gsk8capicmd_64.exe -cert -add -db ibmtm1trusted.kdb -stashed -label "tm1ca_v2" -file tm1ca_v2.der -format binary -trust enable
TM1_INSTALL_PATH\gsk8capicmd_64.exe -cert -validate -db ibmtm1trusted.kdb -label "tm1ca_v2" -stashed

The TM1 server creates a temporary folder for the Git file system. The folder, as well as the files in it, MUST not be manually modified until Git is uninitialized. Sources are stored in form of Git objects in the folder.

As being human readable, source could be created, updated, and deleted without a TM1 server, by using any text editors or IDEs. It is the TM1 designer's responsibility to ensure the correctness of the source and the integrity of the model.

The TM1 server provides a set of REST API actions to interact with Git.

Initialize Git

Action GitInit binds a remote Git repository to the TM1 server. It also initializes a Git context that stores the information of the Git-related operations, for example, the most recent Git branch that has been deployed. The Git context is persistent and server-scoped.

GitInit takes the following parameters:

  • URL: the URL of the Git repository. When present, the URL MUST match the URL in the Git context, if the Git context is not being reset.

  • Deployment: the selected deployment.

  • Username: the Git credential.

  • Password: the Git credential.

  • PublicKey: the SSH public key.

  • PrivateKey: the SSH private key paired with the SSH public key.

  • Passphrase: the passphrase for decrypting the SSH private key. When none of the credentials is specified, the server does not verify the connection to the Git. Otherwise, the connection must be valid. The credentials will be cached in the HTTP session.

  • Force: whether to reset the Git context.

  • Config: the Git configuration parameters. The configuration parameter http.proxy specifies the URL of the HTTP proxy via which the server can connect to the Git repository when the repository is on HTTPS.

If GitInit succeeded, the server updates the Git context with the new URL and Deployment, invalidates all the pending Git pull plans and Git push plans, and returns the status of the local Git context and the information of the Git server.

Example 6: Initialize Git to a repo at github.com

POST /api/v1/GitInit
{
  "URL": "https://github.com/tm1models/model.git",
  "Deployment": "dev",
  "Username": "username",
  "Password": "password",
  "Force": true,
  "Config":
  {
    "http.proxy": "http://localhost:8888/"
  }
}

Example 7: Initialize Git to a local bare repo

POST /api/v1/GitInit
{
  "URL": "file:///c:/model.git",
  "Deployment": "prod",
  "Force": false
}

Uninitialize Git

Action GitUninit frees the memory allocated for Git, deletes the Git temporary folder, and disables all Git-related functions except GitInit.

GitUninit takes the following parameters:

  • Force: whether to clean up Git context.

Check Git Status

Action GitStatus returns the Git context and the information of the Git server. The action also initializes Git if it is not initialized.

GitStatus takes the following parameters:

  • Username: the Git credential.

  • Password: the Git credential.

  • PublicKey: the SSH public key.

  • PrivateKey: the SSH private key paired with the SSH public key.

  • Passphrase: the passphrase for decrypting the SSH private key.

Deploy Source from Git

The first step to deploy a model is to execute the GitPull action to create a Git pull plan.

GitPull takes the following parameters:

  • Branch: the name of the branch or tag to fetch source from.

  • ExecutionMode: indicates whether to commit right after each operation performed during deploying the model, or to commit after all operations are done.

  • Force: a flag passed in for evaluating preconditions.

  • Username: the Git credential.

  • Password: the Git credential.

  • PublicKey: the SSH public key.

  • PrivateKey: the SSH private key paired with the SSH public key.

  • Passphrase: the passphrase for decrypting the SSH private key.

If the Git server is valid, the TM1 server fetches the last commit of the specified branch or tag. From the commit, the server reads and validates the tm1project file and the sources, and creates a GitPullPlan object. The GitPullPlan dynamically determines the actions to be done to deploy the source, based on the Git context, the hash of the source, and the hash of the server object. An action could be to create an object, to execute a TI or to set configurations, etc.

A GitPullPlan is bound to a specific Git commit. It is session-scoped, and can be addressed in the GitPlans entity set.

The second step to deploy a model is to execute the Execute action against the GitPullPlan. The server performs the actions required by the plan. If all the actions succeeded, the server updates Git context with the information gathered during the deployment. The Git context will be further used to determine what is the action to do for a certain object in the future deployment. It is also used to determine how to format the sources.

A GitPullPlan is deleted after a successful execution. It can be deleted explicitly from the GitPlans entity set.

Example 8: Deploy a model by using the action GitPull and Execute

POST /api/v1/GitPull
{
  "Branch": "CompanyModel",
  "ExecutionMode": "SingleCommit",
  "Force": true,
  "PublicKey": "public key",
  "PrivateKey": "private key",
  "Passphrase": "passphrase"
}
POST /api/v1/GitPlans('GIT_PLAN_ID')/tm1.Execute

Publish Source to Git

The first step to publish a model is to execute the GitPush action to create a Git push plan.

GitPush takes the following parameters:

  • Branch: the branch from which the last commit is used as the parent commit of the commit to create. If the Git repository is empty, this parameter MUST NOT be specified.

  • NewBranch: if specified, the server creates a new branch and push the new commit onto it; if not specified, the server pushes the new commit onto the branch specified by Branch. If the Git repository is empty, this parameter MUST be present to instruct the server to create a base commit.

  • Force: a flag passed in for evaluating preconditions.

  • Message: the commit message.

  • Author: the name of the commit author.

  • Email: the email of the commit author.

  • Username: the Git credential.

  • Password: the Git credential.

  • PublicKey: the SSH public key.

  • PrivateKey: the SSH private key paired with the SSH public key.

  • Passphrase: the passphrase for decrypting the SSH private key.

If the Git repository is valid, the TM1 server generates the sources of the server objects, creates a commit using the source files and sets the parent of the commit to the last commit of the branch specified in Branch. With the new commit, the server creates a GitPushPlan object.

The server generates the source of the Cubes, Dimensions, Processes, and Chores. The server does not generate the source of the private or control objects unless explicitly specified. The server formats the source based on the format information in the Git context.

A GitPushPlan is bound to a specific Git commit. It is session-scoped, and can be addressed in the GitPlans entity set.

The second step to publish a model is to execute the Execute action against the GitPushPlan object. The server pushes the commit to Git.

A GitPushPlan is deleted after a successful push. It can be deleted explicitly from the GitPlans entity set.

Example 9: Publish the changes to the model CompanyModel

POST /api/v1/GitPush
{
  "Branch": "CompanyModel",
  "Force": true,
  "Message": "Added some cubes",
  "author": "TM1 designer",
  "Email": "tm1designer@ibm.com",
  "Username": "username",
  "Password": "password"
}
POST /api/v1/GitPlans('GIT_PLAN_ID')/tm1.Execute

Deploy Only from Git

Action GitDeploy initializes Git, deploys a model, updates the Git context, and terminates Git.

GitDeploy takes the following parameters:

  • URL: the URL of the remote Git repository.

  • Deployment: the selected deployment.

  • Branch: the name of the branch or tag to fetch.

  • Force: a flag passed in for evaluating preconditions.

  • Username: the Git credential.

  • Password: the Git credential.

  • PublicKey: the SSH public key.

  • PrivateKey: the SSH private key paired with the SSH public key.

  • Passphrase: the passphrase for decrypting the SSH private key.

The action does not clean up the Git context.

Source Project

Resource !tm1project enables viewing and modifying the tm1project file (see TM1 Project for more details).

TM1 Project

Source Organization

The server uses the following schemes to name objects, link files, and folders:

  • Use an object’s name (key) as the file name of the source, use json as the extension.

  • Store root level server objects in folders named after the type of the object in lowercase. Root level server objects include Cubes, Dimensions, Processes, and Chores.

  • Store-specific collection objects in folders named after the name of the containing object followed by a dot followed by the type of the collection objects in lowercase. The collection objects include Dimension Hierarchies, Hierarchy Subsets, and Cube Views.

  • Link-specific object properties. The file name is the name (key) containing object. The extension is the type of the property in lowercase. The properties include Cube Rules, MDXView MDX, and Process Code.

  • The schemes can be overridden when specified.

Example 10: Source filenames

/cubes/Cube_A.json
/cubes/Cube_A.rules
/cubes/Cube_A.views/View_A.json
/cubes/Cube_A.views/View_B.json
/dimensions/Dimension_A.json
/dimensions/Dimension_A.hierarchies/Dimension_A.json
/dimensions/Dimension_A.hierarchies/Dimension_A.subsets/Subset_A.json
/processes/Process_A.json
/processes/Process_A.ti

TM1 Project File

A project file tm1project.json SHOULD be created for each model. It specifies how to deploy and publish the model. The content of the project file is a JSON object with properties explained in the following sections.

The project file can be manually modified on Git. The server exposes the project file as a !tm1project resource, which can be viewed (GET) and modified (PUT). The project file is a part of the Git context. When a model is successfully deployed, the project file in the deployed model becomes the project file of the server.

Version

Version is a REQUIRED property. It specifies the version of the project file. The server only accepts a project file that defines a valid version.

The current version is 1.0.

Example 11: Specify the version

"Version": 1.0

Name

Name is an OPTIONAL property. It specifies the name of the tm1project.

Settings

Settings is an OPTIONAL property. It defines the static configurations of the server. The server writes the settings to the tm1s.cfg file when it deploys a model.

The definition of this property is the same as the Configuration property of the REST API, with exceptions that the database directory MUST NOT be specified.

Example 12: Set the server name and HTTP port

"Settings":
{
  "Administration":
  {
    "ServerName": "Company Plan"
  },
  "Access":
  {
    "HTTP":
    {
    "Port": 9988
    }
  }
}

Tasks

Tasks is an OPTIONAL property. Each of its property defines an action that executes a Process or a Chore with certain parameters.

A Task MUST either have a Process or a Chore property. The property specifies the reference of the Process or Chore to be executed. The Process or Chore MUST be visible.

A Task MAY have a Parameters property. The property specifies the parameters to be passed to the Process. This property MUST NOT be specified if the task is to execute a Chore.

A Task MAY have a Dependencies property. The property specifies an array of URIs of tasks or objects, which will be executed or loaded, respectively, before executing the current task.

A Task MAY have a Precondition property. The server only executes a Task when either the precondition is not specified, or it is evaluated to TRUE.

The server only executes a Task one time during a deployment.

Example 13: Definition of Task_A and Task_B. For Task_A, the server executes Task_B if it has not been executed, and loads Cube_A if it has not been loaded, and then executes Process_A with Parameter_A and Parameter_B. For Task_B, the server executes Process_B without any parameters.

"Tasks":
{
  "Task_A":
  {
    "Process": "Processes('Process_A')",
    "Parameters":
    [
      {
        "Name": "Parameter_A", "Value":"Sample},
        "Name": "Parameter_B", "Value": 1}
      ]
    },
     "Task_B":
      {
            "Process": "Processes('Process_B')",
            "Parameters": [
                     { "Name": "Parameter_A", "Value": "Words"}, 
                     { "Name": "Parameter_B", "Value": 0 }
            ]
        }
    },
    "Dependencies":
    [
      "Tasks('Task_B')",
      "Cubes('Cube_A')"
    ]
  },
  "Task_B":
  {
    "Process": "Processes('Process_B')"
  }
}

Objects

Objects is an OPTIONAL property. Each of its property defines how to load some specific root level object(s).

An Object MAY have a Link property. The property specifies an object's source file name, or an object collection's source file or folder name. An object SHOULD have a unique file name. An object collection SHOULD have a unique file or folder name.

An Object MAY have a Dependencies property. The property specifies an array of URIs of tasks or objects, which will be executed or loaded, respectively, before loading the current object.

An Object MAY have a Precondition property. If specified, the server replaces an Object when the precondition is evaluated to TRUE.

For loading, the server creates an object if it does not exist, nor was deleted after the previous deployment. The server replaces an existing cube only if its dimensionality has changed, otherwise just updates its properties. The server replaces an existing dimension only if at least one of its hierarchies has changed, otherwise just updates its properties. The server replaces existing chores and processes if they have changed.

Objects MAY defines a Files property, which SHOULD only define a Link property for specifying a folder for the server to copy files listed in Files.

Example 14: Specify the folder for sources of all the cubes, the dependency of Cube_A, and the folder for binary files.

"Objects":
{
  "Cubes":
  {
    "Link": "/all_cubes.json"
  },
  "Cubes('Cube_A')":
  {
    "Dependencies":
    [
      "Cubes('Cube_B')"
    ]
  },
  "Files":
  {
    "Link": "/all_files/"
  }
}

Example 15: Execute Task_A and Task_B, then recreate Cube_A if '/dimensions/Dimension_A.json' has changed.

"Objects":
{
  "Cube('Cube_A')":
  {
    "Precondition": "HasChanged('/dimensions/Dimension_A.json')",
    "Dependencies":
    [
      "Tasks('Task_A')",
      "Tasks('Task_B')"
    ]
  }
}

Ignore

Ignore is an OPTIONAL property. It specifies the objects to be excluded from the source, if the object is newly created.

Wildcards can be used in the object name, if the object is not a control object. An exclamation mark can be prepended to the resource reference to indicate the server to include the object, even when the object is a control object.

Example 16: Exclude all the new Cubes and Views in the source, except Cube_A; include control Process }Drill_Drill_A; and exclude all the new Dimensions which has a name starting with 'Dim'.

"Ignore":
[
  "Cubes/Views",
  "!Cubes('Cube_A')",
  "!Processes('}Drill_Drill_A')",
  "Dimensions('Dim*')"
]

Files

Files is an OPTIONAL property. It specifies a list of files that the server copies to and from the /files folder for deploying and publishing a model, respectively.

The server copies the files before executing any PrePull and PostPush tasks. If there are files in folder }Applications being copied, the server also refreshes the public applications in the database. The server overrides existing files.

Wildcards can be used in the file name, but the file MUST NOT reside in the root database directory.

Example 17: Copy the files in folder '/}Applications', and the file /Cube_A.data.

"Files":
[
    "/}Applications/*",
    "/Cube_A.data"
]

Deployment

Deployment is an OPTIONAL property. Each of its property defines a named deployment and its specific properties.

All the tm1project properties can be redefined for a deployment, except Version. Those properties overrides the tm1project properties for the specific deployment. Current deployment is set by action GitInit.

Example 18: For Deployment Prod, execute Process_B for task_A; For other deployments, execute Process_A for Task_A.

{
  "Version": "1.0",
  "Tasks":
  {
    "Task_A":
    {
      "Process": "Process('Process_A')"
    }
  },
  "Objects":
  {
    "Cubes('Cube_A')":
    {
      "Dependencies":
      [
        "Tasks('Task_A')"
      ]
    }
  },
  "Deployments":
  {
    "Prod":
    {
      "Tasks":
      {
        "Task_A":
        {
          "Process": "Process('Process_B')"
        }
      }
    }
  }
}

PrePull, PostPull

PrePull and PostPull are OPTIONAL properties.

PrePull lists the tasks to execute before loading any Dimensions and Cubes when deploying a model. PostPull lists the tasks to execute after loading all the objects.

PrePush, PostPush

PrePush and PostPush are OPTIONAL properties.

PrePush lists the tasks to execute before generating any sources when publishing a model. PostPush defines the tasks to execute after all sources are created.

Example 19: Execute Task_A before writing server objects' source.

"PrePush":
[
  "Tasks('Task_A')"
]

Dependencies

Dependencies is an OPTIONAL property of an Object or a Task. It defines a list of objects and tasks to load and execute before loading or executing the containing object or task. There MUST NOT define circular dependencies.

Precondition

Precondition is an OPTIONAL property for an Object or a Task. It defines a logical expression.

The following functions can be used in the logical expression:

  • Exists: return TRUE when the specified file exists in source.

  • HasChanged: return TRUE when the specified file's hash has changed since last deployment.

  • UseForce: return the value of the Force property specified for action GitPull.

These functions MAY be used with logical operators AND, OR, and NOT, and parentheses ().

Example 20: A precondition.

"Precondition": "NOT UseForce() AND (Exists('/File_A.dat') OR HasChanged('/File_B.dat'))"

Absence of TM1 Project File

When a tm1project file is not present, the server loads the sources from all the default locations.

README File

A README.md file can be put into the source. If exists, the file will be added into any new commit without any modification. There is no interface for editing the file on the TM1 server side.

Source Specification

Schema

In the following description, if a field is not explicitly REQUIRED or described with a MUST, it can be considered OPTIONAL.

Chore Object

Objects that execute one or more processes of TM1 at a user-defined frequency.

Fixed Fields
Field Name Type Description
Name String REQUIRED. The name of the chore.
StartTime DateTimeOffset The start time of the chore.
DSTSensitive Boolean A Boolean that indicates whether the chore start time is sensitive to daily savings time.
Active Boolean A Boolean that indicates whether the chore is active.
ExecutionMode ChoreExecutionMode The execution mode of the chore, that is, single or multiple commit.
Frequency Duration The frequency of the chore.
Tasks Collection(ChoreTask) A collection of tasks that make up the chore.

ChoreExecutionMode Object

ChoreExecutionMode.

ChoreTask Object

A task to be completed as part of a Chore.

Fixed Fields
Field Name Type Description
Step Int64 A step in a task.
Process Process The process completed in the task.
Parameters Collection(ChoreTaskParameter) A collection of parameters for the task.

Cube Object

Represents a single cube on a TM1 server.

Fixed Fields
Field Name Type Description
Name String REQUIRED. Name of the cube as it is registered on the server.
Rules String Cube rules expand the standard hierarchical consolidation operations that you may define within a dimension.
DrillthroughRules String Drill-through processes can return query results against either cubes or relational tables.
Dimensions Collection(Dimension) Represents dimensions that perform calculations, control labels, and format data entry.
Views Collection(View) A View is a child object of a Cube. You can retrieve a list of available Views, or find a specific View using the appropriate methods in the Cube class. View objects can be queried for information (such as name or subsets) or changed. Executing a View results in a Cellset object, which can be used to read the actual cell data.

Dimension Object

A dimension is a broad grouping of descriptive data about a major aspect of a business, such as products, dates, or locations. Each dimension includes different levels of members in one or more hierarchies and an optional set of calculated members or special categories.

Fixed Fields
Field Name Type Description
Name String REQUIRED. The name of the dimension.
AllLeavesHierarchyName String A dimension with more than one hierarchy automatically gets a, system maintained, all leaves hierarchy. The name of this hierarchy, if no name is specified this hierarchy is called "Leaves", can be controlled with this AllLeavesHierarchyName property. Note that the all leaves hierarchy can also be added by calling the AddAllLeavesHierarchy action, which converts the dimension into a multi hierarchy dimension, if not one already, by adding a second, in this case the all leaves, hierarchy.
Hierarchies Collection(Hierarchy) For example, for the Years dimension, data can be organized into smaller groups, such as Years, Current Month, and All Dates.
DefaultHierarchy Hierarchy The default hierarchy of the dimension.

Edge Object

Represents the relationship between two or more hierarchies and their weight.

Fixed Fields
Field Name Type Description
ParentName String REQUIRED. The name of the parent of the component in the hierarchy.
ComponentName String REQUIRED. The name of the component in the hierarchy.
Weight Double The weight of the component in the edge.

Element Object

An element in a dimension that identifies the location of a cell in a cube.

Fixed Fields
Field Name Type Description
Name String REQUIRED. The name of the element.
Type ElementType The type of the element, one of Numeric, String, or Consolidated.

ElementType Object

ElementType.

Hierarchy Object

For example, you have separate dimensions for days, months, and quarters. You group them into a dimension called year.

Fixed Fields
Field Name Type Description
Name String REQUIRED. The name of the hierarchy.
Elements Collection(Element) REQUIRED. The elements of the hierarchy.
Edges Collection(Edge) The edges of the hierarchy.
Subsets Collection(Subset) The subsets of the hierarchy.

MDXView Object

A view of a cube that is defined by an MDX expression.

Fixed Fields
Field Name Type Description
MDX String REQUIRED. An MDX expression that defines a cube view.

NativeView Object

A native view of a cube.

Fixed Fields
Field Name Type Description
Columns Collection(ViewAxisSelection) The dimension elements that exist on the column axis of a view.
Rows Collection(ViewAxisSelection) The dimension elements that exist on the row axis of a view.
Titles Collection(ViewTitle) The dimension elements that exist as title (context) elements of a view.
SuppressEmptyColumns Boolean A Boolean that suppresses any columns that contain only zero values.
SuppressEmptyRows Boolean A Boolean that suppresses any rows that contain only zero values.
FormatString String The format of the elements in the view.

Process Object

A TurboIntegrator process that can be used to manipulate TM1 data and metadata.

Fixed Fields
Field Name Type Description
Name String REQUIRED. The name of a TurboIntegrator process.
HasSecurityAccess Boolean A Boolean that indicates whether the user security access to run this process.
Code String The code, the Prolog, Metadata, Data and Epilog procedures, executed throughout the various stages of the process.
DataSource ProcessDataSource The source of the data for the process.
Parameters Collection(ProcessParameter) Parameters used by the process.
Variables Collection(ProcessVariable) Variables used by the process.

ProcessDataSource Object

ProcessDataSource.

Fixed Fields
Field Name Type Description
Type String REQUIRED. Type.

ProcessParameter Object

ProcessParameter.

ProcessVariable Object

ProcessVariable.

Fixed Fields
Field Name Type Description
Name String REQUIRED. Name.
Type ProcessVariableType Type.
Position Int32 Position.
StartByte Int32 StartByte.
EndByte Int32 EndByte.

ProcessVariableType Object

ProcessVariableType.

Subset Object

Subset.

Fixed Fields
Field Name Type Description
Name String The name of the subset.
Expression String An MDX expression that defines the subset.
Hierarchy Hierarchy The hierarchies that are included in the subset.
Elements Collection(Element) The elements that are included in the subset.

View Object

A view of data in a cube.

Fixed Fields
Field Name Type Description
Name String REQUIRED. The name of the view.

ViewAxisSelection Object

ViewAxisSelection.

Fixed Fields
Field Name Type Description
Subset Subset Subset.

ViewTitle Object

ViewTitle.

Fixed Fields
Field Name Type Description
Subset Subset Subset.
Selected Element Selected.

Appendix A: TM1 Code Vocabulary

ibm.tm1.code.v1: TM1 Source Code Annotations

{
    "$Version": "4.0",
    "$Reference": {
        "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": {
            "$Include": [
                {
                    "$Alias": "Core",
                    "$Namespace": "Org.OData.Core.V1"
                }
            ]
        }
    },
    "ibm.tm1.code.v1": {
        "$Kind": "Schema",
        "$Alias": "Code",
        "@Core.Description": "Describes terms to augment your TM1 model 'source' for consumption by TM1 Server and other, aware, tools",
        "Link": {
            "$Kind": "Term",
            "@Core.Description": "A path to the file containing the actual 'source' for the annotated element, relative to the location of the 'source' it is used within"
        },
        "Links": {
            "$Kind": "Term",
            "$Collection": true,
            "@Core.Description": "A path to the file containing the actual 'source' for the annotated collection valued element, relative to the location of the 'source' it is used within"
        }
    }
}

Appendix B: TM1 Source Vocabulary

INTERNAL USE ONLY ibm.internal.tm1.source.v1: Combined TM1 Server API and 'Source' Schema Annotations

{
    "$Version": "4.0",
    "$Reference": {
        "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": {
            "$Include": [
                {
                    "$Alias": "Core",
                    "$Namespace": "Org.OData.Core.V1"
                }
            ]
        }
    },
    "ibm.internal.tm1.source.v1": {
        "$Alias": "tm1Source",
        "@Core.Description": "IBM INTERNAL USE ONLY! Describes terms to augment a combined TM1, OData compliant, REST API and model source definition based on a common, OData compliant, CSDL specification",
        "Include": {
            "$Kind": "Term",
            "$Type": "Core.Tag",
            "$DefaultValue": true,
            "$AppliesTo": ["EntityType", "ComplexType", "TypeDefinition", "EnumType", "Property", "NavigationProperty"],
            "@Core.Description": "Indicates that the tagged element can be defined as part of the 'source' for a TM1 model"
        },
        "Only": {
            "$Kind": "Term",
            "$Type": "Core.Tag",
            "$DefaultValue": true,
            "$AppliesTo": ["EntityType", "ComplexType", "TypeDefinition", "EnumType", "Property", "NavigationProperty"],
            "@Core.Description": "Indicates that the tagged element can only be defined as  part of the 'source' for a TM1 model"
        },
        "Required": {
            "$Kind": "Term",
            "$Type": "Core.Tag",
            "$DefaultValue": true,
            "$AppliesTo": ["Property", "NavigationProperty"],
            "@Core.Description": "Indicates that the tagged element is required as part of the 'source' for the element it is contained within"
        },
        "Documentation": {
            "$Kind": "Term",
            "$Collection": true,
            "$Type": "tm1Source.ParagraphType",
            "$Nullable": false,
            "$AppliesTo": ["Schema", "EntityType", "ComplexType", "TypeDefinition", "EnumType"],
            "@Core.Description": "Associates additional documentation with the tagged element"
        },
        "ParagraphType": {
            "$Kind": "ComplexType",
            "@Core.Description": "One of potentially multiple paragraphs of documentation associated with an element describing the source for a TM1 model",
            "MarkDown": {
                "@Core.Description": "Documentation using the MarkDown format"
            },
            "CodeSnippets": {
                "$Collection": true,
                "$Type": "tm1Source.CodeSnippetType",
                "$Nullable": false,
                "@Core.Description": "A collection of zero or more code snippets associated with the paragraph"
            }
        },
        "CodeSnippetType": {
            "$Kind": "ComplexType",
            "@Core.Description": "The source 'code' for the example in the specified format",
            "Format": {
                "$Nullable": true,
                "$DefaultValue": "JSON",
                "@Core.Description": "The format or language of the code in this snippet (eg JSON)"
            },
            "Code": {
                "@Core.Description": "The actual 'code' for this snippet"
            }
        },
        "FileExtension": {
            "$Kind": "Term",
            "$DefaultValue": "json",
            "$AppliesTo": ["Property", "NavigationProperty"],
            "@Core.Description": "The file extension expected to be used for files referenced, using a Code.Link annotation, to describe the value for this property"
        }
    }
}

Appendix C: Revision History

Version Date Editor(s) Notes
0.1.0-wd1 2017-10-25 Hubert Heijkers, Ling Jin Initial version
0.2.0-wd1 2018-06-07 Ling Jin Updated usage documentation
0.2.1-wd1 2018-06-12 Hubert Heijkers Merged docs, updated source schema
0.2.2-wd1 2019-02-18 Ling Jin Added examples and updated usage documentation