Skip to content

Content

The Content tab lists sheets that include TeamOne content so you can quickly navigate TeamOne Explorations and formulas. From here you can trigger actions on the active sheet—Expand/Collapse exploration rows, Upload data back to IBM Planning Analytics (TM1), Drill-through to detailed data, Increase/Decrease indent—and you can Recalculate all sheets that contain TeamOne content.

img

Recalculate

Recalculates all TEAMONE() formulas and the Exploration on the current sheet. Refresh time depends on your IBM Planning Analytics model complexity, the number of formulas on the sheet, and the volume of exploration data. It may take a few seconds or longer.

img

Expand/Collapse

Expands or collapses the selected exploration cell—equivalent to expanding/collapsing a consolidation element in the dimension subset editor in Explorer.

TeamOne will toggle the element state (collapsed → expanded or expanded → collapsed), then save and refresh the current sheet’s exploration.

img

Upload data

After you edit Exploration or TEAMONE() values in Google Sheets, you can upload (submit) the changes back to IBM Planning Analytics.

img

Drill-through

If drill-through links are defined in IBM Planning Analytics, you can drill through from TeamOne Explorations to view detailed data (cube views, databases, or files). Select an exploration cell in Google Sheets and choose Drill-through from the menu.

img

Increase indent

Google Sheets lacks built-in increase/decrease cell indentation. Increase indent adds one leading space to selected cells. This is helpful when defining a TM1 dimension hierarchy using space indentation.

img

Decrease indent

The opposite action—Decrease indent removes one leading space from the selected cells.

Recalculate all

Use Recalculate all to recalculate all sheets—or multiple selected sheets—that contain TeamOne content.


Add code

While PAW offers a web UI for TM1 modeling, it can still be tedious to build, document, and deploy changes. TeamOne lets you create/update TM1 cubes, views, dimensions, hierarchies, subsets, elements, and attributes; manage users, groups, permissions, and object security—without writing TI code by hand. In practice, you draft your model in Sheets (which doubles as living documentation), and TeamOne applies it to TM1 automatically.

Benefits:

  • Collaborate with your whole team on new requirements or change requests.
  • A requirements draft can replace up to 95% of manual development.
  • Involve analysts and business users (e.g., translate element captions) and sync them to TM1 in one click.
  • Documentation exists before implementation and stays updated as you change anything.
  • Prototype and implement real models in seconds.

TIP

This functionality requires the TM1 ADMIN group. The UI is hidden automatically for non-admin users.

Add code opens a template picker for:

  • Create/update cube
  • Create/update view
  • Create/update dimension hierarchy
  • Create/update subset
  • Manage cube security
  • Manage dimension security
  • Manage element security
  • Manage application security
  • Manage process security
  • Add prolog code
  • Add epilog code

Fill out the template and click ADD TO ACTIVE SHEET. You can then refine fields directly in the code block. When ready, Format and Run the code.

::cube

Use ::cube to create or update cubes. Specify the cube name in Column B.

Option / parameterDescription
-recreateRecreate the cube (no value needed in Column B). Useful in DEV when changing cube dimensions. Important: recreating deletes all cube data.
-captionSet a cube caption. Localize with multiple options in the form -caption:locale (e.g., -caption:en, -caption:fr). The locale must exist in the }Cultures dimension.
Dimension 1–NOne row per cube dimension, in the desired order (TM1 supports up to 256 dimensions).

Example: create an XR cube with 3 dimensions and an Exchange Rates caption. You can add other localized captions later.

img

See ::cube example

TIP

For existing cubes, generate a cube definition from the Model tab’s cube menu.

::view

Use ::view to create or update a cube view. Specify the view name in Column B.

