Skip to main content
Virtual hierarchies are an effective way to reduce data loading time and memory usage in Atoti. Instead of populating hierarchy members during data loading, a virtual hierarchy creates an empty structure. Member values are retrieved from the database or from an aggregate provider only when needed in a query.
  • Faster data loading: Large hierarchies with millions of distinct values can slow down loading. Virtual hierarchies skip member population at load time.
  • Lower memory consumption: Regular hierarchies store members in a tree structure. Virtual hierarchies do not build this tree, saving memory for high-cardinality fields.

When to use virtual hierarchies

Virtual hierarchies are best for:
  • High-cardinality hierarchies with non-repeating strings (e.g., Trade ID).
  • Hierarchies that are not used for slicing or ordering.
  • Scenarios where members are only needed for filtering or display in queries.
Avoid using virtual hierarchies for:
  • Date hierarchies (ordering is required).
  • Slicing hierarchies (need a default member).
  • Use cases requiring next, previous, or lag operations.

How to decide

Ask these questions:
  • Does the hierarchy have very high cardinality?
  • Are the member values non-repeating strings?
  • Is the hierarchy used for slicing?
  • Is the order of the members in hierarchy important?
  • Will users need to filter on this hierarchy outside Atoti UI or Excel?
Virtual hierarchies decision flow
Find out how to set a hierarchy as a virtual hierarchy using: