A data cube is an $n$-dimensional data storage solution. The data cube allows data to be modeled and viewed in multiple dimensions (e.g., time, product, store, location). The data cube supports [[OLAP]] operations including - roll-up or summarization/aggregation - drill-down - slice and dice - pivot/rotate - visualization - drill-across (join many fact tables) - drill-through (join to back-end relational tables) ## cuboids Data cubes can be aggregated into cuboids. A cuboid is simply a join across one or more dimension and fact tables. All possible cuboids can be visualized in the **lattice of cuboids**. Pre-computation of cuboids is called [[materialization]]. ## multi-way array aggregation Full [[materialization]] can be computed with multi-way array aggregation. ## bottom-up aggregation Confusingly, bottom-up aggregation (defined by Beyer & Ramakrishnan) is actually a top down [[materialization]] of cubes. Staring from the combination of all cubes, partition until the next partition is no longer needed. This better supports pruning so only necessary cubes are pre-computed.