The Common Outline Format
Dimensions and members
An outline is a list of dimensions; each dimension is one rooted tree of members. A member’s name isn’t a unique identity by itself - only a parent/name combination is - so the same name can legitimately appear more than once in a dimension, under different parents (or as a shared member explicitly reusing another member’s data; see Standard member properties).
Every extracted outline can also carry a handful of source-level facts alongside the dimension data itself - see Server/application/cube propagation below.
Standard member properties
Every member carries the same set of well-known properties, regardless of which extractor produced
it - though not every source system populates every one (a plain Essbase outline XML export, for
example, has no concept of Level Usage for Aggregation, an ASO-only property only the Java API
exposes). This is also the full set of columns all-properties
(All Properties File Writer) dumps, and the source of
every field-selection option documentation and load-file expose
(Shared conventions):
| Property | Description |
|---|---|
|
The immediate parent member’s name |
|
The member’s own name |
|
The member’s position/number as reported by the source |
|
The owning dimension’s position/number as reported by the source |
|
The member’s description |
|
A free-text comment on the member, separate from its description |
|
Whether this occurrence shares its data with another member elsewhere in the dimension |
|
How the member is stored (e.g. Store, Dynamic Calc, Shared, Label Only, Never Share), as reported by the source |
|
How the member rolls up into its parent (e.g. |
|
The member’s generation number, counted down from the dimension root |
|
The member’s level number, counted up from the leaves (0 for a leaf/level-0 member) |
|
Number of immediate children |
|
The member’s calculation formula, if it has one |
|
A display/number-format string associated with the member, if it has one |
|
Whether the member is flagged for two-pass calculation |
|
How the member aggregates across time periods (e.g. Flow, First, Balance, Average), as reported by the source |
|
Which values to skip when computing the time balance (e.g. None, Missing, Zeros), as reported by the source |
|
Whether the member is flagged as an expense account, which reverses how variance is calculated against it |
|
ASO-only: how the member participates in aggregation at its level, as reported by the source - only ever populated by an extractor using the Essbase Java API |
|
The member’s user-defined attributes (UDAs) |
|
The member’s alias value in a specific alias table - one property per alias table defined on the outline, since the set of alias tables is per-outline, not fixed |
|
Lower-level source metadata (dimension type, storage category, attribute type) carried through for completeness; not currently surfaced by any writer’s field-selection options |
Server/application/cube propagation
Three property names - server, application, cube - are treated specially across the whole
tool. Any extractor that has one of these configured carries it onto the extracted outline
automatically, and any writer that supports the same name falls back to the outline’s value if the
writer itself wasn’t told one directly. In practice this means: configure server/application/
cube once, on the extractor, and a writer like jdbc that needs the same information doesn’t
need it repeated - unless you want to override it, in which case an explicit value on the writer
always wins.
What doesn’t round-trip yet
Two per-member concepts aren’t carried by the Common Outline Format yet, for different reasons.
Per-member alias values (e.g. that 100-10 is aliased to "Cola" in the "Default" table) are
purely a Common Outline Format gap - the underlying essbase-outline-export-parser library already
models them, nothing in NGOE reads or writes that field yet. Attribute-dimension associations (e.g.
that 100-10 has attribute Red) go one level deeper: the real Essbase export XML carries them per
member, but the library’s own member model has no field for it at all, so the data never survives
being parsed, regardless of what NGOE does - closing that one means extending the library first.
See Versions for the full list of what’s not carried forward from 2.5.x yet.