计划的数据仓库维度(维度建模)

Posted

技术标签:

【中文标题】计划的数据仓库维度(维度建模)【英文标题】:Data Warehouse dimension for schedules (Dimensional Modeling) 【发布时间】:2019-07-05 20:48:28 【问题描述】:

我还没有找到构建包含计划属性的维度的示例或方法。例如,在我的场景中,我正在构建一个数据仓库,这将有助于收集有关播客/广播节目剧集的分析。

我们有以下内容:

dim_episode dim_podcast_show dim_date fact_user_daily_activity

我正在尝试添加另一个维度,其中包含有关 podcast_show 的时间表属性,例如,一些节目每天播出其剧集,其他节目在周二和周四播出,其他节目仅在周六播出。

dim_show_schedule(选项 1)

| schedule_key | show_key | time  | sunday_flag | monday_flag | tuesday_flag | wednesday_flag | thursday_flag | friday_flag | saturday_flag |
|--------------|----------|-------|-------------|-------------|--------------|----------------|---------------|-------------|---------------|
| 1            | 0        | 00:30 | 0           | 0           | 1            | 0              | 1             | 0           | 0             |
| 2            | 1        | 12:30 | 0           | 1           | 1            | 1              | 1             | 1           | 0             |
| 3            | 2        | 21:00 | 0           | 0           | 0            | 0              | 0             | 0           | 1             |

但是,最好有一个像这样的桥牌桌:

bridge_show_schedule(选项 2)

| show_key | day_key |
|----------|---------|
| 0        | 2       |
| 0        | 4       |
| 1        | 1       |
| 1        | 2       |
| 1        | 3       |
| 1        | 4       |
| 1        | 5       |

dim_show_schedule(选项 3)(由 @nsousa 建议)

| schedule_key | show_key | time  | day         | 
|--------------|----------|-------|-------------|
| 1            | 0        | 00:30 | tuesday     |
| 1            | 0        | 00:30 | thursday    |
| 2            | 1        | 12:30 | monday      |
| 2            | 1        | 12:30 | tuesday     |
| 2            | 1        | 12:30 | wednesday   |
| 2            | 1        | 12:30 | thursday    |
| 2            | 1        | 12:30 | friday      |
| 3            | 2        | 21:00 | saturday    |

我在 Kimball 的数据仓库生命周期工具包中进行了搜索,但找不到有关此用例的示例。

有什么想法吗?

【问题讨论】:

【参考方案1】:

如果您保留一个带有字符串属性的维度,例如“M,W,F”,那么您拥有的最多条目是 2^7、128。桥接表是不必要的复杂化。

【讨论】:

不完全是,我会像您在选项 1 上那样设置维度,然后用所有 128 个可能性 x 48 个可能的时隙填充它,这只有 6k 条记录。从任何标准来看,它都是一个很小的维度。我的观点是:不同可能性的数量是如此之少,开发桥梁维度的麻烦不值得。【参考方案2】:

选项 1

您可以创建一个计划维度,其中包含每个可能的计划(每天 128 次组合)以及每个合理的开始时间的唯一记录。使用 5 分钟间隔仍然会少于 37k 行,这对于一个维度来说是微不足道的。

选项 2

如果您想改用日期维度,请创建一个“计划”事实,将节目维度与该未来日期的日期维度相关联。这将在您的 ETL 流程中处理以映射关系。您的日期维度应该已经包含了星期和星期几的逻辑。您还可以利用 Show duration 属性创建半加法计算度量,以便轻松获取该期间的总节目。

我会选择选项 2,因为它为分析提供了更多可能性。

【讨论】:

以上是关于计划的数据仓库维度(维度建模)的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库维度建模法案例

聊聊数据仓库中的缓慢变化维度(SCD)

数据仓库建模

大数据环境数据仓库&维度建模

维度建模数据仓库生命周期简介

搭建数据仓库第06篇:逻辑建模–3–维度建模核心之总线架构