diff --git a/docs/pages/product/data-modeling/reference/pre-aggregations.mdx b/docs/pages/product/data-modeling/reference/pre-aggregations.mdx
index fc73501d00215..549db7c010e94 100644
--- a/docs/pages/product/data-modeling/reference/pre-aggregations.mdx
+++ b/docs/pages/product/data-modeling/reference/pre-aggregations.mdx
@@ -647,6 +647,13 @@ cubes:
A [`granularity`][self-granularity] **must** also be included in the
pre-aggregation definition.
+
+
+To define multiple time dimensions for a single pre-aggregation, use the
+[`time_dimensions`][self-timedimensions] property instead.
+
+
+
### `granularity`
The `granularity` property defines the time dimension granularity of data
@@ -694,6 +701,92 @@ The value can be either a default granularity (i.e., `second`, `minute`, `hour`,
granularity][ref-custom-granularity]. This property is required when using
[`time_dimension`][self-timedimension].
+### `time_dimensions`
+
+The `time_dimensions` property allows you to define multiple time dimensions for
+a single pre-aggregation. Each time dimension is specified with its own
+granularity. This is useful when you need to pre-aggregate data based on
+multiple time columns.
+
+
+
+```javascript
+cube(`orders`, {
+ sql_table: `orders`,
+
+ pre_aggregations: {
+ multiple_time_dimensions: {
+ measures: [CUBE.count],
+ time_dimensions: [
+ {
+ dimension: CUBE.created_at,
+ granularity: `day`
+ },
+ {
+ dimension: CUBE.completed_at,
+ granularity: `day`
+ }
+ ],
+ partition_granularity: `month`
+ }
+ },
+
+ measures: {
+ count: {
+ type: `count`
+ }
+ },
+
+ dimensions: {
+ created_at: {
+ type: `time`,
+ sql: `created_at`
+ },
+
+ completed_at: {
+ type: `time`,
+ sql: `completed_at`
+ }
+ }
+})
+```
+
+```yaml
+cubes:
+ - name: orders
+ sql_table: orders
+
+ pre_aggregations:
+ - name: multiple_time_dimensions
+ measures:
+ - count
+ time_dimensions:
+ - dimension: created_at
+ granularity: day
+ - dimension: completed_at
+ granularity: day
+ partition_granularity: month
+
+ measures:
+ - name: count
+ type: count
+
+ dimensions:
+ - name: created_at
+ type: time
+ sql: created_at
+
+ - name: completed_at
+ type: time
+ sql: completed_at
+```
+
+
+
+When using `time_dimensions`, you cannot use the [`time_dimension`][self-timedimension]
+or [`granularity`][self-granularity] properties, as each time dimension defines
+its own granularity.
+
### `segments`
The `segments` property is an array of [segments from the
@@ -1755,6 +1848,7 @@ cubes:
[self-rollupjoin]: #rollup_join
[self-rolluplambda]: #rollup_lambda
[self-timedimension]: #time_dimension
+[self-timedimensions]: #time_dimensions
[self-buildrange]: #build_range_start-and-build_range_end
[wiki-olap-ops]: https://en.wikipedia.org/wiki/OLAP_cube#Operations
[wiki-composable-agg-fn]: