在 OLAP 多维数据集中存储不同时间间隔的最佳实践

Best practice to store diverse time intervals in OLAP cube

我的任务是制作“OLAP 立方体”,按时间间隔聚合

因此,据推测,事实 table 将存储聚合:

  1. 每天
  2. 每个月根据其天数记录
  3. 每年根据月份记录

它看起来像这样:

|------------------------------------------|
|   id |  day | month | year | total_sales |
|------------------------------------------|
|    1 |    1 |     1 | 2020 |          10 |
|    2 |    2 |     1 | 2020 |          10 |
| ...N | ...N |  ...N | 2020 |          10 |
|   32 | null |     1 | 2020 |         310 |  # total for Jan 2020
| ...N | null |  ...N | 2020 |         300 |
|  378 | null |  null | 2020 |        3600 |  # total for 2020
|------------------------------------------|

那么,总的来说这是一个好的计划吗?

将日、月、年作为一个独立的维度更好,还是无所谓?

在大多数情况下,将不同粒度的事实混合在一个事实中并不是一个好主意table。如果你真的需要存储每日、每月和每年的数据,请考虑不止一个事实table。

您还可以使用每天一行的维度 table 以及有助于聚合的各种属性,例如会计年度。