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

Posted

技术标签:

【中文标题】在 OLAP 多维数据集中存储不同时间间隔的最佳实践【英文标题】:Best practice to store diverse time intervals in OLAP cube 【发布时间】:2021-04-07 15:49:07 【问题描述】:

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

因此,假设事实表将存储聚合:

    每天 基于其天数记录的每个月 基于其月记录的每一年

它看起来像这样:

|------------------------------------------|
|   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
|------------------------------------------|

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

将日、月、年作为一个独立的维度会更好,还是无关紧要?

【问题讨论】:

【参考方案1】:

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

您还可以拥有一个每天一行的维度表以及便于聚合的各种属性,例如会计年度。

【讨论】:

那么,你会推荐描述一个模型BaseAggregatedFacts并继承到AggregatedFactsPerDayAggregatedFactsPerMonthAggregatedFactsPerYear吗?顺便说一句,为什么存储在一张表中是个坏主意? 在我能想到的环境中,它使检索变得更加困难。我主要考虑 SQL 数据库中的星型模式。可能有一些面向 OLAP 的数据存储不适用我的反对意见。 不知道你说的继承是什么意思。 对不起,我的意思是在 MVP 的 ORM-Model 类的上下文中继承,所以保留相似的表,用一个抽象描述,但名称不同 好的,我不能帮你做 MVP。对不起。

以上是关于在 OLAP 多维数据集中存储不同时间间隔的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

MySQL OLAP 多维数据集中的外部化时间维度?

在 Excel 中的 OLAP 多维数据集中搜索

OLAP 多维数据集中计算成员中的条件

OLAP 多维数据集中的日期维度已停止处理

使用 C# .NET 访问 Oracle 多维数据集中的 OLAP 数据?

多维数据的最佳数据结构?