Data Modelling
In ForecastingApp data is organized in model cubes - massive tables with uniform layout and cube can hold billions or hundreds of billions data points.
Each cube has predefined set of dimensions such as product, customer or category. Some dimensions are provided by system such as Data Type which defines whether we are looking at actual or forecasted data. Some dimensions are user defined such as Product or Category. In addition to those dimensions each cube has metrics or numeric values attributable to each data point, and one or more time (temporal) dimensions describing months, weeks or days.
Each dimension has one or more elements which can be organized into hierarchies. In this way you can easily navigate from details to summary and vice versa. The cube automatically takes care of correct aggregation of different metrics as some metrics are plain sum or total of elements underneath whereas others are averages over weeks, averages over existing values and so forth. As you select an element from the context picker the system automatically determines appropriate rollup rule and applies it to your data.
An example of Week dimension. It has elements (years, months, weeks) with weeks being leaf-level elements, and months and years being rollups.
In user-serviceable dimensions you can create elements and rollups as needed. Some dimensions such as Week are semi-serviceable which means that basic building block (i.e. weeks) are provided by system but you can create your own rollups. For convenience the system provides default rollups in some cases.
In dimension editor you can see that system element id-s start with number (0-9) whilst elements provided by user start with a letter.
Each dimension element can have one or more attributes including Name and some other information such as product SKU code. These attributes can be used to display the information (label), or perform a particular query via the API e.g. "all product whose SKU starts with letter A" or "all customers who have email address and opt-in is 'Y'".