我需要有关如何在数据仓库中构建重叠日期范围的帮助。我的目标是以允许对报告进行日期级别过滤的方式对数据建模。
我有尺寸 - DimEmployee , DimDate 以及一个名为 FactAttendance 的事实。此事实中的记录存储如下 -
以图形方式表示 -
需要使用此数据创建报告,以便最终用户通过选择日期范围来过滤报告。假设用户选择日期范围D1到D20。在进行此选择时,用户应该看到值至少有一名员工休假的天数。在这个特定的例子中,我应该看到在底部添加浅蓝色片段,即11天。
我正在考虑的方法是为每个叶子每个日期为每个员工存储一行。这种方法的唯一问题是它会以指数方式增加事实表中的记录数。此外,事实中还有其他列将有冗余数据。
如何在仓库中处理这种重叠的日期/时间问题?有没有更好的方法不涉及插入多行?
答案 0 :(得分:0)
考虑像这样建立你的事实:
fact_attendance (date_id,employee_id,hours,...)
这样,您只需过滤日期维度即可回答原始问题,但您也可以处理诸如休假积分和休假日假等问题。
是的,它可能比第一个提案使用更多的存储空间,但它是更好的维度表示,并且将满足更多(潜在)要求。
如果你真的担心存储 - 可能不是真正的担心 - 使用带有柱状压缩的DBMS,你会看到磁盘节省很多。
我对存储说“不是真正的担心”的原因是,在当今的存储世界中,您的节省是毫无意义的。 1,000名员工每年休假20天,超过五年将意味着总共100,000行。您的DBMS可能会在RAM中执行整个星形连接。在压缩之前,即使是一百万名员工也需要不到一兆兆字节。