首页 > 解决方案 > 我可以在这个维度模型中改进什么?

问题描述

在此处输入图像描述

嗨,我是 Kimball Dimensional Modeling 的新手。我想知道是否有人可以就我在这个星型模式模型中可以改进的地方给我一些反馈?这是一个模型,每个客户每次付款一排。它还有一个客户维度设置为渐变维度类型 2。谢谢!

标签: sqlmodelingstar-schemafact-table

解决方案


总的来说,这是一个良好的开端,它可能工作得很好,具体取决于您的分析需求。我看到的唯一严重问题是您的模型中缺少日历尺寸。至少两个:一个用于到期日,一个用于付款日期。这些日期在事实表中应该是 FK。

不太重要的是,我还会考虑将一些数字属性从 Loan 维度移动到事实表中。例如,预付款金额可能属于客户付款表。为了区分不同类型的付款,我会添加一个维度“付款类型”,您可以在其中设置“首付”、“分期付款”、“预付款”等值。这种设计的好处之一是总结所有相关的客户付款都很容易。

有时很难决定一个数值应该是事实表的一部分还是维度的一部分,或者两者兼而有之。一个好的决策规则是考虑你打算如何使用这个数字。如果您需要它来进行计算(即“显示所有首付”或“计算客户支付给贷款的总金额,包括首付”)或时间序列图表,那么它属于事实表。如果您需要它进行过滤(即“按首付金额向我显示客户付款”),那么它应该是一个维度属性。

就您而言,我认为您不太可能按首付规模、利率或特定比率进行过滤。因此,这些数字属于事实表——它们是定量事实,而不是过滤器。

设计师通常不会在维度中保留特定数字,而是将它们分组并从组中创建维度属性。例如,您可以创建属性“首付水平”,其值为“0 - 20%”、“20 - 50%”、“>50%”。这样的属性将有助于分类分析。另一方面,具体的首付金额应该属于事实表。

为什么重要:如果你在错误的地方建模一个数字,你会发现自己编写的计算代码越来越复杂。正确的设计会导致简单而优雅的查询。因此,如果在某些时候您发现查询变得过于复杂,这通常是事实被错误地建模为属性的症状。


推荐阅读