Option / parameterDescription
-cubeCube name.
-subsetDefault subset in the form $SubsetName. Applied to omitted dimensions. If omitted, the $ALL keyword is used.
-aliasDefault alias applied to each created subset. Existing subsets keep their alias.
-recreateRecreate the default subset specified by -subset. For example, if -subset is [$LEAVES](#subset-keywords), this recreates LEAVES for each omitted dimension.
Dimension 1–NPut a dimension name in Column A, the subset/expression in Column B, and subset options in Column C. Use R:dimensionName or C:dimensionName to mark row/column axes.

Column B accepts:

  • A semicolon-delimited element list, e.g. Actual;Budget;Forecast
  • An existing subset name as $SubsetName
  • System keywords $ALL, $LEAVES, $ROOTS (TeamOne creates these if missing using the MDX under Subset keywords)
  • A valid MDX expression, e.g. {[Calendar].[2022].Children}
  • Wildcard patterns: /*substring*/ or /2022 Q?/*
  • A subset keyword

You can combine elements, patterns, MDX, keywords, and MDX mods in a semicolon-delimited list, e.g.: Current period;Previous period;{[Calendar].[2022].Children};/2022 Q?/* If Column B is empty, the -subset option is used.

img

Column C holds subset options, e.g. -name:Total Company -alias:Caption_Base. See more under ::subset.

img

See ::view example

TIP

For existing cubes, generate a view definition from the Model tab’s cube or view menu.

::rule

Use ::rule to create or update cube rules.

Option / parameterDescription
-cubeCube name.
Rule line 1–NAdd as many lines as needed to define calculation rules.

::dimension

img

Use ::dimension to create or update dimensions. Put the dimension name in Column B. Starting Column C, define element attributes as AttributeName:AttributeType:AttributeLocale:

  • Type: S (string, default), A (alias), N (numeric)
  • Locale: element from the }Cultures dimension (optional)

You may omit Type and/or Locale; defaults to a non-localized string attribute. For example, TeamOne can create Caption (alias), MonthNumber (numeric), and MonthName (string) attributes:

img

Option / parameterDescription
-hierarchyCreate an alternative hierarchy; if omitted, updates the default hierarchy.
-recreateRebuild elements (no value in Column B). DEV only—deletes and rebuilds hierarchy. Important: data for deleted elements is lost.
-componentSortByInput (default) or ByName.
-componentOrderAscending (default) or Descending.
-elementSortByHierarchy (default), ByInput, ByName, or ByLevel.
-elementOrderAscending (default) or Descending.
-captionSet/localize a dimension caption via multiple -caption:locale entries. Locales must exist in }Cultures.
-subset.aliasAlias to use for Default and system subsets (ALL, LEAVES, ROOTS).
-subset.expandaboveEnable “expand above” on Default and system subsets.
-subset.dynamicMake Default and system subsets dynamic.
-subset.leavesExpression for LEAVES; falls back to $LEAVES.
-subset.allExpression for ALL; falls back to $ALL.
-subset.rootsExpression for ROOTS; falls back to $ROOTS.
Element 1–NOne row per element. Build hierarchy either with space indentation in Column A or by specifying parent in Column B. Append :S for string element or :-1 for child weight −1, etc. If attributes are defined in headers, populate values in their columns.

Example: build a Period dimension with 2022/2023 months, add en and fr captions, and create Default/system subsets:

img

See ::dimension example

Add a Fiscal Quarter alternative hierarchy:

img

See ::hierarchy example

::subset

Use ::subset to create or update subsets. Put the subset name in Column B.

Option / parameterDescription
-dimensionTarget dimension.
-hierarchyTarget hierarchy (optional); default hierarchy if omitted.
-aliasSubset alias.
-expandaboveSet the subset “expand above” flag (use False to disable).
-dynamicCreate a dynamic subset.
Element 1–NOne row per selection. See syntax below.

Column A accepts:

  • Element name
  • Semicolon-delimited list, e.g. Actual;Budget;Forecast
  • MDX, e.g. {[Calendar].[2022].Children}
  • Wildcards: /*substring*/ or /2022 Q?/*
  • Subset keywords

You can combine elements, patterns, MDX, keywords, and MDX mods, e.g.: Current period;Previous period;{[Calendar].[2022].Children};/2022 Q?/*

For instance, here are a few subsets for the Period dimension: (https://docs.google.com/spreadsheets/d/1wOI8onSk2GoOoVzSDh_EPbZj5pN5iQPPK62cDV3sr7k/edit#gid=416332645)

img

See ::subset example

TIP

For existing dimensions, generate a dimension or hierarchy definition from the Model tab’s dimension or hierarchy menu.

Subset keywords

TeamOne simplifies ALL, LEAVES, and ROOTS via keywords. Where supported (e.g., ::view, ::dimension), you can use a keyword instead of a subset name or MDX. TeamOne will create the subset if missing:

KeywordMeaning / MDX used when creating
$ALL“All members (hierarchized)”: {HIERARCHIZE({[dimensionName].[hierarchyName].members})}
$LEAVES“Level 0 members”: {TM1FILTERBYLEVEL({[dimensionName].[hierarchyName].members}, 0)}
$ROOTS“Top-level (no parent) members”: {FILTER({[dimensionName].[hierarchyName].members}, [dimensionName].[hierarchyName].CurrentMember.Parent.Name = "")}

MDX mods

Instead of writing full MDX, you can modify a base set using short MDX mods. This makes expressions easier for non-technical users.

Full MDX:

js
{ FILTER(
    { TM1FILTERBYLEVEL( { TM1DRILLDOWNMEMBER( {[Period].[Period].[FY2025]}, ALL ) }, 0 ) },
    [Period].[Period].[quarter] = "Q3"
) }

Equivalent with MDX mods:

js
FY2025 >> expand >> level=0 >> quarter=Q3

Wildcards are supported:

js
/FY20*/ >> descendants >> level=0 >> status=OP?N >> first=5

Append mods to a set after >>. Supported mods:

MDX modDescription
ancestorsFirst parent for each member. Wraps as: {HIERARCHIZE({GENERATE(${mdx}, UNION({[Dim].[Hier].CurrentMember.Ancestors}, {[Dim].[Hier].CurrentMember}))})}
ancestorsallAll parents for each member. Similar to above, using .AncestorsAll.
expandDrill down all members: {TM1DRILLDOWNMEMBER(${mdx}, ALL)}
childrenDirect children: {GENERATE(${mdx}, [${dim}].[${hier}].CurrentMember.Children)}
descendantsAll descendants: {DESCENDANTS(${mdx})}
distinctRemove duplicates: {DISTINCT(${mdx})}
first=<n>First n members: {HEAD(${mdx}, <n>)}
last=<n>Last n members: {TAIL(${mdx}, <n>)}
level=<n>Filter by level: {TM1FILTERBYLEVEL(${mdx}, <n>)}
sortascSort ascending: {TM1SORT(${mdx}, ASC)}
sortasc=<Attribute>Sort ascending by attribute: {ORDER(${mdx}, [Dim].[Attribute], ASC)}
sortdescSort descending: {TM1SORT(${mdx}, DESC)}
sortdesc=<Attribute>Sort descending by attribute: {ORDER(${mdx}, [Dim].[Attribute], DESC)}
<attribute>=<Val1|Val2,...>Attribute filter. Multiple values via pipe: quarter=Q1|Q2. Wildcards allowed. Maps to FILTER or TM1FILTERBYPATTERN depending on value.
toggle=<Elm1,Elm2,...>Toggle (expand/collapse) specific elements: {ToggleDrillState(${mdx}, {[Dim].[Hier].[Elm1]}, {[Dim].[Hier].[Elm2]}, ...)}

::element.rename

Use ::element.rename to rename dimension/hierarchy elements without losing data.

Option / parameterDescription
-dimensionDimension name.
-hierarchyHierarchy (optional; default hierarchy if omitted).
Element 1–NPut existing element names in Column A and new names in Column B. Non-existing elements are skipped (e.g., already renamed or typo).

img

See ::element.rename example

TIP

You can combine ::element.rename and ::dimension blocks on the same sheet to manage a dimension from one place.

::element.security

Use ::element.security to define element-level security.

Define group sets starting from Column C. In each group column you may use:

  • A subset name like $SubsetName
  • A single group name
  • A semicolon-delimited list, e.g. Group 1; Group 2; Group 3
  • MDX, e.g. {[}Groups].members}
  • Wildcards, e.g. /*substring*/ or /Sec*Level?/*
  • A subset keyword

You can combine patterns, MDX, keywords, and MDX mods within the same cell.

Option / parameterDescription
-recreateWipe all existing element security first.
-createGroupsCreate non-existing groups if needed.
-dimensionRequired dimension name.
-hierarchyOptional hierarchy name (default hierarchy if omitted).
Element 1–NOne row per element selector. Under each group column, set privileges: NONE, READ, WRITE, RESERVE, ADMIN, or LOCK. Blank defaults to NONE.

Element selector (Column A) supports:

  • A single element name
  • A semicolon-delimited element list (e.g. FY2022 Jan;FY2022 Feb;FY2022 Mar)
  • MDX (e.g. {[Period].[Fiscal Quarter].[FY2022 Q1].children})
  • Wildcards (e.g. /*substring*/ or /FY202? */*)
  • A subset keyword

img

See ::element.security example

TIP

Generate ::element.security from the Model tab’s dimension or hierarchy menu.

::dimension.security

Use ::dimension.security to define dimension and hierarchy security (hierarchy security introduced in IBM Planning Analytics 2.0.9.5).

Group definitions start at Column C. In each group column you may use subset names, single names, lists, MDX, or wildcards (same options as element security).

Patterns are great for alternate hierarchies—for example, /Product:/* targets all hierarchies of the Product dimension.

Option / parameterDescription
-recreateWipe all existing dimension/hierarchy security first.
-createGroupsCreate non-existing groups if needed.
Dimension/Hierarchy 1–NOne row per target in the form dimension:hierarchy (hierarchy optional). Under each group column, set privileges: NONE or READ. Blank defaults to NONE.

Selector syntax:

  • Dimension name (or dimension:hierarchy)
  • Semicolon list (e.g. Calendar:Fiscal Year;Employee;Job Type Assumption)
  • MDX (e.g. {[}Dimensions].members})
  • Wildcards (e.g. /*substring*/ or /Revenu?:*/)
  • Subset keywords

