6.1.3 Managing Dimensions and Hierarchies in EDMCS
This section describes how to extend the integration between Enterprise Data Management Cloud Service (EDMCS) and DFCS, including how to add and manage dimensions, attributes, and hierarchies in EDMCS for use in DFCS.
The service includes a set of preconfigured dimensions in EDMCS. However, depending on your business requirements, you need to configure additional metadata, such as creating a new dimension or adding attributes to an existing dimension.
Review the following guidelines before creating or modifying dimensions and
attributes.
- Dimension Naming: You can choose the name of the dimension. However, it is recommended to use the same name as the corresponding dimension in DFCS.
- Attribute Naming: Attribute names must match the names used in DFCS. Refer to the Catalog for the list of Business Terms (attributes in EDMCS). You can also find the attribute names in the Download Specification document.
- Attribute Data Type: After an attribute is saved, its data type cannot be modified. To change the data type, you must delete the attribute and recreate it.
- Hierarchy Rules for Dimensions: Dimensions with hierarchies must follow the
validations listed below:
Validation Rule Description Leaf Node Sharing All leaf nodes must be shared across all hierarchies as leaf nodes. Intermediate Node Uniqueness Intermediate nodes must be unique within a dimension. No Sharing Within Hierarchy A node can appear only once within the same hierarchy.
The following values are generated automatically using EDMCS expressions.
1. Child Node ID (Child Numeric Identifier): Returns the numeric
identifier of the current node using the DFCS Node ID
property.
{
{"statements":
[{"type":"return","expression":{"type":"node","id":"node","invoke":
{"type":"properties","invoke":
{"type":"propertyValue","id":"ca27fb33-1361-493c-95f6-aabd1218b945"}}}}]}
}
2. Parent Node Id (Parent Numeric
Identifier)
{
{"statements":
[{"type":"if","condition":{"type":"node","id":"node","invoke":
{"type":"properties","invoke":{"type":"propertyValue","id":"f803899c-8117-41c4-99dc-0f413849656d","invoke":{"type":"equals","argument":
{"type":"intLiteral","value":1}}}}},"statements":
[{"type":"return","expression":
{"type":"intLiteral","value":0,"invoke":
{"type":"toNumericString","padLength":
{"type":"intLiteral","value":0}}}}],"else":
{"type":"else","statements":[{"type":"return","expression":
{"type":"node","id":"node","invoke":{"type":"parent","invoke":
{"type":"properties","invoke":
{"type":"propertyValue","id":"ca27fb33-1361-493c-95f6-aabd1218b945"}}}}}]}}]}
}
3. Node Id (Numeric
Identifier)
{
{"statements":
[{"type":"return","expression":
{"type":"node","id":"node","invoke":
{"type":"properties","invoke":
{"type":"propertyValue","id":"f85d696d-784a-420f-b9e2-b730a8355b1a"}}}}]}
}
4. Hierarchy
Code
{
{"statements":
[{"type":"if","condition":{"type":"node","id":"node","invoke":
{"type":"properties","invoke":
{"type":"propertyValue","id":"f803899c-8117-41c4-99dc-0f413849656d","invoke":
{"type":"equals","argument":{"type":"intLiteral","value":1}}}}},"statements":
[{"type":"return","expression":
{"type":"node","id":"node","invoke":{"type":"name"}}}],"else":
{"type":"else","statements":
[{"type":"return","expression":
{"type":"node","id":"node","invoke":
{"type":"ancestors","invoke":
{"type":"get","index":{"type":"intLiteral","value":0},"invoke":
{"type":"name"}}}}}]}}]}
}
5. Display Order
Number
{
{"statements":[{"type":"if","condition":
{"type":"node","id":"node","invoke":
{"type":"properties","invoke":
{"type":"propertyValue","id":"f803899c-8117-41c4-99dc-0f413849656d","invoke":
{"type":"greaterThan","argument":
{"type":"intLiteral","value":1}}}}},"statements":
[{"type":"return","expression":{"type":"node","id":"node","invoke":
{"type":"parent","invoke":{"type":"properties","invoke":
{"type":"propertyValue","id":"b1819319-1484-4dd0-87df-c3d29a05f30d","invoke":
{"type":"indexOf","search":{"type":"node","id":"node","invoke":
{"type":"name"}},"invoke":{"type":"add","argument":
{"type":"intLiteral","value":1}}}}}}}}],"else":
{"type":"else","statements":[{"type":"return","expression":
{"type":"intLiteral","value":0}}]}}]}
}
For more information on adding Derived Properties, see Derived Properties.
Validations for Dimensions with Hierarchies
The following are the validations for dimensions with Hierarchies:
- Bottom Node Hierarchy Check- Ensures that the bottom nodes are under each
hierarchy (Top
Node).
{ {"statements":[{"type":"if","condition": {"type":"node","id":"node","invoke": {"type":"properties","invoke": {"type":"propertyValue","id":"e75ab694-50b7-40b8-86d0-50f07d9ae8a3","invoke": {"type":"not"}}}},"statements": [{"type":"comment","value":"If this is not a bottom node then skip the validation"},{"type":"return","expression": {"type":"booleanLiteral","value":true}}],"elseifs": [{"type":"elseif","condition":{"type":"node","id":"node","invoke": {"type":"allAncestors","invoke":{"type":"filter","predicate": {"type":"nodePredicate","statements": [{"type":"node","id":"thisNode","invoke": {"type":"properties","invoke": {"type":"propertyValue","id":"f803899c-8117-41c4-99dc-0f413849656d","invoke": {"type":"equals","argument": {"type":"intLiteral","value":1}}}}}]},"invoke": {"type":"size","invoke":{"type":"equals","argument": {"type":"node","id":"node","invoke": {"type":"ancestors","invoke":{"type":"get","index": {"type":"intLiteral","value":0},"invoke": {"type":"siblings","invoke":{"type":"size","invoke": {"type":"add","argument":{"type":"intLiteral","value":1}}}}}}}}}}}},"statements": [{"type":"comment","value":"Finally check if it is under all top nodes"}, {"type":"return","expression":{"type":"booleanLiteral","value":true}}]}],"else": {"type":"else","statements":[{"type":"return","expression": {"type":"booleanLiteral","value":false}}]}}]} } - Bottom Node Hierarchy Check (Remove)- Prevents removing the last location
from a hierarchy(Top
Node).
{ {"statements":[{"type":"if","condition": {"type":"node","id":"node","invoke": {"type":"properties","invoke": {"type":"propertyValue","id":"e75ab694-50b7-40b8-86d0-50f07d9ae8a3","invoke": {"type":"not"}}}},"statements": [{"type":"comment","value":"If this is not a bottom node then skip the validation"},{"type":"return","expression":{"type":"booleanLiteral","value":true}}],"elseifs": [{"type":"elseif","condition":{"type":"node","id":"node","invoke": {"type":"actions","invoke":{"type":"any","predicate": {"type":"actionPredicate","statements":[{"type":"action","id":"action","invoke": {"type":"type","invoke":{"type":"isRemove"}}}]}}}},"statements": [{"type":"comment","value":"If it is a Request Remove Action then prevent it if this is the last location under the top node. \nNote: this requires visualized mode AND assumes no implicitly shared nodes"}, {"type":"return","expression":{"type":"node","id":"node","invoke": {"type":"locations","excludeImplicitShares":{"type":"booleanLiteral","value":false},"sort": {"type":"booleanLiteral","value":false},"invoke": {"type":"filter","predicate":{"type":"nodePredicate","statements": [{"type":"node","id":"thisNode","invoke":{"type":"properties","invoke": {"type":"propertyValue","id":"b3ef0bbe-8f21-4ba5-ad81-d5663f6fb6e0","invoke": {"type":"equals","argument":{"type":"node","id":"node","invoke": {"type":"properties","invoke":{"type":"propertyValue","id":"b3ef0bbe-8f21-4ba5-ad81-d5663f6fb6e0"}}}}}}}]}, "invoke":{"type":"size","invoke":{"type":"greaterThan","argument": {"type":"intLiteral","value":1}}}}}}}]}],"else":{"type":"else","statements": [{"type":"return","expression":{"type":"booleanLiteral","value":true}}]}}]} } - Intermediate Nodes Cannot be Shared- Ensures that only bottom nodes can be
shared, and intermediate roll up nodes cannot be shared between hierarchies.
{ {"statements":[{"type":"if","condition": {"type":"node","id":"node","invoke": {"type":"properties","invoke": {"type":"propertyValue","id":"e75ab694-50b7-40b8-86d0-50f07d9ae8a3","invoke": {"type":"equals","argument":{"type":"booleanLiteral","value":false},"invoke": {"type":"and","argument":{"type":"node","id":"node","invoke": {"type":"locations","excludeImplicitShares": {"type":"booleanLiteral","value":false},"sort": {"type":"booleanLiteral","value":false},"invoke": {"type":"size","invoke":{"type":"greaterThan","argument": {"type":"intLiteral","value":1}}}}}}}}}},"statements": [{"type":"return","expression":{"type":"booleanLiteral","value":false}}],"else": {"type":"else","statements":[{"type":"return","expression": {"type":"booleanLiteral","value":true}}]}}]} } - No Sharing Within Hierarchy- Within a hierarchy (Top Node) a node can only
be present in one
location.
{ {"statements":[{"type":"return","expression": {"type":"node","id":"node","invoke": {"type":"locations","excludeImplicitShares": {"type":"booleanLiteral","value":false},"sort": {"type":"booleanLiteral","value":false},"invoke": {"type":"count","predicate":{"type":"nodePredicate","statements": [{"type":"node","id":"thisNode","invoke":{"type":"properties","invoke": {"type":"propertyValue","id":"b3ef0bbe-8f21-4ba5-ad81-d5663f6fb6e0","invoke": {"type":"equals","argument":{"type":"node","id":"node","invoke": {"type":"properties","invoke":{"type":"propertyValue","id":"b3ef0bbe-8f21-4ba5-ad81-d5663f6fb6e0"}}}}}}}]}, "invoke":{"type":"lessThanOrEqual","argument":{"type":"intLiteral","value":1}}}}}}]} }
- Adding New Dimensions: For more information on adding dimensions, see EDMCS User Guide.
- Adding a Property to an Existing Dimension: For more information on adding a property, see EDMCS User Guide.
- Adding an Existing Property to a Dimension: For more information on adding an existing property, see EDMCS User Guide.