我的事实表中包含政策数据&我想将Policy Products详细信息添加到仓库。 一项政策获得不同类型的产品,价值也是动态的。
例如:Policy01可能有两个产品Building&保额值为1000&的内容。分别为500。而Policy02只能获得750的建设。
有30种产品可供使用,我需要存储保险金额,毛额和金额。每项政策的每种产品的净保费。 因此,如果我将每个产品类型的单独列添加到事实表中,它将添加120个实时列(目前有23列)。每个政策最多还有5个产品,因此只有20列包含值&其他人仍然是空的。
事实表有100多列可以吗?可以连续保留这么多空值吗? 还是有其他方法可以解决这个问题吗?
我是DWH的新手,希望有人能告诉我如何将这些添加到我的事实表中。
答案 0 :(得分:2)
然后您可以按政策返回总计:
SELECT
PolicyKey
SUM(PolicyProductValue) AS PolicyValue
FROM
Fact.PolicyProductValue
GROUP BY
PolicyKey
;
或产品:
SELECT
ProductKey,
SUM(PolicyProductValue) AS ProductValue
FROM
Fact.PolicyProductValue
GROUP BY
ProductKey
;
或两者:
SELECT
PolicyKey,
ProductKey,
SUM(PolicyProductValue) AS PolicyProductValue
FROM
Fact.PolicyProductValue
GROUP BY
PolicyKey,
ProductKey
;
此方法将产品从列移动到行。
这项技术有几个好处:
Dim.Product
添加常用过滤器。Dim.Product
提供了创建产品层次结构的位置。例如:
| Product Key | Product Name | Product Group |
| ----------- | ------------ | --------------------|
| 0 | Building | Building & Contents |
| 1 | Contents | Building & Contents |
答案 1 :(得分:2)
在事实表中有100多列是不行的;这是一个不正确的数据模型的症状(缺失值也是如此 - 设计良好的事实表不应该有任何)。
事实表设计的逻辑如下: 首先,在表格上确定“粒度” - 它将包含的最原子级数据。在您的情况下,数据粒度由策略编号+产品定义。他们一起唯一地识别您可获得的最详细信息。
然后,确定您的“事实”。通常,事实是您可以聚合的数据(总和,计数,平均等)。在您的情况下,它们是Insured_Value,Gross_Premium,Net_Premium。
最后,为这些事实(维度)定义业务背景。在您的情况下,它们是政策和产品(很可能,您也会有某种日期)。
您生成的事实表应如下所示:
Policy_Date将提供与“日历”维度的连接,Product_ID将连接到“产品”维度(包含您的30个产品及其描述的表格)。
Policy_Number是所谓的“退化维度” - 它是一个通常没有连接到任何维度的ID(但如果需要,可以)。它作为参考存储在事实表中。有些人为模型添加了“策略”维度,但通常这是一个设计错误 - 这样的维度太“高”,在大小上与事实表相当,这可能会大大降低模型性能。通常最好将策略属性拆分为多个小维度,并将策略编号保留为简并维度。
因此,具有5个产品的典型策略将在事实表中表示为5条记录,而不是包含5个字段的一条记录。这是至关重要的区别 - 永远不会在事实表字段的名称中存储信息(在您的情况下为产品)。