img

See ::dimension.security example

TIP

Generate ::dimension.security from the Model tab’s dimensions menu.

::cube.security

Use ::cube.security to define cube-level security.

Group definitions start at Column C. You may use subset names, single names, lists, MDX, or wildcards (same options as above).

Option / parameterDescription
-recreateWipe all existing cube security first.
-createGroupsCreate non-existing groups if needed.
Cube 1–NOne row per cube. Under each group column, set privileges: NONE, READ, WRITE, RESERVE, ADMIN, LOCK. Blank defaults to NONE.

Cube selector supports:

  • Cube name
  • Semicolon list (e.g. Calendar;Employee;Job Type Assumption)
  • MDX (e.g. {[}Cubes].members})
  • Wildcards (e.g. /*substring*/ or /Revenu?/*)
  • Subset keywords

img

See ::cube.security example

Cube dimension security

When you grant cube access (e.g., READ on Revenue to Group B), TeamOne ensures each dimension in that cube has at least READ—but preserves any stronger existing access (e.g., WRITE on Product remains WRITE).

TIP

Generate ::cube.security from the Model tab’s cubes menu.

::application.security

Use ::application.security to define application entry security.

Group definitions start at Column C. Same input options as other security blocks (subsets, names, lists, MDX, wildcards).

Option / parameterDescription
-recreateWipe all existing application security first.
-createGroupsCreate non-existing groups if needed.
Application 1–NOne row per application entry. Under each group column, set privileges: NONE, READ, or ADMIN. Blank defaults to NONE.

Application selector supports:

  • Entry name, e.g. Analysis\Employee.view
  • Semicolon list (e.g. Analysis\Employee.view;Analysis\Expenses.view)
  • MDX (e.g. "{TM1DRILLDOWNMEMBER( {[}ApplicationEntries].[Analysis]}, ALL, RECURSIVE )}")
  • Wildcards (e.g. /Reports\*/* or /Reports.????/*)
  • Subset keywords

img

See ::application.security example

Default application security

Use -recreate to default all application entries to READ, then restrict specific entries with NONE, READ, or ADMIN.

::process.security

Use ::process.security to define process security.

Group definitions start at Column C. Same input options as other security blocks (subsets, names, lists, MDX, wildcards).

Option / parameterDescription
-recreateWipe all existing process security first.
-createGroupsCreate non-existing groups if needed.
Process 1–NOne row per process. Under each group column, set privileges: NONE or READ. Blank defaults to NONE.

Process selector supports:

  • Process name
  • Semicolon list (e.g. copy_version;create_version;cache_views)
  • MDX (e.g. {[}Processes].members})
  • Wildcards (e.g. /*substring*/ or /*vers?ion*/*)
  • Subset keywords

img

See ::process.security example

::code.prolog

Use ::prolog.code (or simply ::code) to write prolog code. This is handy with Sheets formulas—for example, generate and populate TM1 functions based on cell values:

img

See ::code.prolog example

::code.epilog

Use ::epilog.code to write epilog code. This is also useful with Sheets formulas—for example, finalize/clean up after TM1 actions:

img

See ::code.epilog example

Comments

You can use single-line and multi-line comments in ::code blocks:

  • # comments a single line.
  • #[ and #] wrap a multi-line comment block.

img

See comments example

Format code

Formats code to read like documentation:

  • Code block headers: white text on indigo background
  • -options: italic text
  • Comments: grey text
  • Alternating row backgrounds
  • Row grouping by code block

Run code

Executes the code blocks on the current sheet.