计划的数据仓库维度(维度建模)
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,因为它为分析提供了更多可能性。
【讨论】:
以上是关于计划的数据仓库维度(维度建模)的主要内容,如果未能解决你的问题,请参考以下文章