ActivePivot

ActivePivot

  • 5.9.7
  • Other Versions
  • User Guide
  • Technical Documentation
  • Support

›Advanced APIs

Introduction

  • Overview
  • What's new in ActivePivot

Getting Started

  • Overview
  • AP in a Nutshell
  • Development Environment
  • Download
  • Sandbox Project

Concepts

  • Overview
  • AP Concepts in a Nutshell
  • Data Versioning (MVCC)
  • Dimensions and Hierarchies
  • Partitioning and NUMA
  • Other Concepts

Data Loading

  • Overview
  • Datastore

    • Datastore Configuration
    • Datastore Transactions
    • Store Indexing

    ETL

    • Overview
    • CSV Source
    • JDBC Source
    • Parquet Source

Aggregation & Analytics

  • Overview
  • Cube Configuration
  • Copper API

    • Introduction
    • API
    • Measures
    • Hierarchies
    • Publication
    • Join operations
    • Advanced topics

    Streaming API

    • Continuous Queries Overview
    • Streaming Overview
    • Continuous Query Engine
    • Continuous Handlers

    Advanced APIs

    • Cube Locations
    • Post-Processors
    • Cube Filters
    • Member Properties
    • Context Values

Data Querying

  • Overview
  • Business Frontends
  • Server Endpoints

    • XMLA
    • Datastore REST API
    • Cube REST API
    • Cube Websocket API

    MDX

    • MDX Engine Configuration
    • MDX Functions
    • MDX Operators
    • MDX Formats
    • MDX Filtering
    • MDX Snippets
    • MDX Cellsets
  • Datastore Queries
  • Location-Based Queries
  • Drillthrough Extensions

Configuration

  • Overview
  • ContentServer

    • Content Server
    • ContentServer REST API
    • CS Websocket API
  • ActivePivot Properties
  • Internationalization

Security

  • Overview
  • Client/Server Communication

    • Authentication
    • Authorization & Entitlements

    Data Access Control

    • Datastore Access Control
    • ActivePivot Access Control
    • Branch Permission Manager

Distributed Architecture

  • Overview
  • Communication Flows
  • Post-Processors
  • Security
  • What-If
  • Recommendations
  • Distribution Properties

Operations

  • Overview
  • Monitoring

    • Health Dispatcher
    • Query Execution Plan
    • Monitoring Query Execution
    • JMX monitoring
    • Off-Heap Memory Export
    • Tracing REST API
  • Troubleshooting
  • Performance
  • High Availability

Release & Migration Notes

  • Changelog
  • Migration notes

Reference

  • Javadoc
  • REST APIs

Cube Locations

Location Definitions

A Location represents the path to one or several cells in a cube. For each Hierarchy, it specifies a path to one or more members.

A Coordinate is the value for a hierarchy/level pair. It is also called the Discriminator. For example, 'the Coordinate at (3,4)' represents the value at Hierarchy 3, Level 4. If Hierarchy 3 is a Date/Time hierarchy and its member in the location is 2014\October\23-Oct-2014\7am\07:25, then Discriminator designated by 'the Coordinate at (3,4)' is 7am.

Concrete locations

A concrete location, also called point location, or fully defined location, points at a single cell in the cube. It defines a specific member on each hierarchy.

As the main principle of an OLAP database is the aggregation of data, the exact definition required on each hierarchy is a path of a member from a root to the appropriate child member. For instance, suppose we have two root members (the years 2013 and 2014) on a time hierarchy. Each of these years has 12 children which are the months. Similarly, each month has a particular set of child days.

Hence on this hierarchy, one user can focus on:

  • A year, e.g.: 2014
  • A month defined by it's path, e.g.: 2014\October
  • A day defined by it's path, e.g.: 2014\October\23-Oct-2014

A location is fully defined when we are aware of all members' paths on each hierarchy.

An illustration of this would be to have a 3 hierarchy cube, with each hierarchy having a single level:

  • Time hierarchy with YEAR, MONTH and, DAY as levels. The hierarchy ordinal is 1.
  • Sales hierarchy with ALL and, SALESMAN as levels. The hierarchy ordinal is 2.
  • Products hierarchy with ALL and, PRODUCT as levels. The hierarchy ordinal is 3.

A fully defined location would give the path to each appropriate member for each hierarchy, such as [2014\October, ALL\John, ALL].

Range location

A range location points at one or more cells in the cube. It is used to efficiently represent a set of concrete locations. Range locations allow wild-cards in order to describe patterns. Wild-cards can be either discriminators, or an all wildcard that means any member is accepted. If a location contains either the all wildcard or a collection for one of its coordinates, it is a range location.

For example, with the 3 hierarchy cube defined above, the location [2014*, ALL{John, Sophie}, ALL\Product 1] has a all wildcard for the MONTH level on the Time hierarchy, which means that the location points to each month of year 2014, and the Sales hierarchy has a collection for the SALESMAN level, which means the location points to either John or Sophie. Resolving this range location would lead to a set of 24 point locations:

  • 2014\January, ALL\John, ALL\Product 1 ... 2014\December, ALL\John, ALL\Product 1
  • 2014\January, ALL\Sophie, ALL\Product 1 ... 2014\December, ALL\Sophie, ALL\Product 1

The ILocation interface

A location is defined in the Java code by the ILocation interface. The location can be represented as a two dimensional array:

/**
 * @return plain array representation of the location.
 */
Object[][] arrayCopy();

In the array notation, members are represented by actual Java Objects, not necessarily String. The all wildcard is represented by null and collections of coordinates are Java Collections. The first dimension of the array represents the hierarchy, while the second dimension represents that hierarchy's levels.

Note that locations do not contain the measures hierarchy, which has the ordinal 0. So hierarchy ordinals start at 1 while array indices are 0-based: the -1 shift should not be forgotten when translating the hierarchy ordinals to the array.

The array representation for "each month of 2014 for John or Sophie on Product 1" would be

new Object[][]{
        new Object[]{2014, null},
        new Object[]{ILevel.ALLMEMBER, Arrays.asList("John", "Sophie")},
        new Object[]{ILevel.ALLMEMBER, "Product 1"}}

Note Several implementations of ILocation exist, many of which do not materialize the location array for performance reasons. When manipulating an ILocation, if you only need to access some of the coordinates rather than the whole location array, it is better to use:

/**
 * @return the coordinate at the given hierarchy and given level depth. The coordinate can be a
 *         range coordinate: a <code>null</code> value means either 'ANY' or an explicit
 *         collection of values.
 */
Object getCoordinate(int hierarchyIndex, int levelIndex);

Note that in this case the parameters are named index rather than ordinal : this method uses the 0-based index in the location array (-1 shift from the hierarchy ordinal).

LocationUtil

com.quartetfs.biz.pivot.impl.LocationUtil provides a wide range of utilities to read, test, and transform locations. Be sure to check the utility class whenever you need to manipulate a location, as there may already be a utility already written for what you need.

A common usage in post-processors is the createModifiedLocation method to prefetch data from a location created by a little transformation on the location queried (for example if you want to retrieve data from the previous day).

← Continuous HandlersPost-Processors →
  • Location Definitions
    • Concrete locations
    • Range location
  • The ILocation interface
  • LocationUtil
ActivePivot
Community
Stack OverflowLinkedinTwitter
More
Blog
Copyright © 2021 ActiveViam