Data Model and Project Elements
Tables in a project often share column names: Period, Org, Account. A project element describes one of those names once, for the whole project. Every table with a column of that name then shows the same description, mask and dimension, so you stop retyping the same memo on dozens of tables.
The Data model page on Project Home lists a project’s elements, shows which tables share each one, and flags where the tables disagree.
What an Element Holds
Section titled “What an Element Holds”| Setting | What it does |
|---|---|
| Name | The column name the element describes, written exactly as the columns have it. |
| Description | What the column holds. Columns that have no memo of their own show this one. |
| Type | The data type the project expects for this column. It is checked, not applied. See Type Conflicts. |
| Mask | A numeric mask. Columns that have no mask of their own use this one. |
| Dimension | A dimension the column’s values come from. Columns that have no dimension of their own use this one. |
| Aliases | Other column names that mean the same thing. |
How a Column Gets an Element
Section titled “How a Column Gets an Element”A column is bound to an element when its column ID is the same as the element’s name or one of its aliases. The match is exact: period and Period are different names, so add period as an alias of Period if you want both.
Add or delete an element and every matching column follows.
What a Column Takes From Its Element
Section titled “What a Column Takes From Its Element”A bound column takes the element’s Description, Mask and Dimension wherever its own value is blank. A value you set on the column itself always wins. The element never changes what is stored on a table: delete it and each column goes back to exactly what it had.
Type is not taken from the element.
Open the Data Model Page
Section titled “Open the Data Model Page”Open the project, then choose Data model in the rail on Project Home. The rail’s badge shows how many elements the project has. You can also open the page from a column:
- In Table Explorer, turn on Column Properties and select a column. The Element row shows the column’s element, or, if it has none and you can edit the project, Make this an element. Click it to open the Data model page on that element, or on a new element that starts with the column’s own description, mask and dimension.
- On a dimension’s list of what uses it, a row named Project element opens the Data model page.
Everyone who can open the project can see the page. To create, change or delete elements you need write access to the project, and the project can’t be locked. Otherwise the page says “You can see the data model here but not change it.”
Create an Element
Section titled “Create an Element”- On the Data model page, click New element.
- Enter a Name. Fill in Description, Type, Mask and Dimension as needed. Leave Type on Any type to accept any type.
- In Aliases, enter other column names that mean the same, one per line.
- Click Save.
An element can’t take a name or alias another element already has. To change an element, click the pencil (Edit element) beside it. If you rename it, the old name stays as an alias so its columns keep the element.
To remove one, open it and click Delete, then confirm with Delete element. The confirmation says how many tables are bound to it. Nothing stored on those tables changes.
Suggested Elements
Section titled “Suggested Elements”Under Suggested, the page lists column names worth turning into elements:
- A name that isn’t yet an element or alias and is in two or more tables, where the column’s type can be a join key (an unknown type counts), shown as “name is in n tables.” Click Make element to create it.
- A name that matches an element’s name or alias when you ignore case and underscores, even if it is in only one table, shown as “name looks like element (n tables).” Click Add alias to bind its columns to that element.
Read the Data Model
Section titled “Read the Data Model”The Graph and Matrix switch above the canvas shows the same tables and elements two ways.
- Graph. Each element is a hub, and each table is a card joined to the elements it has a column for. A 1 on a line marks a column that is the table’s only key. A table with a combined key of several columns isn’t marked. The page opens on one element and its tables. Click an element to focus on it, click a table to focus on that table, or double-click a table to open it. The chips beside Hide elements hide or show elements you don’t want in the drawing.
- Matrix. One row per table and one column per element. Use Filter by table name to narrow the rows.
Type Conflicts
Section titled “Type Conflicts”A table whose column has a different type from the rest is flagged under the element: “column is type in table, which differs from the other tables.” Types are compared by family, so a whole number and a decimal don’t conflict. If the element has a Type, the others are compared with its family. If not, they’re compared with the family most columns use, and when two families are tied the one that comes first alphabetically is used. A conflict is a warning only; it changes nothing.
A table that can’t be read is left out and counted on the page instead of stopping it.
Where You See Elements
Section titled “Where You See Elements”Elements show as a pill with the element’s name:
- Table Explorer. The column list has a Marks column with the pill, beside the Dimension and Row access pills. Hover over the pill to see the element, its description and its dimension.
- Column Properties. The Element row opens the element. When Description, Mask or Dimension is blank, the field shows “From element name: value” as a hint. The hint isn’t saved with the column.
- Step Data Mapping tab. Source and target columns that belong to an element show its pill after the column name.
Use Elements From the REST API and MCP
Section titled “Use Elements From the REST API and MCP”The REST API reads and changes elements at /rest/v1/analyze/projects/{project_id}/elements:
| Request | Does |
|---|---|
GET |
Returns elements, and index, which maps each bound column name to its element’s name. |
PUT |
Creates or replaces an element from name, memo, dtype, mask, dimension and aliases. Add rename_from to rename one. |
DELETE with ?name= |
Deletes the named element. |
GET /graph |
Returns what the Data model page shows: each element with its table count and type conflicts, the bound columns of each table, and the suggestions. |
Table metadata returns the values stored on each column, not the values it takes from an element. To find which element a column takes values from, look up its name in the index from GET elements.
An assistant connected over MCP uses element_find, element_upsert and element_delete. Its table descriptions show each column’s memo with the element’s value filled in where the column has none.